redis总结-(一)单点登录

来源:互联网 发布:大智慧如何导出数据 编辑:程序博客网 时间:2024/06/06 14:14

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获取缓存中的valstringRedisTemplate.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(驱逐):禁止驱逐数据。