Loading... ## 准备工作: ### 导入坐标:(pom.xml) ```java <!-- 使用spring Data Redis简化Redis操作--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` ### application.yml ```java # Redis相关配置 spring: redis: port: 6379 host: localhost database: 0 # redis默认给我们提供了16个数据库,我们可以设置为操作的是第0号数据库 # password: jedis: pool: max-active: 8 #最大连接数 max-wait: 1ms #连接池最大阻塞等待时间 max-idle: 4 #连接池的最大空闲连接 min-idle: 0 #连接池中的最小空余连接 ``` ### Redis配置类(更换key序列化规则) 解决key的乱码问题 ```java package com.bdm.config; import org.springframework.cache.annotation.CachingConfigurerSupport; 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; /** * Redis配置类 */ @Configuration public class RedisConfig extends CachingConfigurerSupport { @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); //默认的Key序列化器为:JdkSerializationRedisSerializer redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setConnectionFactory(connectionFactory); return redisTemplate; } } ``` ## 基本数据类型的操作: ### String数据类型: ```java @Autowired private RedisTemplate<String, String> redisTemplate; /** * 操作String数据 */ @Test public void stringTest(){ // 添加String类型数据 final ValueOperations<String, String> valueOperations = redisTemplate.opsForValue(); valueOperations.set("city123", "guizou"); final String city = valueOperations.get("city"); System.out.println(city); // 设置过期时间 valueOperations.set("key1", "value1", 10L, TimeUnit.SECONDS); final String key1 = valueOperations.get("key1"); System.out.println(key1); // 当key存在,不添加 final Boolean aBoolean = valueOperations.setIfAbsent("key1", "value2"); System.out.println(aBoolean); } ``` ### Hash数据类型: ```java /** * 操作Hash类型数据 */ @Test public void hashTest(){ final HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash(); // 存值 hashOperations.put("001", "name", "bdm"); hashOperations.put("001", "age", "20"); hashOperations.put("001", "password", "123"); hashOperations.put("001", "address", "tianzu"); // 取值 final String name = hashOperations.get("001", "name"); System.out.println(name); // 获取hash结构中的所有字段 final Set<String> keys = hashOperations.keys("001"); for(String key : keys){ System.out.println(key + ":" + hashOperations.get("001", key)); } // 获取hash结构中所有的值 final List<String> values = hashOperations.values("001"); values.forEach(System.out::println); } ``` ### List数据类型: ```java /** * 操作List类型的数据 */ @Test public void listTest(){ final ListOperations<String, String> listOperations = redisTemplate.opsForList(); // 存一个值 listOperations.leftPush("myList", "a"); // 存多个值 listOperations.leftPushAll("myList", "a", "b", "c"); // 取值 final List<String> myList = listOperations.range("myList", 0L, -1L); assert myList != null; myList.forEach(System.out::println); // 获取列表的长度 llen final Long myListSize = listOperations.size("myList"); assert myListSize != null; // 全部删除(出队列) for(int i = 0; i < myListSize.intValue(); i++){ //出队列 listOperations.rightPop("myList"); } } ``` ### Set数据类型: ```java /** * 操作Set类型的数据 (无序且不重复) */ @Test public void setTest(){ final SetOperations<String, String> setOperations = redisTemplate.opsForSet(); // 存值 setOperations.add("mySet", "a", "b", "c", "a", "d"); // 取值 final Set<String> mySet = setOperations.members("mySet"); assert mySet != null; for (String set : mySet) { System.out.println(set); } // 删除成员 setOperations.remove("mySet", "a"); } ``` ### ZSet数据类型: ```java /** * 操作ZSet类型的数据(有序,且不重复) */ @Test public void ZSetTest(){ final ZSetOperations<String, String> zSetOperations = redisTemplate.opsForZSet(); // 存值 zSetOperations.add("myZSet", "a", 0.1); zSetOperations.add("myZSet", "a", 0.2); zSetOperations.add("myZSet", "b", 0.3); zSetOperations.add("myZSet", "c", 0.2); zSetOperations.add("myZSet", "d", 0.4); zSetOperations.add("myZSet", "e", 0.5); // 取值 final Set<String> myZSet = zSetOperations.range("myZSet", 0, -1); assert myZSet != null; for (String zset : myZSet) { System.out.println(zset); } // 增加分数 zSetOperations.incrementScore("myZSet", "a", 1); // 删除成员 zSetOperations.remove("myZSet", "b"); } ``` ## 通用操作: ```java /** * 通用操作,针对不同的数据类型都可以操作 */ @Test public void commonTest(){ // 获取redis中的所有key final Set<String> keys = redisTemplate.keys("*"); assert keys != null; for (String key : keys) { System.out.println(key); } // 判断某个key是否存在 final Boolean myZSet = redisTemplate.hasKey("myZSet"); System.out.println(myZSet); // 删除指定key redisTemplate.delete("myZSet"); // 获取指定key对应的value的数据类型 final DataType mySet = redisTemplate.type("mySet"); System.out.println(mySet); } ``` 最后修改:2022 年 08 月 12 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 3 如果文章有用,请随意打赏。