redis 基础教程 https://www.runoob.com/redis/redis-sorted-sets.html
其他博文 https://blog.csdn.net/qq_42093488/article/details/82149385
redis特点
Redis SET 如果 key 已经存储其他值,就覆写旧值
redis类型
string在单一,list没有判存在,set不如sorted set,map 没有分页
sorted set 使用较多:(1)可以分页(2)可判是否存在,且效率高(3)加上score(可正可倒序)可以当做map用(比如用一个sorted set来存储一个用户收藏的所有文章的id和收藏时间(使用score存时间戳)),弥补map没有分页的缺憾。
map的使用场景是:比如一个用户的昵称、年龄、性别、积分等放在一个map集合中,获取时全部获取。
sorted set 常用:
//判断是否存在.Err() == nil的话就是存在
s.RedisClient.ZRank(utils.GetArticleHotCommentKey(articleID), strconv.FormatInt(commentID, 10)).Err() == nil
s.RedisClient.ZRange(utils.GetArticleHotCommentKey(articleID), int64(offset), int64(offset+limit)).Val()
s.RedisClient.ZRevRange(utils.GetArticleHotCommentKey(articleID), int64(offset), int64(offset+limit)).Val()
s.RedisClient.ZAdd(
utils.GetUserCollectArticleCollect(userID),
redis.Z{
Score: float64(time.Now().Unix()),
Member: snStr,
})
if intCmd := s.RedisClient.ZRem(
utils.GetUserCollectArticleCollect(userID),
snStr); intCmd.Val() == 0 {
return nil
}
常用命令行
info all (介绍https://blog.csdn.net/hunhun1122/article/details/82655884)
连接
redis-cli -h XX.XX.2XX.XX -p 16372 -a AXXXX
select 14
keys *-23
更新的场景
以用户头像为例,当用户更换头像时,更新redis的方式有两种:
(1)用户上传头像的时候,db和redis都写入
(2)用户上传头像的时候,只db写入,然后使用redis发布订阅机制,给消费者的redis订阅了的频道发消息,消费者redis消费消息更新自己的缓存
pipline
遍历一连串的redis集合时要用pipline,多次读优化为一次读。
db
概念,及db的规定:https://www.cnblogs.com/oxspirt/p/6529791.html
redis下,数据库是由一个整数索引标识,而不是由一个数据库名称。默认情况下,一个客户端连接到数据库0。redis配置文件中下面的参数来控制数据库总数: /etc/redis/redis.conf 文件中,有个配置项 databases = 16 //默认有16个数据库。
select切换db。每个数据库都有属于自己的空间,不必担心之间的key冲突。
redis没有提供任何方法来关联标识不同的数据库。因此,需要你来跟踪什么数据存储到哪个数据库下。
因此上面的快开启200个实例的场景,可以使用不同的数据库来存储,而不必开启如此那么多的实例。
实例
redis是单进程单线程来运行的(新版支持了多线程),可以在一台系统上以多实例运行。因为redis在数据文件
大于20~30G的时候,效率会降低。所以,多实例来运行会是一个很好的方式。redis运行多实例,需要修改多个端口,多个配置文件,多个文件存储目录。例如:运行2个实例,端口分别为:6379,6380。(转自https://blog.csdn.net/freshair_x/article/details/80822980)