一、前言

Redis除了可以存储键还可以存储常见的5种数据类型,分别是:String、List、Set、Hash、ZSet。对于Redis的命令有一部分是可以公用的,但是还有一些其他的命令是属于特殊使用的。

首先看看一张关于Redis5种数据结构的对比:

下边就分别介绍5中国不同的数据结构类型。

二、String字符串类型

Redis中的String类型就是一个由字节组成的序列,他和其他编程语言或者其他键值对存储提供的字符串操作非常相似。

一个String类型的实例,其中键为hello,值为world:

(1)常用命令如下:

(2)Redis中的自增命令和自减命令:

(3)除了get、set、del、自增、自减等操作外,Redis还提供了下面一些操作:

  • 获取字符串长度
  • 往字符串append内容
  • 设置和获取字符串的某一段内容
  • 设置及获取字符串的某一位(bit)
  • 批量设置一系列字符串的内容

如下图所示:

(4)应用场景:

String是最常用的一种数据类型,普通的key/value存储都可以归为此类,value其实不仅是String, 也可以是数字:比如想知道什么时候封锁一个IP地址(访问超过几次)。INCRBY命令让这些变得很容易,通过原子递增保持计数。

三、List列表类型

Redis中的List其实就是链表(redis 使用双端链表实现的 List),相信学过数据结构知识的人都应该能理解其结构。

使用 List 结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的 TimeLine )。List 的另一个应用就是消息队列,可以利用 List 的 PUSH 操作,将任务存在 List 中,然后工作线程再用 POP 操作将任务取出进行执行。

一个List类型的实例,列表包含的元素,相同元素可以重复出现:

需要注意的是:一个List结构可以有序的存储多个字符串,并且是允许元素重复的。

(1)常用命令如下:

LPUSH和RPUSH命令分别用于将元素推入列表的左端和右端;LPOP和RPOP命令分别用于从列表的左端和右端弹出元素,也就是删除元素;

其中对于LRANGE命令来说,使用0位范围的起始索引,-1为范围的结束索引,可以取出列表包含元素的所有元素。

(2)除了上边比较常用的命令之外,Redis列表还可以从列表里边移除元素、将元素插入列表中间、将列表修剪至指定长度的命令,以及一些其他命令。

(3)使用场景:

  • 微博 TimeLine
  • 消息队列

四、Set集合类型

Redis的集合和列表都可以存储多个字符串,他们的不同支持在于,列表可以存储多个相同的字符串,而集合通过使用散列表来保证自己存储的每个字符串都是各不相同的。

Redis的集合使用的是无序的方式存储元素,所以不可以像List列表那样,将元素推入集合的某一端,或者从集合的某一端弹出元素。

一个Set集合类型的实例,各不相同的元素,无序排列:

(1)常用命令如下:

(2)除了常见的命令之外,还有交集、并集、差集的计算,如下:

(3)使用场景:

  • 共同好友、二度好友
  • 利用唯一性,可以统计访问网站的所有独立 IP
  • 好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐

五、Hash散列类型

Redis的散列可以存储多个键值对之间的映射。和字符串一样,散列存储的值既可以是字符串又可以是数字值,并且用户同样可以对散列存储的数字执行自增操作或者是自减操作。

一个List散列类型的实例,是一个包含两个键值对的散列键:

(1)常用命令如下:

(2)其他命令包含添加和删除键值对的命令、获取所有键值对的命令、以及对键值对的值进行自增和自减操作的命令,如下所示:

六、Redis的有序集合ZSet数据类型

有序集合和散列一样,用于存储键值对;有序集合的键被称为成员member,每一个成员都是独一无二的;而有序集合的值被称为分值score,分值必须是浮点数。

有序集合是Redis里面唯一一个既可以根据成员访问元素,又可以根据分值以及分值的排序来访问元素的结构。

一个有序集合类型的实例,zset-key是一个包含两个元素的有序集合键:

常用命令如下:

读者福利

欢迎工作一到五年的Java工程师朋友们加入Java高级架构交流学习:867923845

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

转载于:https://juejin.im/post/5cc450d9f265da0384129646

Redis常见的5种不同的数据类型详解相关推荐

  1. Redis(四):String字符串数据类型详解

    Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下: redis 127.0.0.1:6379> COMMAND KEY_NAME 1.String类型的常用命令 ...

  2. DDOS攻击器常见的三种DDoS攻击方式详解

    一流的攻击速度以及强大的隐蔽性能,使得DDOS集合了市面上所有攻击软件优点成为了最热的攻击方式.接下来本文将简单的介绍一下三种最为流行的DDOS攻击方式. SYN/ACK Flood攻击: 这种攻击方 ...

  3. Redis(六):Set集合数据类型详解

    Redis 的 Set 是 String 类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1). 集 ...

  4. Redis(五):List集合数据类型详解

    Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个 ...

  5. 共享打印机无法打印?常见的12种解决方法【详解】

    共享打印机无法打印 怎么办? 平常工作的时候多少都会用打印机,打印机要是不工作,没法打印是很头疼的事.下面,我们就来看看共享打印机无法打印的10种解决方法,一起来了解下. 一般办公室的打印机都会设置成 ...

  6. Redis入门 - 数据类型:5种基础数据类型详解

    Redis所有的key(键)都是字符串.我们在谈基础数据结构时,讨论的是存储值的数据类型,主要包括常见的5种数据类型,分别是:String.List.Set.Zset.Hash Redis入门 - 数 ...

  7. Redis数据类型详解(五种)

    Redis支持五种数据类型,即string(字符串).hash(哈希).list(列表).set(集合)及zset(sorted set:有序集合),云吞铺子分享Redis数据类型谅解: Redis数 ...

  8. redis 数据类型详解 以及 redis适用场景场合

    redis 数据类型详解 以及 redis适用场景场合 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访 ...

  9. python六大数据类型详解

    python 六大数据类型详解 文章目录 python 六大数据类型详解 数据类型简介 Number(数值) String(字符串) Python字符串的45个方法详解 一.大小写转换 01.capi ...

  10. mysql权限和使用注意事项及mysql 数据类型详解和innodb,myisam区别

    mysql用户权限管理(Grant,Revoke) MySQL可以为不同的用户分配严格的.复杂的权限.这些操作大多都可以用SQL 指令Grant(分配权限)和Revoke(回收权限)来实现. Gran ...

最新文章

  1. 谷歌发布史上最强人类大脑「地图」,1.3亿个突触,在线可视3D神经元「森林」!...
  2. error: jump to label [-fpermissive]
  3. python re库函数_python re库的正则表达式学习笔记
  4. SQL SERVER 2012 OBJECT_ID
  5. python语言的两种注释方法_python编程时添加中文注释的方法
  6. 十三种技术文档模板_在线文档,知多少?
  7. すぬけ君の地下鉄旅行 / Snuke's Subway Trip(AtCoder-2069)
  8. 怎么配置服务器php环境,配置PHP服务器环境步骤详解
  9. el-table使用图片实例代码
  10. MAC maven 安装和配置
  11. Chrome 自动播放m3u8
  12. Windows 的数据恢复工具
  13. 申请苹果开发者公司账号和邓白氏编码全流程
  14. ps裁剪和裁切的区别_ps裁剪工具怎么用?调整图像与画布的尺寸(三)
  15. oa项目经验描述_(完整版)简历中的项目经验范文
  16. 3.2计算机网络(停止-等待协议 后退N帧协议 选择重传协议)
  17. 广发样样行这样做可以提额
  18. linux sudo命令全称,你知道Linux系统中的sudo 命令吗?
  19. 【Echarts】数值标签在柱状图上的横向纵向样式调整及数值标签超出图表范围向柱体内部调整移动
  20. Python画爱心——一颗会跳动的爱心~

热门文章

  1. thinkphp3.2.3 bug集锦
  2. Vue集成微信开发趟坑:公众号以及JSSDK相关
  3. 浅谈压缩感知(二十九):压缩感知算法之迭代硬阈值(IHT)
  4. U盘做启动盘后,如何恢复原始容量
  5. 雨林木风windows7旗舰版
  6. [洛谷P3181][HAOI2016]找相同字符
  7. window - 安装 tomcat
  8. Elasticsearch 系列4 --- Windows10安装Kibana
  9. 安卓中的数据存储方式以及ContentProvider的简单介绍
  10. Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx