原文连接:
(1)、https://blog.csdn.net/weixin_39025362/article/details/105042476?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4-105042476-blog-117926658.pc_relevant_scanpaymentv1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4-105042476-blog-117926658.pc_relevant_scanpaymentv1&utm_relevant_index=9
(2)、https://blog.csdn.net/XinhuaShuDiao/article/details/84906538
1. 先了解RedisTemplate和StringRedisTemplate之间的关系:
RedisTemplate是Spring对于Redis的封装,而StringRedisTemplate继承RedisTemplate。
两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,
RedisTemplate只能管理RedisTemplate中的数据。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
2. RedisTemplate和StringRedisTemplate使用上的差别
RedisTemplate:
redisTemplate中定义了对几种常用数据结构操作:
redisTemplate.opsForList(); //操作list
redisTemplate.opsForValue(); //操作字符串
redisTemplate.opsForCluster(); //集群时使用
redisTemplate.opsForGeo(); //地理位置时使用
redisTemplate.opsForHash(); //操作hash
redisTemplate.opsForSet(); //操作set
redisTemplate.opsForZSet(); //操作有序set
StringRedisTemplate中定义的5中数据结构,其实和redisTemplate一样,只是参数改成了String,
两者的使用就看大家的业务场景了,对笔者来说stringRedisTemplate也够用了
5. RedisConfig配置类,相当于配置了RedisTemplate、和StringRedisTemplate
@Configuration public class RedisConfig{ @Autowired RedisConnectionFactory redisConnectionFactory; @Bean public RedisTemplate<String, Object> functionDomainRedisTemplate() { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>(); initDomainRedisTemplate(redisTemplate, redisConnectionFactory); return redisTemplate; } /* *设置redisTemplate序列化策略,否则在使用redisTemplate的时候在redis的客户端查看会出现乱码 */ private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) { redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer()); redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); redisTemplate.setConnectionFactory(factory); } }
//先引入StringRedisTemplate @Autowired private StringRedisTemplate stringRedisTemplate; //向redis里存入数据和设置缓存时间 stringRedisTemplate.opsForValue().set("redis", "100", 60 * 10, TimeUnit.SECONDS); //val做-1操作 stringRedisTemplate.boundValueOps("redis").increment(-1); //根据key获取缓存中的val stringRedisTemplate.opsForValue().get("redis") //val +1 stringRedisTemplate.boundValueOps("redis").increment(1); //根据key获取过期时间 stringRedisTemplate.getExpire("redis"); //根据key获取过期时间并换算成指定单位 stringRedisTemplate.getExpire("redis",TimeUnit.SECONDS); //根据key删除缓存 stringRedisTemplate.delete("redis"); //检查key是否存在,返回boolean值 stringRedisTemplate.hasKey("redis"); //向指定key中存放set集合 stringRedisTemplate.opsForSet().add("redis", "1","2","3"); //设置过期时间 stringRedisTemplate.expire("redis",1000 , TimeUnit.MILLISECONDS); //根据key查看集合中是否存在指定数据 stringRedisTemplate.opsForSet().isMember("redis", "1"); //根据key获取set集合 stringRedisTemplate.opsForSet().members("redis"); //验证有效时间 Long expire = stringRedisTemplate.boundHashOps("redis").getExpire(); System.out.println("redis有效时间:"+expire+"秒");
=====================================================================================