Redis常用数据结构和命令

1. Redis数据结构

Redis可以存储键与5种不同数据结构类型之间的映射,分别为string(字符串)、list(列表)、set(集合)、hash(散列)和zset(有序集合)。日常使用的基本上就是如上的五种常见数据结构。此外,Redis还支持bitmaps(位图), hyperloglogs(超级日志), geospatial indexes with radius queries and streams(具有半径查询和流的地理空间索引)。

下面引用《Redis实战》的表格,介绍五种常见的数据结构

结构类型 结构存储的值 结构的读写能力
STRING 可以是字符串、整数或浮点数 对整个字符串或者字符串的其中一部分执行操作;对整数和浮点数执行自增(increment)或者自减(decrement)
LIST 一个链表,链表上的每个节点都包含一个字符串 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值查找或者移除元素。
SET 包含字符串的无序收集器(unordered collection),并且被包含的每个字符串都是独一无二、各不相同的 添加、获取、移除单个元素;检查一个元素是否存在于集合中;计算交集、并集、差集;从集合里面随机获取元素。
HASH 包含键值对的无序散列表 添加、获取、移除单个键值对;获取所有键值对。
ZSET(有序集合) 字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定 添加、获取、删除单个元素;根据分值范围(range)或者成员来或许元素。
  • string:字符串类型是非常常见的一种类型,Redis中的字符串类型和很多编程语言里的字符串类型差不多,但相对要灵活些。字符串可以存储以下三种类型:

    • 字符串(字节组成的序列)
    • 整数
    • 浮点数

    当字符串中的值可以被解释成十进制数或者浮点数的时候,Redis就会发现这一点,并允许用户对这个字符串进行各种增(incr*)、减(decr*)操作。如果对一个不存在的键或者保存了空串的键进行增减操作,则Redis会将其值当做0来处理。如果值无法被解释为整数或浮点数,Redis将向用户返回一个错误。

  • list:列表可以看作是个双端队列,可以在列表两端推入和弹出元素。对列表的不同操作可以实现其他编程语言中的堆栈(同一端进出)和队列(一端进,另一端出)数据结构。

  • set:集合最显著的特点应该就是其中的元素互不相同。用户可以快速对集合进行插入,删除,检查某元素是否在集合中的操作。此外,多个集合间也能很方便的执行交、并、差集运算。

  • zset:有序集合存储着成员与分值(权值,在Redis中以IEEE 754双精度浮点数的格式存储)之间的映射,并且提供了分值处理命令。适用于按照权值获取元素的情况。如热门帖子获取、基于投票数排序文章等。

  • hash:Redis中的散列可以让用户将多个键值对存储到一个Redis键中,可以把这种数据聚集看作是关系数据库中的行,或者文档数据库中的文档。

2. Redis常用命令

2.1 key的有关命令

命令 操作
exists key 测试指定key是否存在
del key1 [key2 ...] 删除给定key
type key 返回给定key的类型
keys pattern 以正则表达式的形式,返回匹配的所有key
rename oldkey newkey 修改key的名字
dbsize 查看数据库中key的数量(并不是所谓的大小)
expire key seconds 为key指定过期时间,到期自动删除
ttl key 查看key的剩余时间
select index 选择数据库(默认16个数据库,index为0-15)
move key index 将key移动到指定数据库
flushdb 清空当前数据库key
flushall 清空所有数据库key

2.2 string的有关命令

命令 操作
set key value 设置key对应的值为string类型的value
mset key1 value1 [key2 value2...] 一次设置多个key
get key 获取指定key的value值
mget key1 [key2 ...] 一次获取多个key的value值
incr key 对key的值做自增操作,返回新的值
decr key 对key的值做自减操作,返回新的值
incrby key integer 对key的value加指定integer
decrby key integer 对key的value减指定integer
append key value 给指定key的字符串追加value
substr key start end 截取key,从start(包含)到end(包含)。注意只是返回截取的value,源value并没改变

2.3 list的有关命令

命令 操作
lpush key value1 [value2...] 在key对应的list的头部(左端)添加元素
rpush key value1 [value2...] 在key对应的list的尾部(右端)添加元素
lpop key 移除并返回key对应的list的头部(左端)元素
rpop key 移除并返回key对应的list的尾部(右端)元素
lindex key offset 返回列表中偏移量为offset的元素
lrange key start end 返回列表中从start偏移量到end偏移量中的元素,包含两个端点元素(只返回,原list不变)
ltrim key start end 对列表进行修剪,只保留从start偏移量到end偏移量的元素,包含两个端点
llen key 返回对应列表的长度

此外,list还包含一些阻塞式的命令以及在列表之间移动元素的命令:

命令 操作
blpop key1 [key2...] timeout 从第一个非空列表中弹出位于头部(左端)的元素,或者在timeout秒内阻塞并等待可弹出元素的出现
brpop key1 [key2...] timeout 从第一个非空列表中弹出位于尾部(右端)的元素,或者在timeout秒内阻塞并等待可弹出元素的出现
rpoplpush source-key dest-key 从source-key列表中弹出位于最右端的元素,然后把这个元素插入dest-key列表的最左端,并向用户返回该元素
brpoplpush source-key dest-key timeout 从source-key列表中弹出位于最右端的元素,然后把这个元素插入dest-key列表的最左端,并向用户返回该元素。如果source-key为空,则在timeout秒内阻塞并等待可弹出元素的出现

2.4 set的有关命令

命令 操作
sadd key value1 [value2...] 将一个或多个元素添加到集合中,并返回添加成功的元素的个数
srem key value1 [value2...] 从集合中移除一个或多个元素,返回移除成功的元素的个数
sismember key value 检查元素value是否在集合key中,存在返回1,不存在返回0
scard key 返回集合包含的元素个数
smembers key 返回集合包含的全部元素
srandmember key [count] 随机返回集合中的一个或多个元素。当count为正数时,返回的元素不会重复;当count为负数时,返回的元素有可能会重复
spop key 随机移除集合中的某个元素,被返回给用户
smove source-key des-key value 如果集合source-key中包含元素value,则移除它,并添加到dest-key中;成功移除并添加则返回1,否则返回0

处理多个集合的常用命令:

命令 操作
sdiff key1 [key2...] 返回所有集合的差集
sdiffstore dest-key key1 [key2...] 将计算所得的差集中的元素添加到dest-key中
sinter key1 [key2...] 返回所有集合的交集
sinterstore dest-key key1 [key2...] 将计算所得的交集中的元素添加到dest-key中
sunion key1 [key2...] 返回所有集合的并集
sunionstore dest-key key1 [key2...] 将计算所得的并集中的元素添加到dest-key中

2.5 zset的有关命令

命令 操作
zadd key score1 member1 [score2 member2 ... ] 将带有给定分值的成员你添加到有序集合中。注意分值在前,成员在后
zrem key member1 [member2 ... ] 从有序集合中删除指定成员,并返回成功删除的元素个数
zcard key 返回有序集合包含的成员个数
zincrby key increment member 给指定成员的分值加上increment
zcount key min max 返回分值介于min和max之间的成员数量
zrank key memeber 返回指定成员在有序集合中的排名,成员按照score从小到大排序
zrevrank key memeber 返回指定成员在有序集合中的排名 ,成员按照score从大到小排序
zscore key member 返回指定成员的分值
zrange key start stop [WITHSCORES] 返回有序集合中排名介于start和stop之间的成员,如果给定了可选的 WITHSCORES选项,则连带成员分值一并返回
zrevrange key start stop [WITHSCORES] 同上,结果按score逆序
zrangebyscore key min max [WITHSCORES] 返回分值介于min和max之间的成员
zremrangebyrank key start stop 删除集合中排名在start和stop之间的成员
zremrangebyscore key min max 删除集合中分值在min和max之间的成员

2.6 hash的有关命令

命令 操作
hset key field value 向散列key中添加一个键值对
hget key field 获取散列key中的一个键的值
hmset key field1 value1 [field2 value2 ...] 向散列key中添加一个或多个键值对
hmget key field1 [field2 ... ] 获取散列key中的一个或多个键的值
hdel key field1 [field2 ... ] 删除散列中的一个或多个键值对,返回成功删除的键值对数量
hlen key 返回散列包含的键值对数量
hincrby key field integer 给散列中指定field的值加上integer
hexists key field 测试指定field是否在散列中存在
hkeys key 返回散列中所有field
hvals key 返回散列中所有value
hgetall key 返回散列中所有键值对

2.7 其他命令

Redis还有许多其他的命令,如发布订阅相关的命令,排序命令,更完整的命令介绍可以查看Redis官网文档或中文版地址。

此外,Redis客户端还提供了 command 命令,可以用来查看命令数组。如:

command命令

特别推荐:Redis客户端还提供了 help 命令,可以查看数据结构的描述( help set ),查看某个命令的具体用法( help zadd ),以及通过 help @group 语法来查看某个命令组( help @set 查看set所有命令)。如:

help命令

此外,Redis客户端还提供了命令智能提示,可以提示用户该命令的具体格式,如,当键入 zadd 时,客户端的智能提示如下:

客户端的智能提示

单纯的记忆命令是没有意义的,应该着重去学习Redis数据结构的概念和含义,具体应用的时候配合使用 help 命令以及官方文档即可。而且Redis的命令基本都是自解释的,基本从字面上就能够了解到该命令的作用。习惯了之后甚至可以自己去猜测需要的命令。

======返回目录======

<<< 上一篇:Redis的安装与配置说明

你可能感兴趣的:(Redis常用数据结构和命令)