在Spring中使用Redis

 端口怎么设置,看我前一篇文章

前面使用jedis,通过Jedis对象中各种方法来操作redis的。

此处Spring中则是通过StringRedisTemplate来操作redis。

最原始提供的类是RedisTemplate

StringRedisTemplate是RedisTemplate的子类,专门处理文本数据的

这个类提供的方法,相比较于Jedis还是有区别的。

做了进一步封装,得到了专门操作字符串的对象,得到了专门操作xx的对象。初心是为了接口更简单。

字符串常用操作

set-get    设置,获取

有些操作封装来,有些没有封装,比如删库,比如ping

RedisTemplate留了一手,让我们随意执行redis的原操作

execute方法,RedisCallback函数式接口,相当于一个回调函数,就在回调里,写我们要执行的redis命令,这个回调就会被RedisTemplate内部进行执行了。

链表常用操作

leftpop和rightpop,头删,尾删

Set常用操作

Hash常用操作

Zset常用操作

​​​​​​​

package com.example.demo.Controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Set;

//后续redis测试的各种功能,都通过这个Controller提供的http接口
@Controller
public class MYController {
    @Autowired
    private StringRedisTemplate redisTemplate;

    @GetMapping("/testString")
    @ResponseBody
    public String testString() {
        redisTemplate.opsForValue().set("key", "111");
        redisTemplate.opsForValue().set("key", "222");
        redisTemplate.opsForValue().set("key", "333");
        String value = redisTemplate.opsForValue().get("key");
        System.out.println("value:" + value);
        return "ok";
    }

    @GetMapping("/testList")
    @ResponseBody
    public String testList() {
        //先删库
        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            //execute要求回调方法中必须写return,返回个东西
            //这个回调返回的对象,就会作为execute本身的返回值
            return null;
        });
        redisTemplate.opsForList().leftPush("key", "111");
        redisTemplate.opsForList().rightPush("key", "222");
        String value = redisTemplate.opsForList().rightPop("key");
        System.out.println("value:" + value);
        value = redisTemplate.opsForList().leftPop("key");
        System.out.println("value:" + value);
        return "OK";
    }

    @GetMapping("/testSet")
    @ResponseBody
    public String testSet() {
        redisTemplate.execute((RedisConnection connecion) -> {
            connecion.flushAll();
            return null;
        });
        redisTemplate.opsForSet().add("key", "111", "222", "333");
        Set<String> result = redisTemplate.opsForSet().members("key");
        System.out.println("result:" + result);
        boolean exists = redisTemplate.opsForSet().isMember("key", "111");
        System.out.println("exist:" + exists);
        Long count = redisTemplate.opsForSet().size("key");
        System.out.println("count:" + count);
        redisTemplate.opsForSet().remove("key", "111", "222");
        result = redisTemplate.opsForSet().members("key");
        System.out.println("result:" + result);
        return "Ok";
    }
    @GetMapping("/testHash")
    @ResponseBody
    public String testHash(){
        redisTemplate.execute((RedisConnection connection)->{
            connection.flushAll();
            return  null;
                });
                redisTemplate.opsForHash().put("key","f1","111");
                redisTemplate.opsForHash().put("key","f2","222");
                redisTemplate.opsForHash().put("key","f3","333");
                String value= (String)  redisTemplate.opsForHash().get("key","f1");
                Boolean exists=redisTemplate.opsForHash().hasKey("key","f1");
                System.out.println("exists:"+exists);
                redisTemplate.opsForHash().delete("key","f1","f2");
                Long size=redisTemplate.opsForHash().size("key");
                System.out.println("size"+size);
                return "OK";
    }

    @GetMapping("/testZSet")
    @ResponseBody
    public String testZSet(){
        redisTemplate.execute((RedisConnection connection)->{
            connection.flushAll();
            return null;
        });
        redisTemplate.opsForZSet().add("key","zhangsan",10);
        redisTemplate.opsForZSet().add("key","lisi",20);
        redisTemplate.opsForZSet().add("key","wangwu",30);
        Set<String>members= redisTemplate.opsForZSet().range("key",0,-1);
        System.out.println("members:"+members);

        Set<ZSetOperations.TypedTuple<String>>membersWithScore=redisTemplate.opsForZSet().rangeWithScores("key",0,-1);
        System.out.println("membersWithScore:"+membersWithScore);

        Double score= redisTemplate.opsForZSet().score("key","zhangsan");
        System.out.println("score:"+score);

        redisTemplate.opsForZSet().remove("key","zhangsan");
        Long size=redisTemplate.opsForZSet().size("key");
        System.out.println("size:"+size);

        Long rank=redisTemplate.opsForZSet().rank("key","lisi");
        System.out.println("rank:"+rank);
        return "OK";
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/529519.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网格矢量如何计算莫兰指数

网格矢量如何计算莫兰指数 引言 遇到一个问题&#xff0c;计算矢量网格的莫兰指数。 概念解释 莫兰指数 莫兰指数&#xff08;Moran’s Index&#xff09;是一种空间自相关指标&#xff0c;用于衡量空间数据的相似性和聚集程度。它可以用来描述一个区域与其邻近区域之间的属…

LeetCode 使数组连续的最少操作数

地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 难度&#xff1a;困难 题目描述&#xff1a;给你一个整数数组 nums 。每一次操作中&#xff0c;你可以将 nums 中 任意 一个元素替换成 **任意 **整数。 如果 nums 满足以下条件&#xff0c;那么它是 连续的 &#x…

java 错误:Illegal key size

前言 jdk 1.8 错误&#xff1a;Illegal key size Illegal key size分析 这个是由于jdk限制策略&#xff0c;导致只能128位key进行加解密&#xff0c;而256位加解密则抛出异常。 解决办法 下载jar&#xff1a;jar 下载地址 解压 替换%JAVA_HOME%/\jre\lib\security目录下…

专题十二、字符串

字符串 1. 字符串字面量1.1 字符串字面量中的转义序列1.2 延续字符串字面量1.3 如何存储字符串字面量1.4 字符串字面量的操作1.5 字符串字面量与字符常量 2. 字符串变量2.1 初始化字符串变量2.2 字符数组与字符指针 3. 字符串的读和写3.1 用 printf 函数和 puts 函数写字符串3.…

猫头虎分享已解决Error: 成功解决“No module named ‘sklearn‘ (ModuleNotFoundError)“

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 文章目录 猫头虎分享已解决Error: 成功解决"No module named sklearn (ModuleNotFoundError)" &#x1f431;&#x1f989;&#x1f527;摘要正文内容 介绍错误原因分析…

R-Tree的简单介绍

一、R-Tree简介 R-Tree&#xff0c;全称是“Real Tree”&#xff0c;是一种专门为处理多维空间数据&#xff08;尤其是二维空间数据&#xff0c;如地理坐标&#xff09;设计的树形数据结构。 简单来说&#xff0c;它就像是一个特殊的目录&#xff0c;将空间数据按照它们的位置…

【C语言】扫雷小游戏

文章目录 前言一、游戏玩法二、创建文件test.c文件menu()——打印菜单game()——调用功能函数&#xff0c;游戏的实现main()主函数 game.c文件初始化棋盘打印棋盘随机布置雷的位置统计周围雷的个数展开周围一片没有雷的区域计算已排查位置的个数排查雷(包括检测输赢): game.h文…

RK3568---4G模块驱动实验

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…

什么是电子邮件组,为什么要使用它们?

在当今时代&#xff0c;电子邮件无处不在&#xff0c;尤其是对于商业活动而言。电子邮件的重要性不容忽视&#xff0c;因为它在沟通中极为高效。然而&#xff0c;电子邮件也存在降低工作效率和阻碍流程的风险。在这种情况下&#xff0c;电子邮件群组就是最佳的解决方案。什么是…

蓝桥杯刷题-15-异或和之和-拆位+贡献法⭐⭐(⊙o⊙)

蓝桥杯2023年第十四届省赛真题-异或和之和 题目描述 给定一个数组 Ai&#xff0c;分别求其每个子段的异或和&#xff0c;并求出它们的和。或者说&#xff0c;对于每组满足 1 ≤ L ≤ R ≤ n 的 L, R &#xff0c;求出数组中第 L 至第 R 个元素的异或和。然后输出每组 L, R 得到…

C++初阶:stack和queue使用及模拟实现

stack的介绍和使用 stack的介绍 堆栈 - C 参考 (cplusplus.com) 翻译 : 1. stack 是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。 2. stack 是作为容器适配器被实现的&#xff0c;容器…

基于单片机和ICL7135多档位数字电压表设计

**单片机设计介绍&#xff0c;基于单片机和ICL7135多档位数字电压表设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机和ICL7135的多档位数字电压表设计是一个结合了硬件与软件技术的综合性项目。这种设计旨在实现一…

数据库的基本使用

一、数据库的简介 RDBMS简介&#xff1a; Relational Database Management System,通过表来表示关系类型。当前主要使用两种类型的数据库:关系型数据库和非关系型数据库。所谓的关系型数据库RDBMS是建立在关系模型基础上的数据库&#xff0c;借助于集合代数等数学概念和方法来…

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为…

Spingboot落地国际化需求,Springboot按照请求的地区返回信息

文章目录 一、国际化1、概述2、Spring国际化 二、springboot简单使用国际化1、定义MessageSource2、定义message配置文件3、测试 三、根据请求的地区获取信息1、定义message配置文件2、定义配置类3、基础模板工具4、消息模板定义枚举5、测试一下6、总结 一、国际化 1、概述 国…

设计模式-结构型-装饰器模式-decorator

发票基本类 public class Invoice {public void printInvoice() {System.out.println("打印发票正文");} } 发票正文类 public class Decorator extends Invoice {protected Invoice ticket;public Decorator(Invoice ticket) {this.ticket ticket;}Overridepubl…

Java配置自定义校验

1、自定义注解State message、groups、payload package com.zhang.anno;import com.zhang.validartion.StateValidation; import jakarta.validation.Constraint; import jakarta.validation.Payload;import java.lang.annotation.*;import static java.lang.annotation.Eleme…

javaScript中原型链

一、原型链 js 的对象分为普通对象和函数对象。每个对象都有__proto__ 但是只有函数对象 (非箭头函数) 才有 prototype 属性。 new的过程&#xff1a; 1、创建一个空的简单 javaScript对象 2、将空对象的 __proto__连接到该函数的 prototype 3、将函数的this指向新创建的对象…

鲁棒线性模型估计(Robust linear model estimation)

鲁棒线性模型估计 1.RANSAC算法1.1 算法的基本原理1.2 迭代次数N的计算1.3 参考代码 参考文献 当数据中出现较多异常点时&#xff0c;常用的线性回归OLS会因为这些异常点的存在无法正确估计线性模型的参数&#xff1a; W ( X T X ) − 1 X T Y \qquad \qquad W(X^TX)^{-1}X^T…

【docker】Docker 简介

Docker 简介 什么是虚拟化、容器化?为什么要虚拟化、容器化&#xff1f;虚拟化实现方式应用程序执行环境分层虚拟化常见类别虚拟机容器JVM 之类的虚拟机 常见虚拟化实现主机虚拟化(虚拟机)实现容器虚拟化实现容器虚拟化实现原理容器虚拟化基础之 NameSpace 什么是虚拟化、容器…