redis作为一款高性能key-value数据库,还拥有持久化,多种数据类型,数据备份(主从)等优势,我们本篇先说结构和常用命令和使用场景

基础部分

1.string类型

string主要用于记录字符串类型的缓存数据,常用于存储对象,计数器,设计锁,字符串等
常用命令:

get set mget mset getset setex psetex
setnx msetnx
incr decr incby decrby incrbyfloat
getrange setrange setbit getbit append

使用场景:
get set mget mset常见于普通kv存储的业务命,getset是简化了get后再set的操作,setex psetex是把 set 和 expire / pexpire 简化成一个命令了,set现在已经支持多参数设置了,(最下面的总结会说明一些场 景下为什么使用简化的命令会提升性能,但是实际生产环境下需要结合业务和开发规范来决定)
setnx msetnx 是redis实现锁的一个重要命令(set命令已经支持多参数设置可以实现设置锁且设置超时,避免死锁的风险),业务场景里可以通过该命令实现简单的互斥锁,也可以构建复杂的分布式锁.这里不展开
incr decr incby decrby incrbyfloat 常见于计数器业务,或者信号量
getrange setrange append常见业务逻辑很少用,特殊下的业务场景应该会比较方便,理解其命令用法即可
setbit getbit 这2个命令也是特殊场景下的,实际生产之中我只在构建用户历史记录当中用过,不展开

2.list类型

list常用于构建简单的任务队列
常用命令:

rpush lpush rpop lpop brpop blpop
rpoplpush brpoplpush
llen lindex lrange ltrim lset

使用场景:
rpush lpush rpop lpop brpop blpop队列的 入队 出队 基本操作, brpop属于阻塞pop,队列没有值的时候会等待到超时或出现值
rpoplpush brpoplpush 构建双队列,保活队列常用命令,因为list并没有完整的消息队列功能,所以需要自己设计ack机制,这个时候就需要用到rpoplpush 保证 item 被消费的时候即使出现崩溃,或者异常能把item重新导入到任务队列里继续处理,把数据丢失做到最低
llen lindex lrange ltrim lset 辅助队列的一些命令,比如业务逻辑涉及到定期裁剪,那就会用到 llen 和 ltrim,如果裁剪还有规则就会用到lrange

3.set类型

set常用于需要使用集合的业务场景,比如存放需要存储观看记录,存储ip,存储手机号,存储手机号等等
常用命令:

sadd spop sismember srandmember
scard smove srem smembers
sdiff sdiffstore sinter sinterstore sunion sunionstore

使用场景:
sadd spop sismember srandmember属于基本set操作,此pop是随机移除,srandmember是随机返回一个成员不移除
scard smove srem smembers根据业务来控制set大小,或者其他有删除逻辑会用到这些命令
sdiff sdiffstore sinter sinterstore sunion sunionstoreredis内部实现了差集,交集,并集的操作,但是实际生产环境里不建议使用这些命令,因为redis属于单线程应用,如果一个交集命令非常耗时会阻塞其他客户端的命令

4.zset类型

zset使用场景非常丰富且高效,比如处理排行榜,用作处理队列业务,适用排序功能的业务场景,仅用2个zset结构可以构成一个支持多人订阅消息,还能保证不丢数据的功能,可以用于聊天室业务场景.
常用命令:

zadd zcard zincrby zcount zscore zrank
zrevrank zrange zrevrange zrangebyscore zrevrangebyscore
zrem zremrangebyrank zremrangebyscore
zinterstore zunionstore
zlexcount zrangebylex zremrangebylex

使用场景:
zadd zcard zincrby zcount zscore zrank zset常用命令,其中zincrby是个成员incr操作的,适合用作排行榜的自增操作
zrevrank zrange zrevrange zrangebyscore zrevrangebyscore 通过索引,分数正序倒序截取zset数据用
zrem zremrangebyrank zremrangebyscore裁剪zset的常用命令
zinterstore zunionstore集合运算
zlexcount zrangebylex zremrangebylex这是一个骚功能,用于 自动识别场景, 比如通讯录里输入张开头 程序返回张开头的所有联系人, 就是用这几个命令实现的,具体做法是 ascall 表 z 的下一位是 {那么就可以 定位 张{ 就可以把张开头的人全部截取到

5.hash类型

hash结构多用于存储对象,存储用户登录token,购物车等业务场景均适用
常用命令:

hset hget hmset hmget hdel hlen hexists hincrby hincrbyfloat hsetnx
hkeys hvals hgetall

使用场景:
hset hget hmset hmget hdel hlen hexists hincrby hincrbyfloat hsetnx常用操作命令
hkeys hvals hgetall 在hash特别大的时候 hgetall 会造成阻塞, 所以可以用 hkeys 和 hvals 结合使用

其他常用命令

type rename del sort expire

常用的改名,删除键,设置过期时间(单位:秒)

最后

实际生产当中最常用的数据类型就是string,包括string可以代替set,zset,hash结构.因为string的速度是最快的,对redis的cpu没有什么消耗,越复杂的结构对redis性能越有影响,而redis是一个单线程应用,如果某个客户端进行复杂结构的运算, 比如 set 和 zset 进行大数量的集合运算,排序等等,就会造成其他客户端阻塞,从而引发更多的问题出现,所以当结构能优化成string时,最好用string,可以把逻辑运算的成本放在业务机器上.

其他结构也需要结合业务来慎重使用,避免热key或者慢查询的情况出现,高并发场景下需要结合业务做多层缓存,碎片化缓存看情况而合并成大缓存,提高响应性能,其他想到什么再写进来.

本文作者: Bowen
本文链接: https://dangbowen.com/redis/commands/ae747e39.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

[bowen干货]-redis常用五种数据类型命令和场景描述相关推荐

  1. Redis的五种数据类型及应用场景

    1,数据类型 String(字符串,整数,浮点数):做简单的键值对缓存 List(列表):储存一些列表类型的数据结构 Set(无序集合):交集,并集,差集的操作 Hash(包含键值对的无序散列表):结 ...

  2. 【Redis】五种数据类型及其使用场景

    Redis 数据类型 五种redis的类型与java的数据类型的类比 string --> String hash --> Hashmap list --> LinkList set ...

  3. 【Redis】五种数据类型

    五种数据类型 string类型 list类型 set类型 hash类型 sortset String 添加/修改数据 set key value 获取数据 get key 删除数据 del key 批 ...

  4. Redis五种数据类型及应用场景

    Redis五种数据类型及应用场景 MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样 ...

  5. 【redis-02】redis的五种数据类型和对应的操作方法,补充RedisUtil模板

    [redis-02]redis的五种数据类型和对应的操作方法,补充RedisUtil模板 [一]redis的五种数据类型 [二]String:字符串常用命令 (1)String基本信息 (2)Stri ...

  6. StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用

    StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 原文: StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 Connec ...

  7. Redis: Redis支持五种数据类型

    ylbtech-Redis: Redis支持五种数据类型 Redis支持五种数据类型:string(字符串) ,hash(哈希),list(列表),set(集合)及zset(sorted set:有序 ...

  8. redis五种数据类型的使用场景

    string 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...

  9. redis五种数据类型及使用场景

    Redis 数据类型 转载自https://blog.csdn.net/zzu_seu/article/details/106323114 五种类型与类比java的模型 string --> S ...

  10. Redis五种数据类型的应用场景

    redis可以用作数据库.缓存和消息中间件. 一.String(字符串)类型 String是最常用的一种数据类型,普通的key/ value 存储都可以归为此类 常用使用场景: 1.缓存结构体信息 2 ...

最新文章

  1. LeetCode简单题之整数的各位积和之差
  2. 计算机原理 对口单招,对口单招计算机原理计算专题练习-20210622114415.pdf-原创力文档...
  3. XML学习笔记01【xml_基础、xml_约束】
  4. 如何看待 2020 届校招算法岗「爆炸」的情况?英雄所见略同
  5. unicode字符大全可复制_说说Excel不可见字符的那些事
  6. BZOJ3223文艺平衡树——非旋转treap
  7. rendering omni shadow in one pass.
  8. HttpWebRequest的timeout和ReadWriteTimeout
  9. springMVC包扫描失效,前端控制器加载异常
  10. System.Web.Caching
  11. 前端图表生成利器--ECharts推荐
  12. QT应用SQL数据库,简单全面的应用,增删改查。
  13. mysql group by COLUMN desc问题
  14. ImageMagick将多张图片拼接成一张图片_介绍一款全功能的图片查看编辑软件
  15. Adobe Photoshop CS5.1 Extended 12.1中文特别版
  16. 安装skywalking
  17. 建立数据驱动的人力资源管理:以红海云eHR系统为例
  18. php抓包腾讯大王卡token,【免流】腾讯大王卡变色龙自动抓包
  19. Nginx+keepalived双机热备(主从模式)
  20. Unittest框架

热门文章

  1. PTF 安装及简单测试 Packet Testing Framework
  2. 电子计算机第一台视频,1946年2月14日世界上第一台计算机诞生
  3. 一个算法模型搞定千万种场景,人工智能领域出现一匹黑马
  4. 椭圆周长c语言,怎么计算上椭圆周长,下椭圆周长,和展开面周长
  5. Matlab突然闪退 出现Fatal Error On Startup解决办法
  6. 虚拟机全屏后隐藏vmware菜单栏的问题
  7. [项目管理]四象限时间管理法
  8. 【时间管理】要事第一--时间管理四象限法
  9. docker+scrapy+scrapy_splash爬取大麦网
  10. 蓝牙模块定位_详解蓝牙4.0BLEbeacon室内定位原理