简介
特点
Redis(Remote Dictionary Server) 速度很快的非关系型内存数据库,支持持久化。
用于高性能,空间小的场景。
String SET GET DEL
List RPUSH LRANGE LINDEX LPOP
Set SADD SMEMBERS SISMEMBER SREM SINTER/SUNION/SDIFF
HashSet HSET HGET HGETALL HDEL
ZSet ZADD ZRANGE ZRANGEBYSCORE ZREM ZINTERSTORE
使用案例
下例通过Redis存储用户的基本信息,最近登陆时间,最近看过的产品,购物车信息。
HashSet:key = "userInfo:"
value = token,userInfo
存储用户信息。token->userInfo
ZSet: key = "latestTime:"
value = token,timeStamp
存储该用户最近查看时间。 token->latestTime
ZSet: key = "viewed:"+token
value = goods,timeStamp
存储该用户最近看过的产品。 token ->goods
ZSet: key = "viewed:"
value = goods,viewScore
存储该产品被看的权重。 按顺序goods集合。
HashSet:key = "cart:" +token
value = goods,count
存储购物车信息。token->goods+count。
cookie缓存
签名cookie: 用户信息+签名。验证cookie的所有信息都在cookie中。/ 但处理签名比较麻烦。
令牌cookie: 签名。体积小。/ 但要在服务器中存储更多的信息。
检查令牌登录:通过cookie获取到用户信息
User checkToken(Connect conn, Token token){
return conn.hget("userInfo:",token); //userInfo:+token = realKey
}
更新token信息:
用户请求时,记录有价值的信息(最近登录时间,最近浏览商品)。
void updateToken(Connect conn, Token token, User user,Goods goods= Null){
timeStamp = time.time();
conn.hset("userInfo:",token,user); //token绑定 user
conn.zadd("latestTime:",token,timeStamp); //更新最近查看时间
if( goods != Null ){
//如果在浏览商品
String key = "viewed:"+token;
conn.zadd(key,goods,timeStamp);
conn.zremrangebyrank(key,0,-26); //只保留最近浏览的25个商品
conn.zincrby("viewd:",goods,1); //score越小,排名越靠前,展示的时候可以倒序下
}
}
及时清除ses