天天看点

2 Redis常用数据类型以及命令

Redis常用数据类型

       Redis数据结构String、Hash、List、Set、SortedSet及相关操作。

String

      Redis 中最简单的数据结构,它既可以储存文字(比如 "hello world"),又可以储存数字(比如整数 10086 和浮点数 3.14),还可以储存二进制数据(比如 10010100)

编号 命令 描述说明
1 SET key value 此命令设置指定键的值。
2 GET key 获取指定键的值。
3 GETRANGE key start end 获取存储在键上的字符串的子字符串。
4 GETSET key value 设置键的字符串值并返回其旧值。
5 GETBIT key offset 返回在键处存储的字符串值中偏移处的位值。
6 MGET key1 [key2..] 获取所有给定键的值
7 SETBIT key offset value 存储在键上的字符串值中设置或清除偏移处的位
8 SETEX key seconds value 使用键和到期时间来设置值
9 SETNX key value 设置键的值,仅当键不存在时
10 SETRANGE key offset value 在指定偏移处开始的键处覆盖字符串的一部分
11 STRLEN key 获取存储在键中的值的长度
12 MSET key value [key value …] 为多个键分别设置它们的值
13 MSETNX key value [key value …] 为多个键分别设置它们的值,仅当键不存在时
14 PSETEX key milliseconds value 设置键的值和到期时间(以毫秒为单位)
15 INCR key 将键的整数值增加

1

16 INCRBY key increment 将键的整数值按给定的数值增加
17 INCRBYFLOAT key increment 将键的浮点值按给定的数值增加
18 DECR key 将键的整数值减

1

19 DECRBY key decrement 按给定数值减少键的整数值
20 APPEND key value 将指定值附加到键

SET key value [NX|XX]

       SET 命令还支持可选的 NX 选项和 XX 选项:

     • 如果给定了 NX 选项,那么命令仅在键 key 不存在的情况下,才进行设置操作;如果键 key 已经存 在,那么 SET ... NX 命令不做动作(不会覆盖旧值)。

    • 如果给定了 XX 选项,那么命令仅在键 key 已经存在的情况下,才进行设置操作;如果键 key 不存 在,那么 SET ... XX 命令不做动作(一定会覆盖旧值)。  在给定 NX 选项和 XX 选项的情况下,SET 命令在设置成功时返回 OK ,设置失败时返回 nil。

2 Redis常用数据类型以及命令

SETNX key value

仅在键 key 不存在的情况下,将键 key 的值设置为 value ,效果和 SET key value NX 一样。 NX 的意思为“Not eXists”(不存在)。

键不存在并且设置成功时,命令返回 1 ;因为键已经存在而导致设置失败时,命令返回 0 。

复杂度为 O(1) 。

STRLEN key

返回字符串键 key 储存的值的长度。

因为 Redis 会记录每个字符串值的长度,所以获取该值的复杂度为 O(1) 。

索引

    字符串的索引(index)以 0 为开始,从字符串的开头向字符串的结尾依次递增,字符串第一个字符的索 引为 0 ,字符串最后一个字符的索引 为 N-1 ,其中 N 为字符串的长度。

      除了(正数)索引之外,字符串 还有负数索引:负数索引以 -1 为开始,从字符串的结尾向字符串的开头 依次递减,字符串的最后一个字符的索引 为 -N ,其中 N 为字符串的长度。

2 Redis常用数据类型以及命令

SETRANGE key index value

从索引 index 开始,用 value 覆写(overwrite)给定键 key 所储存的字符串值。只接受正数索引。

命令返回覆写之后,字符串 值的长度。复杂度为 O(N), N 为 value 的长度。

GETRANGE key start end

返回键 key 储存的字符串值中,位于 start 和 end 两个索引之间的内容(闭区间,start 和 end 会被包括 在内)。和 SETRANGE 只接受正数索引不同,GETRANGE 的索引可以是正数或者负数。

复杂度为 O(N) , N 为被选中内容的长度。

2 Redis常用数据类型以及命令

数字操作:    

      只要储存在字符串键里面的值可以被解释为 64 位整数,或者 IEEE-754 标准的 64 位浮点数, 那么用户就可以对这个字符串键执行针对数字值的命令。

2 Redis常用数据类型以及命令

如果执行 INCRBY 或者 DECRBY 时,键 key 不存在,那么命令会将键 key 的 值初始化为 0 ,然后再执行增加或者减少操作。

2 Redis常用数据类型以及命令

针对数字值的增一和减一操作非常常见,所以 Redis 特别为这两个操作创建了 INCR 命令和 DECR 命令。

2 Redis常用数据类型以及命令

浮点数的自增和自减

INCRBYFLOAT key increment

为字符串键 key 储存的值加上浮点数增量 increment ,命令返回操作执行之后,键 key 的值。

没有相应的 DECRBYFLOAT ,但可以通过给定负值来达到 DECRBYFLOAT 的效果

二进制位的索引

和储存文字时一样,字符串键在储存二进制位时,索引也是从 0 开始的。

但是和储存文字时,索引从左到右依次递增不同,当字符串键储存的是二进制位时,二进制位的索引会 从左到右依次递减。

2 Redis常用数据类型以及命令

设置二进制位的值

SETBIT key index value

将给定索引上的二进制位的值设置为 value ,命令返回被设置的位原来储存的旧值。

复杂度为 O(1) 。

2 Redis常用数据类型以及命令

获取二进制位的值

GETBIT key index

返回给定索引上的二进制位的值。

复杂度为 O(1) 。

2 Redis常用数据类型以及命令

注意事项

一个英文字符只需要使用单个字节来储存,而一个中文字符却需要使用多个字 节来储存。

2 Redis常用数据类型以及命令

STRLEN、SETRANGE 和 GETRANGE 都是为英文设置的,它们只会在字符为单个字节的情况下正常 工作,而一旦我们储存的是类似中文这样的多字节字符,那么这三个命令就不再适用了。

Hash

一个散列由多个域值对(field-value pair)组成,散列的 域和值都可以是文字、整数、浮点数或者二 进制数据。

序号 命令及描述
1

HDEL key field2 [field2] 

删除一个或多个哈希表字段

2

HEXISTS key field 

查看哈希表 key 中,指定的字段是否存在。

3

HGET key field 

获取存储在哈希表中指定字段的值。

4

HGETALL key 

获取在哈希表中指定 key 的所有字段和值

5

HINCRBY key field increment 

为哈希表 key 中的指定字段的整数值加上增量 increment 。

6

HINCRBYFLOAT key field increment 

为哈希表 key 中的指定字段的浮点数值加上增量 increment 。

7

HKEYS key 

获取所有哈希表中的字段

8

HLEN key 

获取哈希表中字段的数量

9

HMGET key field1 [field2] 

获取所有给定字段的值

10

HMSET key field1 value1 [field2 value2 ] 

同时将多个 field-value (域-值)对设置到哈希表 key 中。

11

HSET key field value 

将哈希表 key 中的字段 field 的值设为 value 。

12

HSETNX key field value 

只有在字段 field 不存在时,设置哈希表字段的值。

13

HVALS key 

获取哈希表中所有值

14

HSCAN key cursor [MATCH pattern] [COUNT count] 

迭代哈希表中的键值对。

hset key field value

hget key field

hsetnx key field value

hexists key field

hdel key field [field ...]

hlen key

2 Redis常用数据类型以及命令

批量操作

2 Redis常用数据类型以及命令

获取散列包含的所有域、值、或者域值对

2 Redis常用数据类型以及命令
2 Redis常用数据类型以及命令

List 

1

BLPOP key1 [key2 ] timeout 

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

2

BRPOP key1 [key2 ] timeout 

移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

3

BRPOPLPUSH source destination timeout 

从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

4

LINDEX key index 

通过索引获取列表中的元素

5

LINSERT key BEFORE|AFTER pivot value 

在列表的元素前或者后插入元素

6

LLEN key 

获取列表长度

7

LPOP key 

移出并获取列表的第一个元素

8

LPUSH key value1 [value2] 

将一个或多个值插入到列表头部

9

LPUSHX key value 

将一个值插入到已存在的列表头部

10

LRANGE key start stop 

获取列表指定范围内的元素

11

LREM key count value 

移除列表元素

12

LSET key index value 

通过索引设置列表元素的值

13

LTRIM key start stop 

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

14

RPOP key 

移除并获取列表最后一个元素

15

RPOPLPUSH source destination 

移除列表的最后一个元素,并将该元素添加到另一个列表并返回

16

RPUSH key value1 [value2] 

在列表中添加一个或多个值

17

RPUSHX key value 

为已存在的列表添加值

LREM key count value

根据参数count的值  ,移除列表中与参数value相等的列表项

如果count>0,那么冲表头开始向表尾搜索,移除最多count个值为value的列表项。

如果count=0,那么冲表头开始向表尾搜索,移除所有值为value的列表项。

如果count<0,那么冲表头开始向表尾搜索,移除最多abs(count)个值为value的列表项。

修改列表

LTRIM key start stop

只保留索引范围内的列表项。

阻塞弹出命令

2 Redis常用数据类型以及命令
2 Redis常用数据类型以及命令

Set

      Redis集合以无序的方式存储多个不相同的元素。用户可以快速地向集合中添加元素或者删除元素,也可以对多个集合进行集合运算,如交集、并集、差集。

序号 命令及描述
1

SADD key member1 [member2] 

向集合添加一个或多个成员

2

SCARD key 

获取集合的成员数

3

SDIFF key1 [key2] 

返回给定所有集合的差集

4

SDIFFSTORE destination key1 [key2] 

返回给定所有集合的差集并存储在 destination 中

5

SINTER key1 [key2] 

返回给定所有集合的交集

6

SINTERSTORE destination key1 [key2] 

返回给定所有集合的交集并存储在 destination 中

7

SISMEMBER key member 

判断 member 元素是否是集合 key 的成员

8

SMEMBERS key 

返回集合中的所有成员

9

SMOVE source destination member 

将 member 元素从 source 集合移动到 destination 集合

10

SPOP key 

移除并返回集合中的一个随机元素

11

SRANDMEMBER key [count] 

返回集合中一个或多个随机数

12

SREM key member1 [member2] 

移除集合中一个或多个成员

13

SUNION key1 [key2] 

返回所有给定集合的并集

14

SUNIONSTORE destination key1 [key2] 

所有给定集合的并集存储在 destination 集合中

15

SSCAN key cursor [MATCH pattern] [COUNT count] 

迭代集合中的元素

2 Redis常用数据类型以及命令

Zset

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

2

ZCARD key 

获取有序集合的成员数

3

ZCOUNT key min max 

计算在有序集合中指定区间分数的成员数

4

ZINCRBY key increment member 

有序集合中对指定成员的分数加上增量 increment

5

ZINTERSTORE destination numkeys key [key ...] 

计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

6

ZLEXCOUNT key min max 

在有序集合中计算指定字典区间内成员数量

7

ZRANGE key start stop [WITHSCORES] 

通过索引区间返回有序集合成指定区间内的成员

8

ZRANGEBYLEX key min max [LIMIT offset count] 

通过字典区间返回有序集合的成员

9

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 

通过分数返回有序集合指定区间内的成员

10

ZRANK key member 

返回有序集合中指定成员的索引

11

ZREM key member [member ...] 

移除有序集合中的一个或多个成员

12

ZREMRANGEBYLEX key min max 

移除有序集合中给定的字典区间的所有成员

13

ZREMRANGEBYRANK key start stop 

移除有序集合中给定的排名区间的所有成员

14

ZREMRANGEBYSCORE key min max 

移除有序集合中给定的分数区间的所有成员

15

ZREVRANGE key start stop [WITHSCORES] 

返回有序集中指定区间内的成员,通过索引,分数从高到底

16

ZREVRANGEBYSCORE key max min [WITHSCORES] 

返回有序集中指定分数区间内的成员,分数从高到低排序

17

ZREVRANK key member 

返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

18

ZSCORE key member 

返回有序集中,成员的分数值

19

ZUNIONSTORE destination numkeys key [key ...] 

计算给定的一个或多个有序集的并集,并存储在新的 key 中

20

ZSCAN key cursor [MATCH pattern] [COUNT count] 

迭代有序集合中的元素(包括元素成员和元素分值)

2 Redis常用数据类型以及命令

Redis Key操作

命令 描述 用法
DEL

(1)删除给定的一个或多个key

(2)不存在的Key将被忽略

DEL key [key ...]
EXISTS (1)检查给定key是否存在 EXISTS key
EXPIRE

(1)为给定key设置生存时间,key过期时它会被自动删除

(2)对一个已经指定生存时间的Key设置执行EXPIRE,新的值会代替旧的值

EXPIRE key seconds
EXPIREAT (1)同EXPIRE,但此命令指定的是UNIX时间戳,单位为秒 EXPIRE key timestamp
KEYS

(1)查找所有符合给定模式pattern的key,下面举一下例子

(2)KEYS *匹配所有key

(3)KEYS h?llo匹配hello、hallo、hxllo等

(4)KEYS h*llo匹配hllo、heeeeello等

(5)KEYS h[ae]llo匹配hello和hallo

(6)特殊符号想当做查找内容经的使用\

KEYS pattern
MIGRATE 

 (1)原子性地将key从当前实例传送到目标实例指定的数据库上

(2)原数据库Key删除,新数据库Key增加

(3)阻塞进行迁移的两个实例,直到迁移成功、迁移失败、等待超时三个之一发生

MIGRATE host port key destination-db timeout [COPY] [REPLACE] 
 MOVE

 (1)将当前数据库的key移动到给定数据库的db中

(2)执行成功的条件为当前数据库有key,给定数据库没有key

MOVE key db 
PERSIST   (1)移除给定key的生存时间,将key变为持久的 PERSIST key
RANDOMKEY  (1)从当前数据库随机返回且不删除一个key, RANDOMKEY 
RENAME

(1)将key改名为newkey

(2)当key和newkey相同或key不存在,报错

(3)newkey已存在,RENAME将覆盖旧值

RENAME key newkey
TTL (1)以秒为单位,返回给定的key剩余生存时间 TTL key
PTTL (1)以毫秒为单位,返回给定的key剩余生存时间 PTTL key
TYPE (1)返回key锁存储的值的类型 TYPE key

系统相关命令

命令 描述 用法
BGREWRITEAOF (1)手动触发AOF重写操作,用于减小AOF文件体积 BGREWRITEAOF
BGSAVE (1)后台异步保存当前数据库的数据到磁盘 BGSAVE
CLIENT KILL

(1)关闭地址为ip:port的客户端

(2)由于Redis为单线程设计,因此当当前命令执行完之后才会关闭客户端

CLIENT KILL ip:port
CLIENT LIST (1)以可读的格式,返回所有连接到服务器的客户端信息和统计数据 CLIENT LIST
CONFIG GET

(1)取得运行中的Redis服务器配置参数

(2)支持*

CONFIG GET parameter
CONFIG RESETSTAT (1)重置INFO命令中的某些统计数据,例如Keyspace hits、Keyspace misses等 CONFIG RESETSTAT
CONFIG REWRITE (1)对启动Redis时指定的redis.conf文件进行改写 CONFIG REWRITE
CONFIG SET

(1)动态调整Redis服务器的配置而无需重启

(2)修改后的配置立即生效

CONFIG SET parameter value
SELECT

(1)切换到指定数据库,数据库索引index用数字指定,以0作为起始索引值

(2)默认使用0号数据库

SELECT index
DBSIZE (1)返回当前数据库的Key的数量 DBSIZE
DEBUG OBJECT

(1)这是一个调试命令,不应当被客户端使用

(2)key存在时返回有关信息,key不存在时返回错误

DEBUG OBJECT key
FLUSHALL (1)清空整个Redis服务器的数据 FLUSHALL
FLUSHDB (1)清空当前数据库中的所有数据 FLUSHDB
INFO

(1)以一种易于解释且易于阅读的格式,返回Redis服务器的各种信息和统计数值

(2)通过给定可选参数section,可以让命令只返回某一部分信息

INFO [section]
LASTSAVE (1)返回最近一次Redis成功将数据保存到磁盘上的时间,以UNIX时间戳格式表示 LASTSAVE
MONITOR (1)实时打印出Redis服务器接收到的命令,调试用 MONITOR
SHUTDOWN

(1)停止所有客户端

(2)如果至少有一个保存点在等待,执行SAVE命令

(3)如果AOF选项被打开,更新AOF文件

(4)关闭Redis服务器

SHUTDOWN [SAVE|NOSAVE]

Redis事务机制

Redis的事务是由DISCARD、EXEC、MULTI、UNWATCH、WATCH五个命令来保证的。

命令 描述 用法
DISCARD

(1)取消事务

(2)如果正在使用WATCH命令监视某个/某些key,那么取消所有监视,等同于执行UNWATCH

DISCARD
EXEC

(1)执行所有事务块内的命令

(2)如果某个/某些key正处于WATCH命令监视之下且事务块中有和这个/这些key相关的命令,那么EXEC命令只在这个/这些key没有被其他命令改动的情况下才会执行并生效,否则该事务被打断

EXEC
MULTI

(1)标记一个事务块的开始

(2)事务块内的多条命令会按照先后顺序被放入一个队列中,最后由EXEC命令原子性地执行

MULTI
UNWATCH

(1)取消WATCH命令对所有key的监视

(2)如果WATCH之后,EXEC/DISCARD命令先被执行了,UNWATCH命令就没必要执行了

UNWATCH
WATCH (1)监视一个/多个key,如果在事务执行之前这个/这些key被其他命令改动,那么事务将被打断 WATCH key [key ...]

事务没有被打断的情况:

2 Redis常用数据类型以及命令

看到开启事务之后,所有的命令返回的都是QUEUED,即放入队列,而不是直接执行。

数据库类似的,事务保证的是两点:

    隔离,所有命令序列化、按顺序执行,事务执行过程中不会被其他客户端发来的命令打断

    原子性,事务中的命令要么全部执行,要么全部不执行

继续阅读