Redis深度历险-Redis基础数据结构

本文大部分内容引自《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是关注时间;或者用于学生成绩的排序

跳跃列表:https://www.cnblogs.com/difeng/p/7137918.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值