1 StringTemplateRedis和RedisTemplate的区别
1 两者关系是StringRedisTemplate继承了RedisTemplate ,但是两者的数据是不共通的也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据
2 RedisTemplate 是使用的JdkSerialzationRedisSerializer 存入数据会将数据先序列化字节数组然后存入redis数据库 StringRedisTemplate 使用的是StringRedisSerializer
3 那么如果你的redis数据库中存储的是字符串数据或者你要存储的数据就是字符串类型,那么你就是使用StringRedisTemplate
但是如果你使用的数据是复杂的对象类型,而取出的时候又不想做任何数据转化,直接从redis中取出一个对象,那么使用RedisTemplate是个更好的选择
redisTemplate 中存储数据都是字节数组,当redis中存入的数据是可读形式而非字节数组时,使用redisTemplate取值的时候会无法取出数据,而导致获取的值为null.
个人感觉redis 跟hashmap的运行机制,只不过hashmap 是单机的,对单台机器不断的压榨扩容,而redis是可以创建一个共享池,那么是负载均衡的,群狼战术。
2 RedisTemplate 操作
redisTemplate.opsForvalue():操作字符串
reidsTemplate.opsForhash()操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet(); //操作set
redisTemplate.opsForZset() ;//操作有序的set
3 StringTemplateRedis操作
stringRedisTemplate.opsForValue().set("test","100",60*10,TimeUnit.SECONDS); //向redis存入key-test-value-100并且10分钟过期的键值对
stringRedisTemplate.boundValueops("test").increment(-1);
StringRedisTemplate.opsForvalue.get("test") //根据key获取缓存中的val
StringRedisTemplate.boundValueOps("test").increment(1) ;//将值为+1
stringRedisTemplate.getExpire("test") //根据key获取过期时间
StringRedisTemplate.getExpire("test",TimeUnit,SECONDS) //根据key获取过期时间并指定换算单位
stringRedistemplate.delete("test") //根据key删除缓存
stringRedisTemplate.hashkey("test");
//检查键值对
stringRedisTemplate.opsForSet().add("red_123","1","2","3");
//向指定key存放set集合
stringRedisTemplate.expire("red_123","100",TimeUnit.MILLSECONDS); 设置过期时间
stringRedisTemplate.opsForSet().isMember("red_123","1");//根据key查看集合中是否存在指定的数据
stringRedisTemplate.opsForSet().members("red_123"); //根据key获取set集合
验证码的实现原理
1 发送一个请求,先生成一个验证码存入到redis,其中key-telephone,value--为random生成的二维码
并且设置其过期时间
2 另一个请求通过key值和value去校验redis中是否存在相关的值,如果值不相同就返回错误信息