遗忘悠剑

🍀 记录精彩的程序人生 开始使用

redis 的六大数据类型详细用法

我们说 Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。本篇博客我们就将介绍这些数据类型的详细使用以及顺带介绍 Redis 系统的相关命令用法。

  注意:Redis 的命令不区分大小写,但是 key 严格区分大小写!!!

0、写在前面

  下面介绍的 Redis 命令有很多,如果你想通过死记硬背来记住这些命令几乎不可能,但是如果理解了 Redis 的一些机制,这些命令其实是由很强的通用性的,通过理解来记忆是最好的。 另外,每种数据类型都有其适合的使用场景,我也会在文中给与说明,如果滥用,反而会适得其反。

1、string 数据类型

  string 是 Redis 的最基本的数据类型,可以理解为与 Memcached 一模一样的类型,一个 key 对应一个 value。string 类型是二进制安全的,意思是 Redis 的 string 可以包含任何数据,比如图片或者序列化的对象,一个 Redis 中字符串 value 最多可以是 512M。

①、相关命令介绍

  string 数据类型在 Redis 中的相关命令:

  表格图片引用:http://www.cnblogs.com/xrq730/p/8944539.html(下同)

  

  

  PS:

  ①、上面的 ttl 命令是返回 key 的剩余过期时间,单位为秒。

  ②、mset 和 mget 这种批量处理命令,能够极大的提高操作效率。因为一次命令执行所需要的时间=1 次网络传输时间 +1 次命令执行时间,n 个命令耗时=n 次网络传输时间 +n 次命令执行时间,而批量处理命令会将 n 次网络时间缩减为 1 次网络时间,也就是 1 次网络传输时间 +n 次命令处理时间。

  但是需要注意的是,Redis 是单线程的,如果一次批量处理命令过多,会造成 Redis 阻塞或网络拥塞(传输数据量大)。

  ③、setnx 可以用于实现分布式锁,具体实现方式后面会介绍。

  上面是 string 类型的基本命令,下面介绍几个自增自减操作,这在实际工作中还是特别有用的(分布式环境中统计系统的在线人数,利用 Redis 的高性能读写,在 Redis 中完成秒杀,而不是直接操作数据库。)。

  

②、典型使用场景

  一、计数

  由于 Redis 单线程的特点,我们不用考虑并发造成计数不准的问题,通过 incrby 命令,我们可以正确的得到我们想要的结果。

  二、限制次数

  比如登录次数校验,错误超过三次 5 分钟内就不让登录了,每次登录设置 key 自增一次,并设置该 key 的过期时间为 5 分钟后,每次登录检查一下该 key 的值来进行限制登录。

2、hash 数据类型

  hash 是一个键值对集合,是一个 string 类型的 key 和 value 的映射表,key 还是 key,但是 value 是一个键值对(key-value)。类比于 Java 里面的 Map<String,Map<String,Object>> 集合。

①、相关命令介绍

  

  演示如下:

  

②、典型使用场景

**  **查询的时间复杂度是 O(1),用于缓存一些信息。

3、list 数据类型

  list 列表,它是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边),它的底层实际上是个链表。

  列表有两个特点:

  一、有序

  二、可以重复

  这两个特点要注意和后面介绍的集合和有序集合相对比。

①、相关命令介绍

  

  

  

②、典型使用场景

  一、栈

  通过命令 lpush+lpop

  二、队列

  命令 lpush+rpop

  三、有限集合

  命令 lpush+ltrim

  四、消息队列

  命令 lpush+brpop

4、set 数据类型

  Redis 的 set 是 string 类型的无序集合。

  相对于列表,集合也有两个特点:

  一、无序

  二、不可重复

①、相关命令介绍

  

  

  

②、典型使用场景

**  **利用集合的交并集特性,比如在社交领域,我们可以很方便的求出多个用户的共同好友,共同感兴趣的领域等。

5、zset 数据类型

  zset(sorted set 有序集合),和上面的 set 数据类型一样,也是 string 类型元素的集合,但是它是有序的。

①、相关命令介绍

  

  

②、典型使用场景

  和 set 数据结构一样,zset 也可以用于社交领域的相关业务,并且还可以利用 zset 的有序特性,还可以做类似排行榜的业务。

6、Redis5.0 新数据结构-stream

  Redis 的作者在 Redis5.0 中,放出一个新的数据结构,Stream。Redis Stream 的内部,其实也是一个队列,每一个不同的 key,对应的是不同的队列,每个队列的元素,也就是消息,都有一个 msgid,并且需要保证 msgid 是严格递增的。在 Stream 当中,消息是默认持久化的,即便是 Redis 重启,也能够读取到消息。那么,stream 是如何做到多播的呢?其实非常的简单,与其他队列系统相似,Redis 对不同的消费者,也有消费者 Group 这样的概念,不同的消费组,可以消费同一个消息,对于不同的消费组,都维护一个 Idx 下标,表示这一个消费群组消费到了哪里,每次进行消费,都会更新一下这个下标,往后面一位进行偏移。

7、系统相关命令

  

8、key 相关命令

  关于 key 的命令应该说是最常用的,需要大家记住。

  

   

  

  这里在介绍一个命令 :

OBJECT ENCODING    key

  这是用来显示这五种数据类型的底层数据结构,下一篇博客我们会详细介绍。

  

  上面的命令我们给 string 数据类型 k1 复制 str,给 k2 复制 123,通过 OBJECT ENCODING 显示底层实现的数据类型分别是 embstr 和 int。这到底是什么呢?下篇博客我们会详细介绍的。

参考文档:http://www.redis.cn/commands.html

     http://www.cnblogs.com/xrq730/p/8944539.html

原文:https://www.cnblogs.com/ysocean/p/9080940.html


🐶 你走,我不送你。你来,风雨无阻,我去接你。

评论
1 评论
ieras • 2020-07-26
回复 删除

阅读的时候,可以单击图片放大 ~ 也可以直接点击原文链接到原文看更多文章 ~