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

口试官:Redis五种根基数据范例的应用场景是啥?

发布时间:2019-08-13 09:48:39 所属栏目:编程 来源:Java识堂
导读:string 缓存 简朴key-value存储 漫衍式锁 setnx key value,当key不存在时,将 key 的值设为 value ,返回1 若给定的 key 已经存在,则setnx不做任何举措,返回0。 当setnx返回1时,暗示获取锁,做完操纵往后del key,暗示开释锁,假如setnx返回0暗示获取
副问题[/!--empirenews.page--]

口试官:Redis五种根基数据范例的应用场景是啥?

string

缓存

简朴key-value存储

漫衍式锁

setnx key value,当key不存在时,将 key 的值设为 value ,返回1

若给定的 key 已经存在,则setnx不做任何举措,返回0。

当setnx返回1时,暗示获取锁,做完操纵往后del key,暗示开释锁,假如setnx返回0暗示获取锁失败,整体思绪或许就是这样

计数器

如知乎每个题目的被赏识器次数

口试官:redis五种根基数据范例的应用场景是啥?
  1. set key 0 
  2. incr key // incr readcount::{帖子id} 每阅读一次 
  3. get key // get readcount::{帖子id} 获取阅读量 

漫衍式全局独一id

漫衍式全局独一id的实现方法有许多,这里只先容用redis实现

口试官:redis五种根基数据范例的应用场景是啥?

每次获取userId的时辰,对userId加1再获取,可以改造为如下情势

口试官:redis五种根基数据范例的应用场景是啥?

直接获取一段userId的最大值,缓存到当地逐步累加,快到了userId的最大值时,再去获取一段,一个用户处事宕机了,也顶多一小段userId没有效到

  1. set userId 0 
  2. incr usrId //返回1 
  3. incrby userId 1000 //返回10001 

hash

redis的散列可以让用户将多个键值对存储到一个Redis的键内里,散列很是合用于将一些相干的数据存储在一路。相同map的一种布局,将布局化的数据,好比一个工具(条件是这个工具没嵌套其他的工具)给缓存到redis中,往后每次读写内存时,就可以操纵hash里的某个字段

list

动静行列

口试官:redis五种根基数据范例的应用场景是啥?

在list内里一边进,一边出即可

  1. ## 实现方法一 
  2. lpush key value //一向往list左边放 
  3. brpop key value 10  
  4. //key这个list有元素时,直接弹出,没有元素被阻塞,直到守候超时或发明可弹出元素为止,上面例子超时时刻为10s 
  5.  
  6. ## 实现方法二 
  7. rpush key value 
  8. blpop key value 10 

新浪/Twitter用户动静列表

口试官:redis五种根基数据范例的应用场景是啥?

插手说小编li存眷了2个微博a和b,a发了一条微博(编号为100)就执行如下呼吁

  1. lpush msg::li 100 

b发了一条微博(编号为200)就执行如下呼吁:

  1. lpush msg::li 200 

若是想拿最近的10条动静就可以执行如下呼吁(最新的动静必然在list的最左边):

  1. lrange msg::li 0 9 //下标从0开始,[start,stop]是闭区间,都包括 

set

无序荟萃,自动去重,将数据放到set中就可去重,可以基于JVM的HashSet去重,假如体系陈设在多台呆板上,就可以用redis举办全局去重

可以基于set做交集,并集,差集的操纵。如把2小我私人的粉丝列表弄一个交集,就能看到两小我私人的配合挚友是谁

实现点赞,签到,like等成果

口试官:redis五种根基数据范例的应用场景是啥?
  1. // 1001用户给8001帖子点赞 
  2. sadd like::8001 1001 
  3. srem like::8001 1001 //打消点赞 
  4. sismember like::8001 1001 //搜查用户是否点过赞 
  5. smembers like::8001 //获取点赞的用户列表 
  6. scard like::8001 //获取点赞用户数 

实现存眷模子,也许熟悉的人

口试官:redis五种根基数据范例的应用场景是啥?

seven存眷的人

sevenSub -> {qing, mic, james}

青山存眷的人

qingSub->{seven,jack,mic,james}

Mic存眷的人

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

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

电商商品筛选

口试官:redis五种根基数据范例的应用场景是啥?

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

  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.  
  6. // 获取品牌为遐想,屏幕尺寸为15.6,而且处理赏罚器为i7的电脑品牌(sinter为获取荟萃的交集) 
  7. sinter brand::lenovo screenSize::15.6 processor::i7 -> 挽救者y700P-001 

zset

排序的set,可以去重还可以排序,写进去的时辰给一个分数,自动按照按照分数排序,分数可以自界说排序法则

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

口试官:redis五种根基数据范例的应用场景是啥?
  1. // user1的用户分数为 10 
  2. zadd ranking 10 user1 
  3. zadd ranking 20 user2 
  4. // 取分数最高的3个用户 
  5. zrevrange ranking 0 2 withscores 

(编辑:湖南网)

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

热点阅读