Redis支持的键值数据类型如下:

  • 字符串类型
  • 散列类型
  • 列表类型
  • 集合类型
  • 有序集合类型

 一、字符串类型

字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。一个字符串类型键允许存储的数据最大容量是512MB.

1、字符串常用命令

1.1 赋值与取值

SET key value

GET key

示例如下:

提示:Redis对于键的命名没有强制要求,但比较好的实践使用"对象类型:对象ID:对象属性"来命名,对于多个单词则推荐使用“.”分隔.

1.2 数字递增

INCR key

当存储的字符串是整数形式时,可通过INCR命令让当前键值递增,并返回递增后的值,示例如下:

INCRBY key increment

INCRBY命令与INCR命令基本一样,前者可以通过increment参数指定增加的数值,示例如下:

1.3 数字递减

DECR key

DECRBY key decrement

DECR命令是让当前键值递减,DECREBY命令可指定减少的数值,与INCRBY命令用法相同,示例如下:

1.4 增加指定浮点数

INCRBYFLOAT key increment

INCRBYFLOAT命令用于递增一个双精度浮点数,示例如下:

1.5 向尾部追加值

APPEND key value

APPEND作用是向键值的末尾追加value值,如果键不存在则将改键的值设置为value,返回值是追加字符串后的总长度。示例:

1.6 获取字符串长度

STRLEN key

STRLEN命令返回键值的长度,如果键不存在则返回0,示例:

1.7 同时获取/设置多个键值

MGET key [key...]

MSET key value [key value...]

可以分别使用MGET和MSET命令获取或者设置多个键的键值,示例:

二、散列类型

散列类型的键值是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型。散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,字段值则存储属性值。例如要存储ID为2的汽车对象,可以设置键为car:2,键值为name:"奥迪",其中键值中"name"为字段,"奥迪"为字段值。

1、散列常用命令

1.1 赋值与取值

HSET key field value

HGET key field

这两个命令分别用来给字段赋值和获得字段的值,HSET命令不区分是对字段的插入还是更新操作,当字段不存在时为插入操作,当字段存在时为更新操作,示例如下:

提示:在Redis中每个键都属于一个明确的数据类型,如通过HSET命令建立的键是散列类型,通过SET命令建立的键是字符串类型等。使用一个数据类型的命令操作另一种数据类型的键会提示错误:(error) WRONGTYPE Operation against a key holding the wrong kind of value。但也不是所有命令都是如此,如SET命令可以覆盖已经存在的键,不论键原来是什么类型。

HMSET key field value [field value ...]

HMGET key field [field ...]

当需要同时设置或获取多个字段的值时,可以使用HMSET/HMGET命令,示例如下:

HGETALL key

HGETALL命令可以获取键中的所有字段和字段值,示例如下:

1.2 判断字段是否存在

HEXISTS key field

HEXISTS命令用来判断一个字段是否存在,存在则返回1,否则返回0,示例如下:

1.3 当字段不存在时赋值

HSETNX key field value

如果字段已经存在,HSETNX命令将不执行任何操作,示例如下:

1.4 增加数字

HINCRBY key field increment

HINCRBY命令可使字段增加指定的整数,示例如下:

1.5 删除字段

HDEL key field [field ...]

HDEL命令可以删除一个或多个字段,返回值是被删除的字段个数,示例如下:

1.6 只获取字段名或字段值

HKEYS key

HVALS key

1.7 获取字段数量

HLEN key

三、 列表类型 

  列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。列表类型内部是使用双向链表实现的,所以向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度越快。

1、列表常用命令

1.1 向列表两端增加元素

LPUSH key value [value ... ]

RPUSH key value [value ... ]

LPUSH命令和RPUSH命令分别用来向列表左边和右边增加元素,返回值表示增加元素后的列表长度,示例如下:

1.2 从列表两端弹出元素

LPOP key

RPOP key

LPOP命令可以从列表的左边弹出一个元素,LPOP命令执行步骤:第一步是将列表左边的元素从列表中移除,第二步是返回被移除的元素值,RPOP命令类似,示例如下:

1.3 获取列表中元素的个数

LLEN key

当键不存在时LLEN会返回0,示例如下:

1.4 获取列表片段

LRANGE key start stop

LRANGE命令能够获取列表中的某一片段,返回索引从start到stop之间的所有元素(包括两端的元素),Redis的列表起始索引为0。

LRANGE命令也支持负索引,表示从右边开始取数,如"-1"表示最右边第一个元素,依次类推。

注意两种特殊情况:

(1)如果start的索引位置比stop的索引位置靠后,则会返回空列表

(2)如果stop大于实际的索引范围,则会返回到列表最右边的元素

1.5 删除列表中指定的值

LREM key count value

LREM命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数,根据count值的不同,LREM命令的执行方式会有差异:

(1)当count>0时LREM命令会从列表左边开始删除前count个值为value的元素;

(2)当count<0时LREM命令会从列表右边开始删除前|count|个值为value的元素;

(3)当count=0时LREM命令会删除所有为value的元素。

 1.6 获取/设置指定索引的元素值

LINDEX key index

LSET key index value

LINDEX命令用来返回指定索引的元素,索引从0开始

如果index是负数则表示从右边开始计算的索引,最右边元素的索引为-1

LSET命令是为指定索引设置值

1.7 只保留列表指定片段

LTRIM key start end

LTRIM命令可以删除指定索引范围之外的所有元素,示例:

1.8 向列表中插入元素

LINSERT key BEFORE|AFTER pivot value

LINSERT命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定value插入到该元素的前面还是后面,返回值是插入后列表的元素个数

1.9 将元素从一个列表转到另一个列表中

RPOPLPUSH source destination

RPOPLPUSH命令会先从source列表的右边弹出一个元素,然后将其加入到destination列表的左边,并返回这个元素的值,整个过程是原子的。

当把列表类型作为队列使用时,RPOPLPUSH命令可以很直观地在多个队列中传递数据。当source和destination相同时,RPOPLPUSH命令会不断地将队尾地元素移到队首。

 四、集合类型

  集合中的每个元素都是唯一的,且没有顺序。集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,且多个集合之间还可以进行并集、交集和差集运算。

1、集合常用命令

1.1 增加/删除元素

SADD key member [member ... ]

SREM key member [member ... ]

SADD命令用来向集合中增加一个或多个元素,如果键不存在则会自动创建。因为集合中的元素是唯一的,如果要加入的元素已经存在于集合中就会忽略这个元素,返回值是成功加入的元素数量。

SREM命令用来从集合中删除一个或多个元素,并返回成功删除的元素个数。

1.2 获取集合中的所有元素

SMEMBERS key

SMEMBERS命令会返回集合中的所有元素,示例如下:

1.3 判断元素是否存在集合中

SISMEMBER key member

1.4 集合间运算

SDIFF key [key ... ]

SDIFF命令用来对多个集合执行差集运算。集合A与集合B的差集表示为A-B,代表所有属于A且不属于B的元素构成的集合,示例如下:

SDIFF命令还支持同时传入多个键

SINTER key [key ... ]

SINTER命令用来对多个集合执行交集运算。

SUNION key [key ... ]

SUNION命令用来对多个集合执行并集运算。

1.5 获取集合中元素个数

SCARD key

SCARD命令用来获取集合中的元素个数。

1.6 进行集合运算并将结果存储

SDIFFSTORE destination key [key .... ]

SINTERSTORE destination key [key ... ]

SUNIONSTORE destination key [key ... ]

SDIFFSTORE命令和SDIFF命令类似,区别在于SIDFFSTORE命令不会直接返回运算结果,而是将结果存储在destination键中,常用于需要进行多步集合运算的场景中,如需要先计算差集再将结果和其他键计算交集等。

1.7 随机获取集合中的元素

SRANDMEMBER key [count]

SRANDMEMBER命令用来随机从集合中获取一个元素,如:

还可以根据count参数来一次随机获取count个元素,根据count的正负不同,表现不同。

(1)当count为正数时,SRANDMEMBER会随机从集合中获取count个不重复的元素。如果count的值大于集合中的元素个数,则返回集合中的所有元素

(2)当count为负数时,SRANDMEMBER会随机从集合中获取|count|个元素,元素有可能相同。

1.8 从集合中弹出一个元素

SPOP key

SPOP命令会从集合中随机选择一个元素弹出。

五、有序集合类型

1、介绍

  在集合的基础上,有序集合类型为集合中的每个元素都关联了一个分数,使得我们不仅可以完成插入、删除元素和判断元素是否存在等类型的操作,还能够获得分数最高的前N个元素、获得指定分数范围内的元素等与分数有关的操作。

2、有序集合与列表的区别

(1)列表类型是通过链表实现的,获取靠近两端的数据速度较快,而当元素增多后,访问中间数据的速度会较慢,所以更适合实现如“新鲜事”、“日志”这样很少访问中间元素的应用。

(2)有序集合类型是使用散列表和跳跃表实现的,所以即使读取位于中间部分的数据速度也很快。

    提示:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。

(3)列表中不能简单地调整某个元素的位置,有序集合可通过更改元素的分数进行调整。

(4)有序集合比列表类型更耗费内存。

3、有序集合常用命令

 3.1 增加元素

ZADD key score member [score member ... ]

ZADD命令用来向有序集合中加入一个元素和该元素的分数,如果元素已经存在,则会用新的分数替换原来的分数。返回值是加入到集合中的元素个数。

 3.2 获取元素的分数

ZSCORE key member

3.3 获取排名在某个范围内的元素列表

ZRANGE key start stop [WITHSCORES]

ZREVRANGE key start stop [WITHSCORES]

ZRANGE命令会按照元素分数从小到大返回索引从start到stop之间的所有元素(包含两端的元素,同时支持负数索引)。

如果需要在获取元素的同时获得元素的分数,可在ZRANGE命令后加上WITHSCORES参数。

如果两个元素的分数相同,Redis会按照字段顺序进行排序("0"<"9"<"A"<"Z"<"a"<"z")

3.4 获取指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

ZRANGEBYSCORE命令按照元素分数从小到大的顺序返回分数在min和max之间的元素(包含min和max)。

如果希望分数范围不包含端点值,可以在分数前加上"("符号,示例如下:

[LIMIT offset count]参数的作用:在获取的元素列表的基础上向后偏移offset个元素,并且只获取前count个元素。

 3.5 增加某个元素的分数

ZINCRBY key increment member

ZINCRBY命令可以增加一个元素的分数,返回值是更改后的分数。如果指定元素不存在,Redis在执行命令前会先建立它并将它的分数赋值为0再执行操作。

 3.6 获取集合中元素的数量

ZCARD key

 3.7 获取指定分数范围内的元素个数

ZCOUNT key min max

 3.8 删除一个或多个元素

ZREM key member [member ... ]

3.9 按照排名范围删除元素

ZREMRANGEBYRANK key start stop

ZREMRANGEBYRANK命令按照元素分数从小到大的顺序删除处在指定排名范围内的所有元素,并返回删除的元素数量。

3.10 按照分数范围删除元素

ZREMRANGEBYSCORE key min max

3.11 获取元素的排名

ZRANK key member

ZREVRANK key member

ZRANK命令会按照元素分数从小到大的顺序获得指定的元素排名(分数最小的元素排名为0),ZREVRANK命令与之相反(分数最大的元素排名为0)。

 3.12 计算有序集合的交集

ZINTERSTORE destination numkeys key [key ... ] [WEIGHTS weight [weight ... ]] [AGGREGATE SUM|MIN|MAX]

ZINTERSTORE命令用来计算多个有序集合的交集并将结果存在destination键中,返回值为destination键中的元素个数。destination键中的分数是由AGGREAGTE参数决定的。

(1)当AGGREGATE是SUM时,destination键中元素的分数是每个参与计算的集合中的该元素分数的和,默认为SUM。

(2)当AGGREGATE是MIN时,destination键中元素的分数是每个参与计算的集合中的该元素分数的最小值。

(3)当AGGREGATE是MAX时,destination键中元素的分数是每个参与计算的集合中的该元素分数的最大值。

ZINTERSTORE命令还能够通过WEIGHTS参数设置每个集合的权重,每个集合在参与计算时元素的分数被乘上该集合的权重。

ZUNINONSTORE命令用于计算集合的并集,与ZINTERSTORE命令类似。

Redis_数据类型的更多相关文章

  1. Redis_常用5大数据类型简介

    前面介绍了一些redis的的基本配置,以及安装,本文继续学习redis的五大数据类型. 一.Redis的五大数据类型 String(字符串).List(列表).Set(集合).Hash(哈希,类似ja ...

  2. Redis-cluster集群【第一篇】:redis安装及redis数据类型

    Redis介绍: 一.介绍 redis 是一个开源的.使用C语言编写的.支持网络交互的.可以基于内存也可以持久化的Key-Value数据库. redis的源码非常简单,只要有时间看看谭浩强的C语言,在 ...

  3. redis安装及数据类型简介(string、list、set、sorted_set、hash)

    一:简介: redis国内最大的案例--->新浪微博 memcache:是key-value数据库 数据类型:只支持key value数据 过期策略:支持 持久化:不支持(可以通过三方程序) 主 ...

  4. 缓存系列之三:redis安装及基本数据类型命令使用

    一:Redis是一个开源的key-value存储系统.与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串.哈希表.链表.集合.有序集合以及基于这些数据类型的相关操 ...

  5. JavaScript 中的数据类型

    Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...

  6. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

  7. Python高手之路【二】python基本数据类型

    一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...

  8. UniqueIdentifier 数据类型 和 GUID 生成函数

    UniqueIdentifier 数据类型用于存储GUID的值,占用16Byte. SQL Server将UniqueIdentifier存储为16字节的二进制数值,Binary(16),按照特定的格 ...

  9. SQL Server常见数据类型介绍

    数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅. 1.整数类型 int 存储范围是-2,147,483,648到2,147,483 ...

随机推荐

  1. VUE小练习(按钮颜色,数组映射)

    VUE小练习(按钮颜色,数组映射) ## 1.有红.黄.蓝三个按钮,以及一个200x200矩形框box, 点击不同的按钮,box的颜色会被切换成指定的颜色 ''' 解法一:我本来的思路,把三个按钮绑定 ...

  2. 批处理简单命令 start

    start 命令 调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用. 如:start calc.exe 即可打开Windows的计算器. 常用参数: MIN 开始时窗口最小化 S ...

  3. 【灵魂拷问】你为什么要来学习Node.js呢?

    [灵魂拷问]你为什么要来学习Node.js呢? 学习node.js适合的人群: 需要必备一些HTML,CSS,JavaScript及编程有一定程度了解的读者阅读,一些简单的命令行操作,具备服务端开发经 ...

  4. 微信小程序登录那些事

    最近团队在开发一款小程序,都是新手,一边看文档,一边开发.在开发中会遇到各种问题,今天把小程序登录这块的流程整理下,做个记录. 小程序的登录跟平时自己APP这种登录验证还不太一样,多了一个角色,那就是 ...

  5. 仅逗oier们一笑(不定期更新中)(update.2019年12月8日)

    CCF的正确解释: //部分来自:朝阳的二愣子的CSDN博客.ydclyq 的博客 .拱垲的博客.Randolph's Blog. 编译下列程序,会有意想不到的惊喜哦(注意打开声音): #includ ...

  6. Kubernetes 1.13 正式发布,功能亮点一览!

    Kubernetes 1.13 正式发布,功能亮点一览!   Kubernetes 1.13 正式GA,这是2018年发布的第四次也是最后一次大版本,1.13也是迄今为止发行最快的版本,仅用10周时间 ...

  7. Java 并发编程-不懂原理多吃亏(送书福利)

    作者 | 加多 关注阿里巴巴云原生公众号,后台回复关键字"并发",即可参与送书抽奖!** 导读:并发编程与 Java 中其他知识点相比较而言学习门槛较高,从而导致很多人望而却步.但 ...

  8. PowerShell的异常处理办法

    $ErrorActionPreference = 'Stop' Try{     # C:\xxx 不存在     Copy-Item C:\xxx -ErrorAction Stop } Catch ...

  9. python接口自动化1-http协议简介

    前言 知道接口测试的小伙伴都应清楚http协议了,如果你还不清楚,那么接口测试做不好,自动化接口就更做不好了.那么做接口测试前先了解下http: HTTP协议(HyperText Transfer P ...

  10. update改数据详解

    update修改数据的要素  : 改哪张表? 改哪几列的值? 分别改成什么值? 在哪些行生效?(这个很重要,否则所有行都会受影响) mysql> update class ; where 表达式 ...