一篇关于springboot集成redis的小知识,如果有学过redis基础篇的读者很容易看懂,没学过的建议了解一下再看本篇内容;
知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)
springboot 2.1.1 版本
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> 复制代码
使用 自定义的配置 替换 JdkSerializationRedisSerializer, 否则序列化进 redis 会显示为特殊字符;
查阅 RedisReactiveAutoConfiguration
类可以查看 reactiveRedisTemplate 装配过程‘;
查阅 RedisAutoConfiguration
类可以查看 redisTemplate 装配过程‘;
/** * @Author lsc * <p> redis配置 替换默认的jdk序列化机制 </p> */ @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { // 创建redisTemplate RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(connectionFactory); // 使用Jackson2JsonRedisSerialize替换默认序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // key采用String的序列化方式 redisTemplate.setKeySerializer(new StringRedisSerializer()); // value序列化方式采用jackson redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // hash的key也采用String的序列化方式 redisTemplate.setHashKeySerializer(new StringRedisSerializer()); // hash的value序列化方式采用jackson redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } } 复制代码
redis 的 连接属性配置和连接池配置;
server: port: 9000 spring: redis: # Redis服务器地址 host: localhost #Redis服务器连接端口 port: 6379 #password: # Redis数据库索引(默认为0) database: 1 # 连接超时时间(毫秒) timeout: 5000 jedis: pool: #连接池最大连接数(使用负值表示没有限制) max-active: 100 # 连接池中的最小空闲连接 max-idle: 10 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: 100000 复制代码
@Autowired RedisTemplate<String,Object> redisTemplate; // string 入库 @Test public void testForValue1(){ String key = "zszxz"; String value = "知识追寻者"; redisTemplate.opsForValue().set(key, value); } // string 出库 @Test public void testForValue2(){ String key = "zszxz"; Object value = redisTemplate.opsForValue().get(key); // 知识追寻者 System.out.println(value); } // string key过期时间入库 @Test public void testForValue3(){ String key = "today"; String value = "周六"; long time = 60; redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); } 复制代码
@Autowired RedisTemplate<String,Object> redisTemplate; // 测试 key 是否存在 @Test public void test1(){ String key = "zszxz"; Boolean exist = redisTemplate.hasKey(key); // true System.out.println(exist); } // 设置 key 过期时间 @Test public void test2(){ String key = "zszxz"; long time = 60; redisTemplate.expire(key, time, TimeUnit.SECONDS); } // 获取key过期时间 @Test public void test3(){ String key = "zszxz"; Long expire = redisTemplate.getExpire(key, TimeUnit.SECONDS); // 7 System.out.println(expire); } // 删除key @Test public void test4(){ String key = "zszxz"; redisTemplate.delete(key); } 复制代码
@Autowired RedisTemplate<String,Object> redisTemplate; // 放入一个 hash ( key value ) @Test public void test1(){ String key = "zszxz"; String item = "name"; String value = "知识追寻者"; redisTemplate.opsForHash().put(key, item, value); } // 向hash中存放一个map @Test public void test2(){ String key = "feature"; Map<String, Object> map = new HashMap<>(); map.put("name", "知识追寻者"); map.put("age", "18"); redisTemplate.opsForHash().putAll(key, map); } // 获取一个hash 的 所有key-value @Test public void test3(){ String key = "feature"; Map<Object, Object> entries = redisTemplate.opsForHash().entries(key); // {name=知识追寻者, age=18} System.out.println(entries); } // 获取一个hash 的 指定key 的value @Test public void test4(){ String key = "feature"; String item = "name"; Object value = redisTemplate.opsForHash().get(key, item); // 知识追寻者 System.out.println(value); } // 删除指定 hash key 的value @Test public void test5(){ String key = "zszxz"; String item = "name"; redisTemplate.opsForHash().delete(key, item); } // 是否存在 指定 hash 的key @Test public void test6(){ String key = "zszxz"; String item = "name"; Boolean exist = redisTemplate.opsForHash().hasKey(key, item); // false System.out.println(exist); } 复制代码
@Autowired RedisTemplate<String,Object> redisTemplate; @Test public void test(){ } // 列表右推入 @Test public void test1(){ String key = "zszxz"; String value = "知识追寻者"; redisTemplate.opsForList().rightPush(key, value); } // 列表左推入 @Test public void test2(){ String key = "zszxz"; String value = "晴雨天"; redisTemplate.opsForList().leftPush(key, value); } // 列表左弹出 @Test public void test3(){ String key = "zszxz"; Object value = redisTemplate.opsForList().leftPop(key); // 晴雨天 System.out.println(value); } // 列表右弹出 @Test public void test4(){ String key = "zszxz"; Object value = redisTemplate.opsForList().rightPop(key); // 知识追寻者 System.out.println(value); } // 将list右推入列表 @Test public void test5(){ ArrayList<Object> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); String key = "number"; redisTemplate.opsForList().rightPushAll(key, list); } // 修改列表指定索引的值 @Test public void test7(){ String key = "number"; int index = 0; int value = 666; redisTemplate.opsForList().set(key, index, value); } // 获取列表指定索引的值 @Test public void test8(){ String key = "number"; int index = 0; Object value = redisTemplate.opsForList().index(key, index); // 666 System.out.println(value); } 复制代码
@Autowired RedisTemplate<String,Object> redisTemplate; // set 中存储值 @Test public void test1(){ String key = "zszxz"; String value1 = "晴雨天"; String value2 = "公众号:知识追寻者"; redisTemplate.opsForSet().add(key, value1, value2); } // 从 set 中取值 @Test public void test2(){ String key = "zszxz"; Set<Object> members = redisTemplate.opsForSet().members(key); // [晴雨天, 公众号:知识追寻者] System.out.println(members); } // 判定 set 中是否存在 key-value @Test public void test3(){ String key = "zszxz"; String value = "晴雨天"; Boolean member = redisTemplate.opsForSet().isMember(key, value); // true System.out.println(member); } 复制代码