【读完这篇文章,就基本搞定了Redis数据库】比如下面我就用 Hash 类型存放了我本人的一些信息:
key=JavaUser293847value=https://www.isolves.com/it/sjk/Redis/2020-03-03/{“id”:1,“name”:“SnailClimb”,“age”:22,“location”:“Wuhan,Hubei”}
List
常用命令:lpush、rpush、lpop、rpop、lrange 等 。
List 就是链表,Redis List 的应用场景非常多,也是 Redis 最重要的数据结构之一 。
比如微博的关注列表,粉丝列表,消息列表等功能都可以用 Redis 的 List 结构来实现 。
Redis List 的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销 。
另外可以通过 lrange 命令,就是从某个元素开始读取多少个元素,可以基于 List 实现分页查询 。
这是很棒的一个功能,基于 Redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西(一页一页的往下走),性能高 。
Set
常用命令:sadd、spop、smembers、sunion 等 。
Set 对外提供的功能与 List 类似是一个列表的功能,特殊之处在于 Set 是可以自动排重的 。
当你需要存储一个列表数据,又不希望出现重复数据时,Set 是一个很好的选择 。
并且 Set 提供了判断某个成员是否在一个 Set 集合内的重要接口,这个也是 List 所不能提供的 。你可以基于 Set 轻易实现交集、并集、差集的操作 。
比如:在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合 。Redis 可以非常方便的实现如共同关注、共同粉丝、共同喜好等功能 。
这个过程也就是求交集的过程,具体命令如下:
sinterstorekey1key2key3将交集存在key1内
Sorted Set
常用命令:zadd、zrange、zrem、zcard 等 。
和 Set 相比,Sorted Set 增加了一个权重参数 Score,使得集合中的元素能够按 Score 进行有序排列 。
举例:在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用 Redis 中的 Sorted Set 结构进行存储 。
Redis 设置过期时间
Redis 中有个设置过期时间的功能,即对存储在 Redis 数据库中的值可以设置一个过期时间 。作为一个缓存数据库,这是非常实用的 。
如我们一般项目中的 Token 或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能 。
我们 Set Key 的时候,都可以给一个 Expire Time,就是过期时间,通过过期时间我们可以指定这个 Key 可以存活的时间 。
如果你设置了一批 Key 只能存活 1 个小时,那么接下来 1 小时后,Redis 是怎么对这批 Key 进行删除的?
答案是:定期删除+惰性删除 。通过名字大概就能猜出这两个删除方式的意思了:
- 定期删除:Redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 Key,检查其是否过期,如果过期就删除 。注意这里是随机抽取的 。为什么要随机呢?你想一想假如 Redis 存了几十万个 Key ,每隔 100ms 就遍历所有的设置过期时间的 Key 的话,就会给 CPU 带来很大的负载!
- 惰性删除 :定期删除可能会导致很多过期 Key 到了时间并没有被删除掉 。所以就有了惰性删除 。假如你的过期 Key,靠定期删除没有被删除掉,还停留在内存里,除非你的系统去查一下那个 Key,才会被 Redis 给删除掉 。这就是所谓的惰性删除,也是够懒的哈!
但是仅仅通过设置过期时间还是有问题的 。我们想一下:如果定期删除漏掉了很多过期 Key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?
如果大量过期 Key 堆积在内存里,导致 Redis 内存块耗尽了 。怎么解决这个问题呢?
Redis 内存淘汰机制
MySQL 里有 2000w 数据,Redis 中只存 20w 的数据,如何保证 Redis 中的数据都是热点数据?
Redis 配置文件 redis.conf 中有相关注释,我这里就不贴了,大家可以自行查阅或者通过这个网址查看:http://download.redis.io/redis-stable/redis.conf
推荐阅读
- 福鼎白毫银针,白毫银针价格
- 福鼎寿眉白茶,福鼎白茶价格表
- 推荐几个开发必备的JSON工具
- 福鼎大白茶,福鼎大白茶的优势
- 福建铁观音,福建安溪名茶有哪些
- 福建茶叶种类,茶叶种类
- 福建茶叶品牌,中国茶叶十大品牌介绍
- 福建茉莉花茶,茉莉花茶哪个品牌好
- 与程序员相关的CPU缓存知识
- 福建老白茶功效,福建老白茶怎么泡