找回密码
 立即注册
查看: 4|回复: 0

Spring Data Redis使用方式

[复制链接]

106

主题

5

精华

110

金币

技术维护QQ:515138

积分
242
发表于 3 小时前 | 显示全部楼层 |阅读模式
Spring Data Redis 是 Spring 的一部分,提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。

Spring Boot提供了对应的Starter,maven坐标:

  1. <dependency>
  2.         <groupId>org.springframework.boot</groupId>
  3.         <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>
复制代码
Spring Data Redis中提供了一个高度封装的类:RedisTemplate,对相关api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:
  • ValueOperations:string数据操作
  • SetOperations:set类型数据操作
  • ZSetOperations:zset类型数据操作
  • HashOperations:hash类型的数据操作
  • ListOperations:list类型的数据操作

环境搭建
进入到sky-server模块
1). 导入Spring Data Redis的maven坐标
  1. <dependency>
  2.      <groupId>org.springframework.boot</groupId>
  3.      <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>
复制代码
2). 配置Redis数据源
在application-dev.yml中添加
解释说明:
database:指定使用Redis的哪个数据库,Redis服务启动后默认有16个数据库,编号分别是从0到15。
可以通过修改Redis配置文件来指定数据库的数量。
在application.yml中添加读取application-dev.yml中的相关Redis配置
  1. spring:
  2.   profiles:
  3.     active: dev
  4.   redis:
  5.     host: ${jinhei.redis.host}
  6.     port: ${jinhei.redis.port}
  7.     password: ${jinhei.redis.password}
  8.     database: ${jinhei.redis.database}
复制代码
3). 编写配置类,创建RedisTemplate对象
  1. package com.jinhei.config;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5. import org.springframework.data.redis.connection.RedisConnectionFactory;
  6. import org.springframework.data.redis.core.RedisTemplate;
  7. import org.springframework.data.redis.serializer.StringRedisSerializer;
  8. @Configuration
  9. @Slf4j
  10. public class RedisConfiguration {
  11.     @Bean
  12.     public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
  13.         log.info("开始创建redis模板对象...");
  14.         RedisTemplate redisTemplate = new RedisTemplate();
  15.         //设置redis的连接工厂对象
  16.         redisTemplate.setConnectionFactory(redisConnectionFactory);
  17.         //设置redis key的序列化器
  18.         redisTemplate.setKeySerializer(new StringRedisSerializer());
  19.         return redisTemplate;
  20.     }
  21. }
复制代码
解释说明:
当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为
JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为
StringRedisSerializer序列化器。
4). 通过RedisTemplate对象操作Redis
在test下新建测试类
  1. package com.jinhei.test;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.boot.test.context.SpringBootTest;
  5. import org.springframework.data.redis.core.*;
  6. @SpringBootTest
  7. public class SpringDataRedisTest {
  8.     @Autowired
  9.     private RedisTemplate redisTemplate;
  10.     @Test
  11.     public void testRedisTemplate(){
  12.         System.out.println(redisTemplate);
  13.         //string数据操作
  14.         ValueOperations valueOperations = redisTemplate.opsForValue();
  15.         //hash类型的数据操作
  16.         HashOperations hashOperations = redisTemplate.opsForHash();
  17.         //list类型的数据操作
  18.         ListOperations listOperations = redisTemplate.opsForList();
  19.         //set类型数据操作
  20.         SetOperations setOperations = redisTemplate.opsForSet();
  21.         //zset类型数据操作
  22.         ZSetOperations zSetOperations = redisTemplate.opsForZSet();
  23.     }
  24. }
复制代码
4.2.3 操作常见类型数据
1). 操作字符串类型数据
  1. /**
  2.      * 操作字符串类型的数据
  3.      */
  4.     @Test
  5.     public void testString(){
  6.         // set get setex setnx
  7.         redisTemplate.opsForValue().set("name","小明");
  8.         String city = (String) redisTemplate.opsForValue().get("name");
  9.         System.out.println(city);
  10.         redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
  11.         redisTemplate.opsForValue().setIfAbsent("lock","1");
  12.         redisTemplate.opsForValue().setIfAbsent("lock","2");
  13.     }
复制代码
2). 操作哈希类型数据
  1. /**
  2.      * 操作哈希类型的数据
  3.      */
  4.     @Test
  5.     public void testHash(){
  6.         //hset hget hdel hkeys hvals
  7.         HashOperations hashOperations = redisTemplate.opsForHash();
  8.         hashOperations.put("100","name","tom");
  9.         hashOperations.put("100","age","20");
  10.         String name = (String) hashOperations.get("100", "name");
  11.         System.out.println(name);
  12.         Set keys = hashOperations.keys("100");
  13.         System.out.println(keys);
  14.         List values = hashOperations.values("100");
  15.         System.out.println(values);
  16.         hashOperations.delete("100","age");
  17.     }
复制代码
3). 操作列表类型数据
  1. /**
  2.      * 操作列表类型的数据
  3.      */
  4.     @Test
  5.     public void testList(){
  6.         //lpush lrange rpop llen
  7.         ListOperations listOperations = redisTemplate.opsForList();
  8.         listOperations.leftPushAll("mylist","a","b","c");
  9.         listOperations.leftPush("mylist","d");
  10.         List mylist = listOperations.range("mylist", 0, -1);
  11.         System.out.println(mylist);
  12.         listOperations.rightPop("mylist");
  13.         Long size = listOperations.size("mylist");
  14.         System.out.println(size);
  15.     }
复制代码
4). 操作集合类型数据
  1. /**
  2.      * 操作集合类型的数据
  3.      */
  4.     @Test
  5.     public void testSet(){
  6.         //sadd smembers scard sinter sunion srem
  7.         SetOperations setOperations = redisTemplate.opsForSet();
  8.         setOperations.add("set1","a","b","c","d");
  9.         setOperations.add("set2","a","b","x","y");
  10.         Set members = setOperations.members("set1");
  11.         System.out.println(members);
  12.         Long size = setOperations.size("set1");
  13.         System.out.println(size);
  14.         Set intersect = setOperations.intersect("set1", "set2");
  15.         System.out.println(intersect);
  16.         Set union = setOperations.union("set1", "set2");
  17.         System.out.println(union);
  18.         setOperations.remove("set1","a","b");
  19.     }
复制代码
5). 操作有序集合类型数据
  1. /**
  2.      * 操作有序集合类型的数据
  3.      */
  4.     @Test
  5.     public void testZset(){
  6.         //zadd zrange zincrby zrem
  7.         ZSetOperations zSetOperations = redisTemplate.opsForZSet();
  8.         zSetOperations.add("zset1","a",10);
  9.         zSetOperations.add("zset1","b",12);
  10.         zSetOperations.add("zset1","c",9);
  11.         Set zset1 = zSetOperations.range("zset1", 0, -1);
  12.         System.out.println(zset1);
  13.         zSetOperations.incrementScore("zset1","c",10);
  14.         zSetOperations.remove("zset1","a","b");
  15.     }
复制代码
6). 通用命令操作
  1. /**
  2.      * 通用命令操作
  3.      */
  4.     @Test
  5.     public void testCommon(){
  6.         //keys exists type del
  7.         Set keys = redisTemplate.keys("*");
  8.         System.out.println(keys);
  9.         Boolean name = redisTemplate.hasKey("name");
  10.         Boolean set1 = redisTemplate.hasKey("set1");
  11.         for (Object key : keys) {
  12.             DataType type = redisTemplate.type(key);
  13.             System.out.println(type.name());
  14.         }
  15.         redisTemplate.delete("mylist");
  16.     }
复制代码
jinhei-waimai.zip (500.96 KB, 下载次数: 0, 售价: 50 金币)



上一篇:Redis数据类型和Redis常用命令
网站建设,公众号小程序开发,系统定制,软件App开发,技术维护【联系我们】手机/微信:17817817816 QQ:515138

QQ|Archiver|自丢网 ( 粤ICP备2024252464号-1 )

GMT+8, 2025-12-21 20:38

专注于网站建设,公众号小程序制作,商城小程序,系统定制,软件App开发

【联系我们】手机/微信:17817817816 QQ:515138

快速回复 返回顶部 返回列表