当前位置: 首页 > news >正文

Spring Data Redis操作Redis

  • 在Spring Boot项目中,可以使用Spring Data Redis来简化Redis操作,maven的依赖坐标:
       <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

在这里插入图片描述

8.3.3、操作Redis的步骤

(1)创建一个Spring Boot工程;

(2)在pom.xml文件中导入以上Spring Data Redis的依赖坐标;

(3)配置application.yml文件:

#spring的配置
spring:application:name: springdataRedis_demomain:#解决升级Spring Boot2.6,因依赖循环引用导致启动时报错的问题allow-circular-references: true#Redis的相关配置(在spring下)redis:port: 6379 #默认端口号host: localhost #表示连接的是本地的服务,要连接远程的话,需要更改为远程服务器的ip地址#设置密码(在redis的redis.windows.conf配置文件中有设置密码的话,这里要配置)#password: 123456database: 0  #默认提供了16个数据库,编号为0-15,在命令行可以通过select index更改数据库#jedis的配置jedis:#Redis连接池配置pool:max-active: 8 #最大连接数max-wait: 1ms #连接池最大阻塞等待时间max-idle: 4 #连接池中的最大空闲连接min-idle: 0 #连接池中最小空闲连接

(4)配置序列化配置类:

package com.itcast.springdataredis_demo.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;/*** @author :LTY* @date :Created in 2023/7/20 16:37* @description:序列化配置类* @modified By:* @version: $*/
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {//1.创建RedisTemplate对象RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();//默认的key序列化器为: JdkSerializationRedisSerializerredisTemplate.setKeySerializer(new StringRedisSerializer()); //String类型redisTemplate.setHashKeySerializer(new StringRedisSerializer()); //Hash哈希类型//设置Value的序列化redisTemplate.setValueSerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new StringRedisSerializer());//2.设置连接工厂redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}
}

(5)测试各数据类型的数据

首先在测试类上进行如下修改:

在这里插入图片描述

  • String类型数据

    测试代码:

  /*** 操作String类型数据*/@Testpublic void testString() {redisTemplate.opsForValue().set("city12", "beijing");String city = (String)redisTemplate.opsForValue().get("city12");System.out.println(city);//设置10秒的过去时间(对应redis的String类型的setex key seconds value命令)redisTemplate.opsForValue().set("key1", "value1", 10L, TimeUnit.SECONDS);//对应redis的String类型的setnx key value命令redisTemplate.opsForValue().setIfAbsent("city12","shanghai");}

​ 运行结果如下:

在这里插入图片描述

  • Hash哈希类型数据

​ 测试代码:

   /*** hash哈希类型数据*/@Testpublic void testHash() {HashOperations hashOperations = redisTemplate.opsForHash();//存入数据(对应hset命令)hashOperations.put("002","name","xiaohong");hashOperations.put("002","age","21");hashOperations.put("002","sex","male");//获取单个字段的值(对应hget命令)String name = (String)hashOperations.get("002", "name");System.out.println("获得单个字段的值(hget key field): " +name);//获得hash结构中所有的字段(对应hkeys命令)System.out.println("获得hash结构中所有的字段(hkeys key): ");Set keys = hashOperations.keys("002");for (Object key : keys) {System.out.println(key);}//获得hash结构中所有的字段的值(对应hvals命令)System.out.println("获得hash结构中所有的字段的值(kvals key): ");List values = hashOperations.values("002");for (Object value : values) {System.out.println(value);}//获取哈希表中指定key的所有字段和值(hgetall key)System.out.println("获得哈希表中指定key的所有字段和值(hgetall key): ");Map entries = hashOperations.entries("002");System.out.println(entries);}

运行结果如下:

在这里插入图片描述

  • List类型数据

    测试代码:

     /*** 操作List类型的数据*/@Testpublic void testList() {ListOperations listOperations = redisTemplate.opsForList();//存值(从左边存值)listOperations.leftPush("mylist", "a"); //存一个listOperations.leftPushAll("mylist","b","c","d"); //存多个//从右边存值listOperations.rightPush("mylist", "e");listOperations.rightPushAll("mylist", "f","g");//此时存入的值顺序:d c b a e f g//取值(从表头到表尾依次输出)List<String> mylist = listOperations.range("mylist", 0, -1);for (String s : mylist) {System.out.println(s); //输出:d c b a e f g}//获取列表的菜单llenSystem.out.println("...............移除...........");Long size = listOperations.size("mylist");int i1 = size.intValue();for (int i = 0; i < i1; i++) {//出队/***  leftPop:移除并获取第一个元素(从表头出队(左边))*  rightPop:移除并获取最后一个元素(从表尾移除(右边))*/
    //            String mylist1 = (String)listOperations.rightPop("mylist");
    //            System.out.println(mylist1); //输出:g f e a b c d//rightPopAndLeftPush:从mylist表尾移除数据,并在mylist2左边(表头)存值listOperations.rightPopAndLeftPush("mylist","mylist2", 10l, TimeUnit.SECONDS);//存入顺序:d c b a e f g}//取值System.out.println("..........mylist2..........");List<String> mylist2 = listOperations.range("mylist2", 0, -1);for (String s1 : mylist2) {System.out.println(s1); //输出:d c b a e f g}}
    

    运行结果如下:

在这里插入图片描述

  • Set类型数据

​ ①基本操作

​ 测试代码:

 /*** 操作Set类型数据*/@Testpublic void testSet() {SetOperations setOperations = redisTemplate.opsForSet();//存值(sadd)setOperations.add("myset", "a", "b", "c","a");//取值(smembers)Set<String> myset = setOperations.members("myset");//获得集合的成员数(scard)System.out.println("集合的成员数为: " + setOperations.size("myset"));for (String s : myset) {System.out.println(s); //输出:}//删除一个或多个成员(srem)setOperations.remove("myset", "a", "b");//取值myset = setOperations.members("myset");for (String string : myset) {System.out.println(string);}}

运行结果:

在这里插入图片描述

​ ②交集、并集和差集

​ 测试代码:

 /*** 交集、并集和差集*/@Testpublic void testSet2() {redisTemplate.opsForSet().add("myset2", "a", "b", "c");redisTemplate.opsForSet().add("myset3", "a", "b", "e");//交集System.out.println("myset2与myset3的交集为: ");Set<String> intersect = redisTemplate.opsForSet().intersect("myset2", "myset3");for (String o : intersect) {System.out.println(o);}//并集System.out.println("myset2与myset3的并集为: ");Set<String> union = redisTemplate.opsForSet().union("myset2", "myset3");for (String o : union) {System.out.println(o);}//差集//myset2-myset3System.out.println("myset2与myset3的差集为(myset2-myset3): ");Set<String> difference1 = redisTemplate.opsForSet().difference("myset2", "myset3");for (String o : difference1) {System.out.println(o);}//myset3-myset2System.out.println("myset3与myset2的差集为(myset3-myset2): ");Set<String> difference2 = redisTemplate.opsForSet().difference("myset3", "myset2");for (String o : difference2) {System.out.println(o);}}

运行结果:

在这里插入图片描述

  • ZSet类型数据

​ 测试代码:

/*** 操作ZSet类型数据*/@Testpublic void testZSet() {ZSetOperations zSetOperations = redisTemplate.opsForZSet();//存值zSetOperations.add("myZSet", "a", 20.0);zSetOperations.add("myZSet", "b", 30.0);zSetOperations.add("myZSet", "c", 40.0);zSetOperations.add("myZSet", "a", 50.0);//取值Set<String> myZSet = zSetOperations.range("myZSet", 0, -1);for (String s : myZSet) {System.out.println(s);}

运行结果:

在这里插入图片描述

  • 通用操作

​ 测试代码:

/*** 通用操作,针对不同类型的数据类型都可以进行操作*/@Testpublic void testCommon() {//获取Redis中所有的keySet<String> keys = redisTemplate.keys("*");for (String key : keys) {System.out.println(key);}//判断某个key是否存在Boolean itcast = redisTemplate.hasKey("itcast");System.out.println(itcast);//删除指定的keyredisTemplate.delete("myZSet");//获得指定的key对应的value的数据类型DataType type = redisTemplate.type("myset");System.out.println(type);}

运行结果:

在这里插入图片描述

http://www.lryc.cn/news/96248.html

相关文章:

  • sqlite触发器1
  • python中——requests爬虫【中文乱码】的3种解决方法
  • E. Nastya and Potions(DFS+记忆化搜索)
  • 什么是tcp rst以及什么时候产生?
  • Visual Studio Code配置免密远程开发环境
  • flutter android Webview 打开网页错误ERR_CLEARTEXT_NOT_PERMITTED 、 net:ERR_CACHE_MISS
  • ARP协议(地址解析协议)
  • 【贪心算法】334. 递增的三元子序列
  • react实现路由跳转动画
  • (二)RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】
  • springboot mybatis-plus 多数据源配置(HikariCP)
  • 跃焱邵隼网站demo
  • 3. Spring 更简单的读取和存储对象(五大类注解 方法注解)
  • TypeScript基础篇 - 泛型
  • C++ 常量
  • 智安网络|实现数据安全:探索数据动态脱敏的落地策略
  • 全加器(多位)的实现
  • Clion开发stm32之微妙延迟(采用nop指令实现)
  • Spring MVC -- 获取参数(普通对象+JSON对象+URL地址参数+文件+Cookie/Session/Header)
  • Langchain 的 Conversation summary memory
  • Safari 查看 http 请求
  • kafka权限控制功能
  • 公司内部重要文件如何加密防止泄露?
  • C语言或Java-x型图案
  • FTP客户端登录报错:Login failed
  • Linux相关指令(上)
  • 电压放大器在管道缺陷检测中应用有哪些
  • NLP(六十二)HuggingFace中的Datasets使用
  • Windows下基于VSCode搭建C++开发环境(包含整合MinGW64、CMake的详细流程)
  • springboot+mybatis-plus+vue+element+vant2实现短视频网站,模拟西瓜视频移动端