Redis基本数据类型
基本数据类型
Redis支持5中数据类型,分别是:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(sorted set:有序集合)。
它们存储的值以及相应的能力如下表所示:
数据结构 | 值 | 读写能力 |
---|---|---|
string | 可以是字符串、整数或者浮点数 | 对整个字符串或者字符串的一部分执行操作;对整数或浮点数执行自增或者自减操作 |
list | 一个链表,链表中的每个节点都包含了一个字符串 | 从立案表的两端推入或弹出元素;根据偏移量对链表进行修剪;读取单个或多个元素;根据值查找或者移除元素 |
set | 包含字符串的无序收集器,并且被包含的每个字符串都是独一无二,各不相同的 | 添加、获取、移除单个元素;检查一个元素是否存在于集合中;计算交集、并集、差集;从集合里面随机获取元素 |
hash | 包含键值对的无序散列表 | 添加、获取、移除单个键值对;获取所有键值对 |
zset | 字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定 | 添加、获取、删除单个元素;根据分值范围或者成员来获取元素。 |
string-字符串
Redis的字符串就是一个由字节组成的序列。
string类型是二进制安全的,在Redis里面,string可以包含任何数据,比如jpg图片或者序列化的对象。
string类型是Redis最基本的数据类型,最大能存储512MB。
字符串可以存储下面3中类型的值:
- 字节串
- 整数
- 浮点数
set
可以用命令set key value
向redis设置一个key为key,value为value的字符串
设置成功之后,redis会返回OK
get
也可以使用命令get key
获取对应key的值
del
使用命令del key
删除key对应的值
key删除之后,再去get的话,就会返回一个nil表示找不到对应的key
incr
将对应键的值加上1
incr key-name
如果一个字符串可以被解释为十进制整数或者是浮点数,那么就可以对其使用命令incr*或者DECR*了。如果key对应的值不存在或者对应的值为空字符串,那么就会被当做整数0来处理。如果对应的字符串不能被解释为整数或者是浮点数,对其进行incr*或者decr*就会出现错误。
decr
将对应键的值减去1
decr key-name
incrby
将对应键的值加上指定的大小
incrby key-name amount
decrby
将对应键的值加上指定的大小
decrby key-name amount
incrbyfloat
将对应键的值,加上指定的浮点数大小
incrbyfloat key-name amount
append
将给定的值追加到键对应的值的末尾
append key-name value
getrange
获取字符串区间范围[start, end]之内的所有字符。
getrange key-name start end
如果start位置小于0,返回空字符串
如果end大于字符串的大小,那只返回到字符串长度的那些字符。
setrange
将从start开始的字串设置为给定的值
setrange key-name start end
getbit
将字符串看作是二进制串,并将返回串中偏移量为offset的二进制位的值
比如,’a’的ASCII码是97,二进制是01100001,那么getbit today 1返回的就是0,
getbit key-name offset
setbit
将字符串看作是二进制位串,并将位串偏移量为offset的二进制位设置为value
比如将today的第6个位(从0开始)设置为1,那么today的首字母就从a变成了c
setbit key-name offset
bitcount
统计二进制位串里面值为1的二进制位的数量,后面可以跟可选参数[start, end],表示统计该区间所有字节里面1的数量
bitcount keyname [start end]
bitop
对一个或多个二进制位串执行包括并(and)、或(or)、异或(xor)、非(not)在内的任意一种按位运算操作,并将结果保存在dest-key里面
bitop operation dest key key-name [key-name ...]
list列表
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
列表最多可以存储2^32-1个元素
lpush
将给定的值推入到列表的左边
lpush key-name value [value ...]
rpush
将给定的值推入到列表的右边
rpush key-name value [value ...]
lrange
获取列表在给定范围上的所有值
lrange key-name start end
lpop
从列表的左侧弹出一个值,并返回这个值
lpop key-name
rpop
从列表的右侧弹出一个值,并返回这个值
rpop key-name
lindex
返回列表中偏移量为offset的元素
lindex key-name offset
ltrim
对列表进行修剪,保留[start, end]之间的元素
ltrim key-name start end
blpop
从第一个非空列表中弹出位于最左端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现
blpop key-name [key-name ...]
brpop
从第一个非空列表中弹出位于最右端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现
brpop key-name [key-name ...]
rpoplpush
从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素。
rpoplpush source-key dest-key
brpoplpush
从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素;如果source-key为空,那么在timeout秒之内阻塞并等待可弹出的元素出现
brpoplpush source-key dest-key
set(集合)
Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
sadd
将一个或多个元素添加到集合里面,并返回被添加元素当中原本并不存在于集合里面的元素数量
sadd key-name item [item ...]
srem
从集合里面移除一个或多个元素,并返回被移除元素的数量
srem key-name item [item ...]
sismember
检查元素item是否存在于集合key-name中
sismember key-name item
scard
返回集合包含的元素的数量
scard key-name
smembers
返回集合包含的所有元素
smembers key-name
srandmember
从集合里面随机返回一个或多个元素。当count为正数时,命令返回的随机元素不会重复,当count为负数时,命令返回的随机元素可能会重复
srandmember key-name [count]
spop
随机地移除集合中的一个元素,并返回被移除的元素
spop key-name
smove
如果集合source-key包含元素item,那么从集合source-key中移除元素item,并将元素item添加到集合dest-key中;如果item被成功移除,那么返回1,否则返回0
smove source-key dest-key item
sdiff
返回那些存在于第一个集合,但不存在于其他集合的元素
sdiff key-name [key-name ...]
sdiffstore
将那些存在于第一个集合但并不存在于其他集合中的元素,存储到dest-key中
sdiffstore dest-key key-name [key-name ...]
sinter
返回那些同时存在于所有集合中的元素
sinter key-name [key-name ...]
sinterstore
将那些同时存在于所有集合中的元素存储到dest-key中
sinterstore dest-key key-name[key-name ...]
sunion
返回那些至少存在于一个集合中的元素
sunion key-name [key-name ...]
sunionstore
将那些至少存在于一个集合中的元素存储到dest-key键里面
sunion dest-key key-name [key-name ...]
hash(哈希、散列)
hash 是一个键值(key=>value)对集合。
hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
hmget
从散列表里获取一个或多个key的值
hmget key-name key [key ...]
hmset
为散列表里面的一个或多个键设值
hmset key-name key value [key value ...]
hdel
删除散列表里面的一个或多个键值对,返回成功找到并删除的键值对数量
hdel key-name key [key ...]
hlen
返回散列表包含的键值对数量
hlen key-name
hexists
检查给定key是否存在于散列表中
hexists key-name key
hkeys
获取散列表包含的所有键
hkeys key-names
hvals
获取散列表包含的所有值
hvals key-name
hgetall
获取散列表包含的所有键值对
hgetall key-name
hincrby
将键key存储的值加上整数increment
hincrby key-name key increment
hincrbyfloat
将键key存储的值加上浮点数increment
hincrbyfloat key-name key increment
sorted set(有序集合)
zadd
将带有给定分值的成员添加到有序集合中
zadd key-name score member [score member ...]
zrem
从有序集合里面移除给定的成员
zrem key-name member [member ...]
zcard
返回有序集合包含的成员数量
zcard key-name
zincrby
将member成员的分值加上increment
zincrby key-name increment member
zcount
返回分支介于min,max之间的成员数量
zount key-name min max
zrank
返回成员member在有序集合中的排名
zrank key-name member
zscore
返回成员member的分值
zscore key-name member
zrange
返回有序集合中排名介于start和stop之间的成员,如果给定了可选的withscores选项,那么命令将会连同成员的分值也一同返回。
zrange key-name start stop [withscores]
zrevrank
返回有序自核里成员member的排名,成员按照分值从大到小排列
zrevrank key-name member
zrevrange
返回有序集合给定排名范围的成员,成员按照分值从大到小排列
zrevrange key-name start stop [withscores]
zrevrangebyscore
返回有序集合中,分值介于min和max之间的所有成员,并按照分值从大到小排列
zrevrangebyscore key max min [withscores] [limit offset count]
zremrangebyrank
移除有序集合中排名基于start和stop之间的所有成员
zremrangebyrank key-name start stop
zremrangebyscore
移除有序集合中分值基于max和min之间的所有成员
zremrangebyscore key-name max min
zinterstore
对给定的有序集合执行类似于集合的交集运算
zinterstore des-key key-count key [key ...] [weights weight [weight ...]] [aggregate sum | min | max]
zunionstore
对给定的有序集合执行类似于集合的并集运算
zunionstore des-key key-count key [key ...] [weights weight [weight ...]] [aggregate sum | min | max]
常用命令
自动过期
persist
移除键的过期时间
persist key-name
ttl
查看给定键距离过期还剩多少秒
ttl key-name
expire
让给定键在指定的秒数之后过期
expire key-name seconds
expireat
将给定键的过期时间设置为给定的unix时间戳
expireat key-name timestamp
pttl
查看给定键距离过期时间还有多少毫秒
pttl key-name
pexprie
让给定键在指定的毫秒数之后过期
pexpire key-name millseconds
pexpireat
将一个毫秒级精度的unix时间戳设置为给定键的过期时间
pexpireat key-name timestamp-millseconds