【SDU项目实训2019级】redis学习记录1

1.redis是什么

redis是互联网技术领域使用最为广泛的存储中间件,[Remote Dictionary Service]->[远程字典服务],国内外很多大型互联网公司都在使用redis,如Twitter、GitHub、腾讯、阿里、华为等。redis已经成为当下中高级后端开发者绕不开的必备技能。

redis能用来做什么?很多人第一个想到的就是“缓存”,没错,确实是。再然后呢?“分布式锁”,再后来呢,不知道了,确实是不知道了,接下来便来系统的学习理解redis背后的原理和实践经验吧。

2.redis可以做什么?

来源:《redis深度历险核心原理和应用实践》

如掘金技术社区的帖子模块为实例:

①记录帖子的点赞数、评论数和点击数(hash)

②记录用户的帖子ID列表(排序),便于快速显示用户的帖子列表(zset)

③记录帖子的标题、摘要、作者和封面信息,用于列表页展示(hash)

④记录帖子的点赞用户ID列表,评论ID列表,用于显示和去重计数(zset)

⑤缓存近期热帖内容,帖子内容空间占用比较大(hash)

⑥记录帖子的相关文章ID,根据内容推荐相关帖子(list)

⑦记录热榜帖子ID列表,总热榜和分类热榜(zset)

⑧缓存用户行为历史,进行恶意行为过滤(zset,hash)

等等

3.redis基础数据结构

分别是string(字符串)、list(列表)、set(集合)、hash(哈希)和zset(有序集合)

redis所有的数据结构都是以唯一的key字符串作为名称,然后通过这个唯一key值来获取相应的value数据。不同类型的数据结构的差异就在于value的结构不一样。

可以对key设置过期时间,到点自动删除,这个功能常用来控制缓存的失效时间。

①字符串是由多个字节组成,每个字节又是由8个bit组成,如此便可以将一个字符串看成很多bit的组合,这便是bitmap[位图]数据结构

②list相当于是链表而不是数组,意味着插入和删除都是O(1)而索引时间复杂度是O(n),index操作相当于Java里面的get(int index),可以表示负数,index = -1表示倒数第一个元素,index=-2表示倒数第二个元素。

c8f0c9f40d764bb68165a70d296506b2.png

再深入一点,会发现redis底层存储的还不是一个简单的linkedlist,而是快速链表quicklist。首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也就是压缩列表,它将所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量比较多的时候才会改成quicklist。之后再说(将链表和ziplist组合起来)

f9160039ffd749d98e3235717716e0eb.png

 ③hash(字典),相当于hashmap,无序字典。内部实现是数据+链表。在rehash的时候和Java的hashmap不一样,Java一次性全部rehash,而redis采用了渐进式rehash策略:保留新旧两个hash结构,查询时会同时查询两个hash结构,然后在后续的定时任务中以及hash的子指令中,循序渐进地将旧hash的内容一点点迁移到新的hash中。

dfc530de375c40eeae4bb3fc0f8b5bd7.png

 ④set(集合),相当于hashset,内部键值对是无序且唯一的。

⑤zset(有序列表),类似于Java的SortedSet和HashMap的结合体。内部实现是【跳表】。

zset可以用来存粉丝列表,value值是粉丝的用户ID,score是关注时间,我们可以对粉丝列表按关注时间进行排序。

跳表类似于层级制,每隔几个元素跳出一个代表,将这几个代表使用另外一级指针穿起来。然后在这些代表里再挑出一些二级代表,串起来。

a6d368c5c1d14e829e038441ae904b10.png

 hash、set和zset移除了最后一个元素之后,该数据结构自动被删除,内存被回收。

容器型数据结构的通用规则(list、set、hash、zset)

1.create if not exists

2.drop if no elements

过期时间:redis所有的数据结构都可以设置过期时间,时间到了,redis会自动删除对应的对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值