redis支持五种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合sorted set)。
1. string(字符串)
字符串类型是redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据、序列化后的数据、JSON化的对象甚至是一张图片。
string命令 | 说明 |
set key value | 设置指定key的值 |
setex key seconds value | set expire的简写。将值value关联到key,并将key的过期时间设为seconds |
setnx key value | set if not exists的简写。只有在key不存在时设置key的值,key存在时则不设置value值 |
setrange key offset value | 从指定的位置开始将key的值替换为新的字符串, |
msetnx key1 value [key2 value2…] | 同时设置一个或多个 key-value对 |
mset key1 value [key2 value2…] | 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在时才能设置成功;否则只要有一个key存在都会失败 |
getset key value | 将给定key的值设置为value,并返回key的旧值 |
append key value | 如果key存在且是字符串,则将value追加到key原来旧值的末尾。 如果key不存在,则将key设置为value |
get key | 获取指定key的值 |
getrange key start end | 返回key中字符串值从start开始到end结束的子字符串 |
mget key1 [key2…] | 获取所有(1或多个)给定key的值 |
incr key | 将key中存储的数字值增1。若key不存在,则key的值先被初始化为0,再执行incr操作(只能操作数字类型的数据) |
incrby key increment | 将key所存储的值加上增量值。若key不存在,则将key的值先初始化为0,在执行incrby命令 |
decr key | 将key中存储的数字值减1 |
decrby key decrement | 将key所存储的值减去减量值。若key不存在,则将key的值先初始化为0,在执行decrby命令 |
strlen key | 返回key所存储的字符串值的长度 |
2. hash(哈希)
哈希类型是一个string类型的field和value的映射表,hash特别适合用于存储对象。
hash命令 | 说明 |
hset key field value | 将哈希表key中的字段field的值设为value |
hmset key field1 value1 [field2 value2…] | 同时将多个field-value(域值对)设置到哈希表key中 |
hmsetnx key field value | 将哈希表中key中的field域的值设置为value,当且仅当field域不存在的时候才设置;否则不设置 |
hget key field | 获取存储在哈希表中指定字段的值 |
hmget | 获取哈希表中一个或多个给定域的值 |
hgetall key | 获取在哈希表中指定key的所有字段和值 |
hdel key field1 [field2…] | 删除哈希表key中的一个或多个指定域field |
hexists key field | 查看哈希表key中,指定的字段是否存在 |
hkeys key | 查看所有key中的所有field域 |
hvals key | 查看哈希表key中所有field域的值 |
hlen key | 获取哈希表key中field域的数量 |
hincrby key field increment | 为哈希表key中指定的field域的整数值加上增量increment |
hincrbyfloat key field increment | 为哈希表key中指定的field域的浮点数值加上增量increment |
3. list(列表)
list是简单的字符串列表,按照插入顺序排序,值value可以重复。可以添加一个元素到列表的头部(左边)或尾部(右边)
list命令 | 说明 |
lpush key value1 [value2…] | 将一个或多个value插入到列表key的表头(最左边) |
lpushx key value | 将一个值value插入到已存在的列表key的表头,列表不存在时无效 |
rpush key value1 [value2…] | 将一个或多个value插入到列表key的表尾(最右边) |
rpushx key value | 将一个值value插入到已存在的列表key的表尾,列表不存在时无效 |
lrange key start stop | 获取列表key中指定区间(从start开始,到stop结束)内的元素,遵循左闭右闭原则。0表示列表的第一个元素,-1表示列表的最后一个元素。 |
lpop key | 移除并返回列表key的第一个元素 |
rpop key | 移除并返回列表key的最后一个元素 |
rpoplpush source destination | 移除列表key的最后一个元素,并将该元素添加到另一个列表的头元素并返回 |
blpop key1 [key2] timeout | 移除并获取列表的第一个元素,如果列表没有元素会阻塞列表直到timeout等待超时或发现可弹出元素为止 |
blpop key1 [key2] timeout | 移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到timeout等待超时或发现可弹出元素为止 |
brpoplpush source destination timeout | 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
|
lindex key index | 获取列表key中下表为指定index的元素 |
llen key | 获取列表key的长度 |
lrem key count value | 从左到右删除列表key中指定个数且与指定value值相等的值 |
ltrim key start stop | 删除指定区域外的元素。也就是让列表只保留指定区域(从start开始,到stop结束)内的元素,不在指定区域内的元素都将被删除 |
lset key index value | 将列表key中下表为index的元素的值设置为value |
linsert key before|after pivot value | 将值value插入到列表key中位于值pivot之前或之后的位置 |
4. set(集合)
set是string类型的无需集合。集合成员是唯一的,这就以为着集合中不能出现重复的数据。
redis中集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。
set命令 | 说明 |
sadd key member1 [member2…] | 将一个或多个member元素加入到集合key中,已经存在于集合的member元素将不会再加入 |
smemebers key | 获取集合key的所有成员元素 |
sismember key member | 判断member元素是否是集合key的成员 |
scard key | 获取集合key里面的元素个数 |
srem key member1 [member2…] | 删除集合key中的一个或多个member元素 |
srandmember key [count] | 随机返回集合中的count个元素 |
spop key | 随机移除并返回集合中的一个元素 |
smove source destination member | 将member元素从source集合移动到destination集合 |
sinter key1 [key2…] | 返回给定所有集合的交集 |
sinterstore destination key1 [key2…] | 返回给定所有集合的交集并存储在destination中 |
sdiff key1 [key2…] | 返回给定所有集合的差集 |
sdiffstore destination key1 [key2…] | 返回给定所有集合的差集并存储在destination中 |
sunion key1 [key2…] | 返回给定所有集合的并集 |
sunionstore destination key1 [key2…] | 返回所有给定集合的并集并存储在destination中 |
sscan key cursor [match pattern] [count count] | 用于迭代集合中键的元素 |
5. zset(有序集合sorted set)
sorted set和set一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来尾集合中的成员进行从大到小的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
sorted set命令 | 说明 |
zadd key score1 member1 [score2 member2…] | 向有序集合key中添加一个或多个成员,或者更新已存在成员的分数 |
zcard key | 获取有序集合key的成员个数 |
zrem key member1 [member2…] | 移除有序集合key中的一或多个成员 |
zremrangebylex key min max | 移除有序集合key中给定的字典区间内(从min开始,到max结束)的所有成员 |
zremrangebyrank key start stop | 移除有序集合key中给定的排名区间内(从start开始,到stop结束)所有的成员 |
zremrangebyscore key min max | 移除有序集合中给定的分数区间内(从min开始,到max结束)的所有成员 |
zrevrange key start stop [withscores] | 返回有序集合key中指定区间内(从start开始,到stop结束)的成员。通过索引,分数从高到低 |
zrevrangebyscore key max min [withscores] | 返回有序集合key中指定区间内(从max 开始,到min结束)的成员。分数从低到高排序 |
zrevrank key member | 返回有序集合key中指定成员member的排名,有序集合按分数值递减排序 |
zscore key member | 返回有序集合key中member成员的分数值 |
zlexcount key min max | 获取有序集合中指定字典区间内(从min开始,到max结束)的成员数量 |
zincrby key increment member | 向有序集合key中指定成员的的分数加上增量increment |
zrange key start stop [withscores] | 返回有序集合中,指定索引区间内(从start开始,到stop结束)的成员 |
zrangebylex key min max [limit offset count] | 返回有序集合中指定字典区间内(从min开始,到max结束)的成员 |
zrangebyscore key min max [withscores] [limit] | 通过分数返回有序集合中指定区间内从min开始,到max结束)的成员 |
zrank key member | 返回有序集合key中指定成员的索引 |
zinterstore destionation numkeys key1 [key2…] | 返回一个或多个有序集合的交集,并将结果集存储在新的有序集合destionation中 |
zunionstore destionation numkeys key1 [key2…] | 返回一个或多个有序集合的并集,并将结果集存储在新的有序集合destionation中 |
zscan key cursor [match pattern] [count count] | 返回有序集合key中的元素(包括元素成员和元素分值) |