加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

关于Redis的n种妙用,不仅仅是缓存

发布时间:2019-06-26 02:46:56 所属栏目:编程 来源:IT界的小柠檬
导读:redis是键值对的数据库,常用的五种数据范例为字符串范例(string),散列范例(hash),列表范例(list),荟萃范例(set),有序荟萃范例(zset)。 Redis用作缓存,首要两个用途:高机能,高并发,由于内存自然支持高并发。 应用场景 漫衍式锁(string

MicSub->{seven,james,qing,jack,tom}

  1. # 返回sevenSub和qingSub的交集,即seven和青山的配合存眷 
  2. sinter sevenSub qingSub -> {mic,james} 
  3. # 我存眷的人也存眷他,下面例子中我是seven 
  4. # qing在micSub中返回1,不然返回0 
  5. sismember micSub qing 
  6. sismember jamesSub qing 
  7. # 我也许熟悉的人,下面例子中我是seven 
  8. # 求qingSub和sevenSub的差集,并存在sevenMayKnow荟萃中 
  9. sdiffstore sevenMayKnow qingSub sevenSub -> {seven,jack} 

电商商品筛选(set)

关于Redis的n种妙用,不只仅是缓存(附有自学资料分享哦)

每个商品入库的时辰即会成立他的静态标签列表如,品牌,尺寸,处理赏罚器,内存

  1. # 将挽救者y700P-001和ThinkPad-T480这两个元素放到荟萃brand::lenovo 
  2. sadd brand::lenovo 挽救者y700P-001 ThinkPad-T480 
  3. sadd screenSize::15.6 挽救者y700P-001 机器革命Z2AIR 
  4. sadd processor::i7 挽救者y700P-001 机器革命X8TIPlus 
  5. # 获取品牌为遐想,屏幕尺寸为15.6,而且处理赏罚器为i7的电脑品牌(sinter为获取荟萃的交集) 
  6. sinter brand::lenovo screenSize::15.6 processor::i7 -> 挽救者y700P-001 

排行版(zset)

redis的zset生成是用来做排行榜的、挚友列表, 去重, 汗青记录等营业需求

关于Redis的n种妙用,不只仅是缓存(附有自学资料分享哦)

  1. # user1的用户分数为 10 
  2. zadd ranking 10 user1 
  3. zadd ranking 20 user2 
  4. # 取分数最高的3个用户 
  5. zrevrange ranking 0 2 withscores 
逾期计策

按期删除

redis 会将每个配置了逾期时刻的 key 放入到一个独立的字典中,往后会按期遍历这个字典来删除到期的 key。

按期删除计策

Redis 默认会每秒举办十次逾期扫描(100ms一次),逾期扫描不会遍历逾期字典中全部的 key,而是回收了一种简朴的贪婪计策。

从逾期字典中随机 20 个 key;

删除这 20 个 key 中已经逾期的 key;

假如逾期的 key 比率高出 1/4,那就一再步调 1;

惰性删除

除了按期遍历之外,它还会行使惰性计策来删除逾期的 key,所谓惰性计策就是在客户端会见这个 key 的时辰,redis 对 key 的逾期时刻举办搜查,假如逾期了就当即删除,不会给你返回任何对象。

按期删除是齐集处理赏罚,惰性删除是零星处理赏罚。

为什么要回收按期删除+惰性删除2种计策呢?

假如逾期就删除。假设redis里放了10万个key,都配置了逾期时刻,你每隔几百毫秒,就搜查10万个key,那redis根基上就死了,cpu负载会很高的,耗损在你的搜查逾期key上了

可是题目是,按期删除也许会导致许多逾期key到了时刻并没有被删除去,那咋整呢?以是就是惰性删除了。这就是说,在你获取某个key的时辰,redis会搜查一下 ,这个key假如配置了逾期时刻那么是否逾期了?假如逾期了此时就会删除,不会给你返回任何对象。

并不是key到时刻就被删除去,而是你查询这个key的时辰,redis再懒惰的搜查一下

通过上述两种本领团结起来,担保逾期的key必然会被干掉。

以是说用了上述2种计策后,下面这种征象就不难表明白:数据显着都逾期了,可是还占据着内存

内存裁减计策

这个题目也许有小搭档们碰着过,放到Redis中的数据怎么没了?

由于Redis将数据放到内存中,内存是有限的,好比redis就只能用10个G,你要是往内里写了20个G的数据,会咋办?虽然会干掉10个G的数据,然后就保存10个G的数据了。那干掉哪些数据?保存哪些数据?虽然是干掉不常用的数据,保存常用的数据了

Redis提供的内存裁减计策有如下几种:

  1. noeviction 不会继承处事写哀求 (DEL 哀求可以继承处事),读哀求可以继承举办。这样可以担保不会丢失数据,可是会让线上的营业不能一连举办。这是默认的裁减计策。
  2. volatile-lru 实行裁减配置了逾期时刻的 key,起码行使的 key 优先被裁减。没有配置逾期时刻的 key 不会被裁减,这样可以担保必要耐久化的数据不会溘然丢失。(这个是行使最多的)
  3. volatile-ttl 跟上面一样,除了裁减的计策不是 LRU,而是 key 的剩余寿命 ttl 的值,ttl 越小越优先被裁减。
  4. volatile-random 跟上面一样,不外裁减的 key 是逾期 key 荟萃中随机的 key。
  5. allkeys-lru 区别于 volatile-lru,这个计策要裁减的 key 工具是全体的 key 荟萃,而不可是逾期的 key 荟萃。这意味着没有配置逾期时刻的 key 也会被裁减。
  6. allkeys-random 跟上面一样,不外裁减的计策是随机的 key。allkeys-random 跟上面一样,不外裁减的计策是随机的 key。
耐久化计策

Redis的数据是存在内存中的,假如Redis产生宕机,那么数据会所有丢失,因此必需提供耐久化机制。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读