我们说 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

本系列教程持续更新,可以微信搜索「 IT可乐 」第一时间阅读。回复《电子书》有我为大家特别刷选的书籍资料

Redis详解(三)------ redis的五大数据类型详细用法的更多相关文章

  1. Redis 详解 (三) redis的五大数据类型详细用法

    目录 1.string 数据类型 2.hash 数据类型 3.list 数据类型 4.set 数据类型 5.zset 数据类型 6.系统相关命令 7.key 相关命令 我们说 Redis 相对于 Me ...

  2. Redis 详解 (四) redis的底层数据结构

    目录 1.演示数据类型的实现 2.简单动态字符串 3.链表 4.字典 5.跳跃表 6.整数集合 7.压缩列表 8.总结 上一篇博客我们介绍了 redis的五大数据类型详细用法,但是在 Redis 中, ...

  3. Redis 详解 (五) redis的五大数据类型实现原理

    目录 1.对象的类型与编码 ①.type属性 ②.encoding 属性和 *prt 指针 2.字符串对象 3.列表对象 4.哈希对象 5.集合对象 6.有序集合对象 7.五大数据类型的应用场景 8. ...

  4. Redis 详解 (二) redis的配置文件介绍

    目录 1.开头说明 2.INCLUDES 3.MODULES 4.NETWORK 5.GENERAL 6.SNAPSHOTTING 7.REPLICATION 8.SECURITY 9.CLIENTS ...

  5. Redis 详解 (一) redis的简介和安装

    目录 1.Redis 的简介 2.Redis 下载 3.安装环境 4.编译安装 5.启动Redis 6.关闭Redis 7.注意事项 工作中一直在用 Redis,但是一直没有进行系统的总结,这个系列的 ...

  6. redis详解及应用(雪崩、击穿、穿透)

    一. redis的简介与安装 引用:https://www.cnblogs.com/ysocean/tag/Redis%E8%AF%A6%E8%A7%A3/ 二. redis的配置文件介绍 引用:ht ...

  7. Redis详解(四)------ redis的底层数据结构

    上一篇博客我们介绍了 redis的五大数据类型详细用法,但是在 Redis 中,这几种数据类型底层是由什么数据结构构造的呢?本篇博客我们就来详细介绍Redis中五大数据类型的底层实现. 1.演示数据类 ...

  8. Python操作redis字符串(String)详解 (三)

    # -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1.SET 命令用于设置 ...

  9. Redis详解(三)——事务

    Redis详解(三)--事务 Redis事务的概念: Redis 事务的本质是一组命令的集合.事务支持一次执行多个命令,一个事务中所有命令都会被序列化.在事务执行过程,会按照顺序串行化执行队列中的命令 ...

随机推荐

  1. 为容器化的 Go 程序搭建 CI

    本文介绍如何使用 Jenkins 的声明式 pipeline 为一个简单的 Golang web 应用搭建 CI 环境.如果你还不太了解 Jenkins 及其声明式 pipeline,请先参考笔者的 ...

  2. 通过钩子程序跨程序关闭Window

    需求: 在实际场景中会有自身程序在调用第三方的动态库过程中,因为第三方的动态库弹框导致线程阻塞,必须手动将弹窗关闭后才能回到自身程序的主线程中. 最简单的场景就是很多自助设备,本身是没有固定操作员的, ...

  3. 用户在浏览器中输入一个url发生的奥秘

    在HTTP 客户端向服务器发送报文之前,需要用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条TCP/IP 连接. http://207.200.83.29 ...

  4. 原生JS编写兼容IE6,7,8浏览器无缝自动轮播(带按钮切换)

    项目要求页面兼容IE6,7,8等浏览器,我们可能会遇到这个轮播效果,轮播板块要求:无限循环.自动轮播和手动切换功能,每一次滚动一小格,网上有很多这类插件,例如:swiper等! 但是很多都是不兼容IE ...

  5. Ext.extend

    Ext.extend:老版本的定义类,单继承 有两种使用方法,具体见附件中的Extend1.html和Extend2.html 附件如下: Ext.extend.zip

  6. 五、RemoteViews

    RemoteViews表示的是一个View结构,它可以在其他进程中显示.RemoteViews在Android中的使用场景有两种:通知栏和桌面小部件. 1.RemoteViews的应用 RemoteV ...

  7. 使用docker部署skywalking

    使用docker部署skywalking Intro 之前在本地搭建过一次 skywalking + elasticsearch ,但是想要迁移到别的机器上使用就很麻烦了,于是 docker 就成了很 ...

  8. sql server 错误日志errorlog

    一 .概述 SQL Server 将某些系统事件和用户定义事件记录到 SQL Server 错误日志和 Microsoft Windows 应用程序日志中. 这两种日志都会自动给所有记录事件加上时间戳 ...

  9. 无法启动mysql服务”1067 进程意外终止”解决办法【简记】

    本文章主要是总结了各种导致mysql提示无法启动MYSQL服务”1067 进程意外终止”的一些解决办法,有碰到mysql无法启动的同学可尝试参考. 在win7的服务器里开启MySql服务提示“wind ...

  10. SQLServer之创建辅助XML索引

    创建辅助XML索引 使用 CREATE INDEX (Transact-SQL)Transact-SQL DDL 语句可创建辅助 XML 索引并且可指定所需的辅助 XML 索引的类型. 创建辅助 XM ...