redis总结-(一)单点登录
redis单点登录
最近用redis+springboot做一个SSO单点登录系统,总结一下。
为满足多个子系统的统一登录认证管理。
用户SSO模块登录,先验证你的用户名和密码是否正确,如果正确。
会产生一个唯一票据,我们这里叫他userAccesstoken,把这个userAccesstoken放到redis中,存放方式是如下。
处理流程
#登录,如果已经登录,直接返回,否则执行登录
stringRedisTemplate.opsForValue().set(userName, userAccesstoken,3600*24*31, TimeUnit.SECONDS);
#授权认证,单独认证是否登录。
stringRedisTemplate.opsForValue().get(userName);
#退出登录,先检查,在删除。
stringRedisTemplate.hasKey(userName);
stringRedisTemplate.delete(userName);
StringRedisTemplate常用操作
#向redis里存入数据和设置缓存时间
stringRedisTemplate.opsForValue().set("userName", "100",60*10,TimeUnit.SECONDS);
# val做-1操作
stringRedisTemplate.boundValueOps("userName").increment(-1);
#根据key获取缓存中的val
stringRedisTemplate.opsForValue().get("userName")
#val +1
stringRedisTemplate.boundValueOps("userName").increment(1);
#根据key获取过期时间
stringRedisTemplate.getExpire("userName");
#根据key获取过期时间并换算成指定单位
stringRedisTemplate.getExpire("userName",TimeUnit.SECONDS);
#根据key删除缓存
stringRedisTemplate.delete("userName");
#检查key是否存在,返回boolean值
stringRedisTemplate.hasKey("userName");
#向指定key中存放set集合
stringRedisTemplate.opsForSet().add("userName", "1","2","3");
#设置过期时间
stringRedisTemplate.expire("userName",1000 , TimeUnit.MILLISECONDS);
#根据key查看集合中是否存在指定数据
stringRedisTemplate.opsForSet().isMember("userName", "1")
#根据key获取set集合
stringRedisTemplate.opsForSet().members("userName");
redis优点特点:
(1)速度快,因为数据存在内存中。
(2)支持丰富数据类型,支持string,list,set,sorted set,hash。
(3)支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行。
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除。
(5)redis是单进程单线程:redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。
redis的回收策略:
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰。
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰。
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰。
no-enviction(驱逐):禁止驱逐数据。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
