Redis_数据类型

Redis支持的键值数据类型以下:数据结构

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

 

 1、字符串类型app

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

 

一、字符串经常使用命令
日志

 

1.1 赋值与取值对象

SET key valueblog

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命令获取或者设置多个键的键值,示例:


 

2、散列类型

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

 

一、散列经常使用命令

 

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

 

 

3、 列表类型 

  列表类型能够存储一个有序的字符串列表,经常使用的操做是向列表两端添加元素,或者得到列表的某一个片断。列表类型内部是使用双向链表实现的,因此向列表两端添加元素的时间复杂度为O(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命令会不断地将队尾地元素移到队首。

 

 4、集合类型

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

 

一、集合经常使用命令

 

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命令会从集合中随机选择一个元素弹出。

 

 

5、有序集合类型

 

一、介绍

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

 

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

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

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

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

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

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

 

三、有序集合经常使用命令

 

 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命令相似。

相关文章
相关标签/搜索