栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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表示倒数第二个元素。

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

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

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

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

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

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

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

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

1.create if not exists

2.drop if no elements

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/915559.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号