本文大部分内容引自《Redis深度历险:核心原理和应用实践》,感谢作者!!!
Redis作用
1、记录体制的点赞数、评论数和点技术(hash)
2、记录用户的帖子ID列表(排序),便于快速显示用户的帖子列表(zset)
3、记录贴子的标题、摘要、作者和锋面信息,用于列表页展示(hash)
4、记录贴子的点赞用户ID列表,评论ID列表,用于显示和去重计数(zset)
5、缓存近期热帖内容(帖子内容空间占用比较大),减小数据库压力(hash)
6、记录贴子的相关文章ID,根据内容推荐相关帖子(list)
7、如果帖子ID市政数字赠的,可以使用Redis来分配帖子ID(计数器)
8、收藏和帖子之间的关系(zset)
9、记录热榜帖子ID列表,总热榜和分类热榜(zset)
10、缓存用户行为历史,进行恶意行为过滤(zset,hash)
命令集合:https://www.runoob.com/redis/redis-strings.html
天下无难试之Redis面试刁难大全:https://baijiahao.baidu.com/s?id=1594341157941741587&wfr=spider&for=pc
通俗易懂的Redis数据结构基础教程
https://blog.csdn.net/qq_41701956/article/details/81198804
1、list对应数据结构是LinkedList,是列表不是数组
2、hash对应数据结构是HashMap
3、set对应数据结构是HashSet
SADD KEY_NAME VALUE1..VALUEN
4、zset对应数据结构是一方面等价于Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表;zset内部的排序功能是通过“跳跃列表”数据结构来实现的(https://www.cnblogs.com/difeng/p/7137918.html)
score是zset的权重值,可以根据这个权重值排序
ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
字符串
Redis字符串是动态字符串,是可以修改的字符串,内部结构类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配;当字符串长度小于 1M 时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间。需要注意的是字符串最大长度为 512M;Redis key-value中村出的如果是整数,那么可以对其进行自增操作,最大值为Long.MAX_VALUE
列表
Redis list是Java中的LinkedList数据结构,是链表而不是数组;当list中最后一个元素被弹出后,list被自动删除;list常作为异步队列使用,相关命令是brpop和blpop;ltrim限制list的长度,包含两端;底层存储是quicklist,在列表元素较少的情况会使用一块连续的内存存储(ziplist),当数据量比较多的时候才会改成quicklist
quicklist:https://www.jianshu.com/p/d1138ad60ff6
ziplist:https://blog.csdn.net/GDJ0001/article/details/80108184
字典
Redis hash相当于Java中的HashMap,是无序的;内部实现是使用数组+链表的结构,原理和Java的HashMap相同;Java的HashMap在字典很大时,进行一次性rehash是很耗时的操作;Redis采用渐进式rehash策略,渐进式rehash会在rehash的同时,保留新旧两个hash结构,查询时会同时查询两个hash结构,然后在后续的定时任务中以及hash的子指令中,循序渐进地将旧 hash 的内容一点点迁移到新的hash结构中;当hash移除了最后一个元素之后,该数据结构背自动删除
集合
Redis set相当于Java中的HashSet,内部使用HashMap实现,HashSet中使用的HashMap中所有的value都是null;当set中最后一个元素被删除后,数据结构自动删除;set可以用来存储中奖用户ID,因为有去重功能,可以保证一个用户不会中奖两次
有序列表
Redis zset相当于Java中的SortedSet和HashMap的结合体,一方面是一个set保证内部value的唯一性,另一方面可以给每个value赋予score,代表value的排序权重,内部实现是“跳跃列表”的数据结构(成员的位置按分数值递增(从小到大)来排序);zset可以用于存储粉丝列表,value是粉丝的用户ID,score是关注时间;或者用于学生成绩的排序