1 mset、mget、msetnx
批量处理字符串更新、获取、加锁
场景:文章的标题、内容、作者等多个key 批量发布和查看(对于这种可以直接用序列化反序列化。。)

2 strlen、getrange
统计文章字数、预览文章(截取文章)
场景:博客字数统计和文章预览

3 append
拼接字符串
场景:日志拼接(也是很少用)

4 hset、hget
场景:记录生成次数
5 lindex、lset、linsert、ltrim、lrem、lpush
- 获取list指定下标元素:lindex mylist 0 "bar"
- 更新list指定下标元素:lset mylist 0 "bar"
- 插入list指定前后的元素:linsert key BEFORE|AFTER pivot value
- 删除list除了某个范围外的所有数据:ltrim mylist 1 -1      // -1表示最后一个元素,即除了[1, 最后一个],其余都删掉
- 删除list指定范围元素:lrem mylist 1 -1 // 删除[1, 最后一个]元素
- 添加list元素:lpush list "bar"

6 lpush、brpop
用redis实现类型MQ功能,lpush key value, brpop key       // brpop是阻塞式,有数据就弹出
7 sadd、scard
加入集合、统计集合元素个数
场景:uv统计(统计当前去重后的用户数量 - 不用hyperloglog条件下)

8 srem、sismember、smembers、sinter、sdiff
删除集合元素、判断是否存在集合中、返回集合所有元素、取两个集合交集、取两个集合差集
场景:可结合7中的两个来 对标签进行管理
场景二:朋友圈点赞。sadd添加点赞的好友、srem取消点赞、sismember判断是否被某人点赞(sismember moment_like_users::1 10086,1是朋友圈ID,10086是用户ID)、smember获取点赞的所有用户、scard统计点赞数量
场景三:投票。同《场景二》
场景四:类似微博的社交关系。需要sadd每次维护关注和被关注集合,然后取关srem移除这两个集合。对于千万级关注量的,就需要维护关注、被关注的计数器,并且只存储部分关注id
场景五:微博关注与推荐关注。首先微博关注上线是 2000 ,所以取两个用户共同关注的(也可以用sdiff取差集 - 推荐关注(就是朋友关注了我没关注的)),直接取交集即可(sinter)。
场景六:为商品搜索构建反向索引。sadd给对应关键词添加一个集合,sinter取关键词的交集返回。其实就是为每一个关键词赋予一个集合,但是这样反向的关键词量级可能会比较大。
-----------------------------------
void addProduct(long produceId, List<String> kws) {
for (String kw : kws) jedis.sadd("kw::" + kw + "::products", String.valueOf(produceId));
}
Set<String> searchProduct(List<String> kws) {
List<String> kwsList = new ArrayList<>();
for (String kw : kws) kwsList.add("kw::" + kw + "::products");
return jedis.sinter(kwsList.toArray(new String[kwsList.size()]))
}
-----------------------------------

9 srandommember、spop
随机从集合返回几个元素、随机从集合弹出几个元素
场景:网站上的抽奖程序。sadd加入待抽奖名单,smembers返回所有待抽奖人,scard返回待抽奖人数,srandommember返回随机抽中的名单
- smembers可能出现的性能问题?如果集合里面数据量超过千万级别,调用该命令会造成线程长时间阻塞,所以需要把集合拆分成多个小集合来处理。

10 zadd、zscore、zrem、zincrby、zrevrank、zrevrange
- 添加有序集合元素:zadd key score value
- 获取当前元素的分数:score key member [member ...]
- 删除有序集合中指定的元素:zrem key member
- 增加有序集合元素分数:zincrby key increment member
- 获取当前元素在集合中的排序:zrevrank key member  
- 获取递增或递减分数的范围的数据:
-- ZRANGE salary 0 -1 WITHSCORES        # 递增排列
-- ZREVRANGE salary 0 -1 WITHSCORES     # 递减排列
场景:实现音乐网站的排行榜程序

11 pfadd、pfcount、pfmerge
- 添加元素:pfadd key element [element ...]
- 统计去重后的数据结果:pfcount key
- 合并多个HyperLogLog:pfmerge destKey sourceKey1 sourceKey2
场景:HyperLogLog统计访问UV(去重),上亿用户统计也只占用12kb,标准误差率0.81%。
场景2:周活跃用户数、月活跃用户数、年活跃用户数的统计。为每一天、月建立一个hyperloglog,然后pfmerge合并出周、月、年的统计。

12 setbit、getbit、bitcount
- 设置对应偏移量的值:setbit key offset [value]       // value是0或1
- 获取对应偏移量的值:getbit key offset
- 统计当前位图的1的个数:bitcount key
场景:基于位图统计用户访问UV。比如记录用户id=10086:setbit visit_uv 10086 1        // 如果一个位不够统计,那就两个位

13 geoadd、geopos、geodist、georadius、georadiusbymember、geohash
- 存储地理位置:geoadd key 经度 纬度 member [经度 纬度 member]
- 获取地理位置:geopos key member [member]
- 返回两个给定位置之间距离:geodist key member1 member2 [m|km|ft|mi]  // 最后一个参数是单位,米、千米、英尺、英里
- 返回给定坐标下一定范围距离的所有位置元素:georadius key 经度 纬度 radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
-- 举例:GEORADIUS Sicily 15 37 200 km WITHDIST
- 返回给定元素一定范围距离的所有位置元素:georadiusbymember key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
- 获取一个或多个位置元素的 geohash 值:geohash key member [member ...]
场景:基于GeoHash的你与商铺距离计算的程序。
场景2:查找附近的人。用georadiusbymember即可找到其在一定范围的用户

14 pipeline
管道命令批量传输

Redis常用数据结构及其场景归纳相关推荐

  1. php两个数组之间去重,php数组去重、魔术方法、redis常用数据结构及应用场景

    一.用函数对数组进行去重的方法 1. arrau_unique函数的作用 移除数组中重复的值. 将值作为字符串进行排序,然后保留 每个值第一次 出现的健名,健名保留不变. 第二个参数可以选择排序方式: ...

  2. redis常用数据类型的场景,你真的用对了么?

    关注微信公众号"虾米聊吧",每天更新一篇技术文章,文章内容涵盖架构师成长必经之路应掌握的技术,一起学习,一起交流. redis常用数据类型的场景,你真的用对了么? redis常用数 ...

  3. 【高级开发进阶】Redis五大数据结构应用场景落地

    Redis缓存数据结构,数据同步问题(双删策略),缓存雪崩,缓存穿透,热点缓存重构,缓存失效,哨兵机制,持久化,redis 淘汰机制 熟悉掌握Redis数据结构的使用场景,熟悉Redis缓存高并发的使 ...

  4. Redis常用数据结构和操作

    1.String 存入字符类型Set name luowen 设置name = luowen 存储Get name 获取设置好的name的值Setnx name luowen 设置name键值为luo ...

  5. redis常用数据结构解析

    Redis是一个开源的Key-Value存储引擎,它支持string.hash.list.set和sorted set等多种值类型.由于其卓越的性能表现.丰富的数据类型及稳定性,广泛用于各种需要k/v ...

  6. redis 不同数据结构使用场景

    String 使用场景: 1.缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力. 2.计数器:redi ...

  7. Redis 常用数据结构及其控制命令整合

    Redis 键值支持5种基本结构,分别是字符串,列表,哈希,集合,有序集合.每一种数据结构都有对应的取值和设值命令,辅助命令,除此之外,还有一些全局命令,用来管理Redis存储的所有键. 全局命令 针 ...

  8. redis常用数据结构与安装使用

    概念: redis是一款高性能的NOSQL系列的非关系型数据库 redis的安装与使用: 1.准备工作(安装gcc依赖) yum -y install gcc-c++ 2.下载并解压源码包 cd /u ...

  9. Redis常用数据类型及其对应的底层数据结构

    Redis数据库 Redis是一种键值(Key-Value)数据库.相较于MySQL之类的关系型数据库,Redis是一种非关系型数据库.Redis存储的数据只包含键和值两部分,只能通过键来查询值.这样 ...

最新文章

  1. 关于onclick操作,影响按钮submit提交
  2. 第四十章:基于SpringBoot Quartz完成定时任务分布式多节点负载持久化
  3. flex4.6 图表 在module中 x轴旋转正确的做法
  4. 变形积木装饰科技发起创始人郭辉:I'm the Business Bible
  5. python 模块 多线程 单例_python的单例模式
  6. 二叉树展开为链表—leetcode114
  7. 【HDU2795】Billboard(线段树)
  8. .NET 6新特性试用 | 隐式using指令
  9. ABP vNext 审计日志获取真实客户端IP
  10. 前端学习(3092):vue+element今日头条管理-发布更新
  11. webpack ,react
  12. IDC:无线数字化转型持续进行 第二季度全球企业WLAN市场强劲增长
  13. Linux必须熟记的文件
  14. 华为tftp服务器如何配置文件,配置tftp服务器
  15. 还不会财务管理分析?Python爬取全网财务分析数据
  16. c语言全局钩子,如何编写一个全局钩子
  17. python 姓名转拼音
  18. Hibernate的缓存机制
  19. Xposed 模块 Nnnen助手(Soul 抖音 皮皮虾Hook)
  20. 如何将PPT制成二维码?

热门文章

  1. Hardware/Firmware/Software
  2. 爬取获取邮箱内容QQ邮箱or163邮箱
  3. ue4打包h5_ue4学习之嵌入H5网页(web Brower)
  4. FPGA - Zynq - 加载 - BootRom
  5. 第三课:创建BootRom引导镜像
  6. kafka Process ‘command ‘/jdk1.8.0_77/jre/bin/java.exe finished with non-zero exit value 1
  7. JDK8之ConcurrentHashMap源码解读
  8. 微软翻译离线简体中文服务器,第一次使用微软翻译应用只有英语离线语言包
  9. excel绘制双坐标折线图
  10. 20230327 作业