命令
keys * 查看所用键
dbsize 键的总数
exists key 检查键是否存在
del key [key …] 删除(支持多个键)
expire key secodes 设置键过期的时间
ttl key 返回键过期剩余的时间(返回大于0:剩余时间,-1:没设置,-2:键不存在)
type key 查看数据类型(如果键不存在返回none)
以上命令都是全局命令。
虽然redis的存储形式是以key-value的形式存在的。在redis中支持五种数据类型:string,hash,队列,集合,有序集合。
字符串
字符串类型是redis最基础的数据类型。可以使简单字符串、复杂字符串(json,xml),数字,二进制(图片,音频,视频),但是最大值不能超过521MB。
常用命令:
- 设置值
set key value [ex seconds] [ps milliseconds] [nx|xx]
ex seconds:为键设置过期时间(单位是秒)
px milliseconds : 为键设置过期时间(单位是毫秒)
nx:键必须不存在才能设置成功,用于添加
xx:键存在时才能设置成功,用于更新
- 获取值
get key
3.批量设置值
mset key value [key value …]
4.批量获取值
mget key [key …]
- 计数
incr key 每次查询结果加1 (oracle中的序列)
值如果不是整数返回错误
值为整数是返回自增结果
键不存在按0自增
除incr外还有decr(自减)
内部编码:
字符串类型的内部编码有3种:
- int:8个字节的长整型
- embstr: 小于等于39个字节的字符串
- raw:大于39个字节的字符串
哈希
哈希类型的值是以键值对的形式存在。
命令:
hset key field value 设置值
hget key field 获取值
hdel key field [field] 删除field的值
批量获取field-value值
hmset key field value [field value ….]
hmget key field [field…]
hexists key field 判断field是否存在
hkeys key 获取所用field
hvals key 获取所用value
hgetall key 获取所用field-value
内部编码:
哈希类型每部编码有两种:
- ziplist : 当元素个数小于521个并且所有的值都小于64个字节。
- hashtable: 值大于64个字节或者元素的个数大于512个
列表(list)
列表的特点:1 列表中的元素是有序的。可以通过下标获取某个元素 ; 2 列表中的元素可以重复。
命令:
rpush key value [value … ] 从右边插入元素
lpush key value [value … ] 从左边插入元素
linsert key before|after pivot(list中某个元素) value 向某个元素前|后插入元素
lrange key start end 获取指定范围内的元素列表。
lrange key 0 -1 获取所有
lindex key index 获取指定下表元素
llen key 获取列表长度
rpop key 从右侧弹出元素(删除最右边的)
lpop key 从左测弹出元素(删除最左边的)
lrem key count value 从列表中找到等于value的元素进行删除。
- count>0 从左到右,删除最多count个元素
- count<0 从右到左,删除最多count绝对值个元素。
- count = 0 ,删除所有元素。
ltrim key start end 只保留下标start 到end的元素
lset key index newvalue 修改指定下标元素
brpop key [key…] timeout 阻塞式弹出
内部编码:
- ziplist:当元素个数小于521个并且所有的值都小于64个字节。
- linkedlist:元素个数大于512或值大于64个字节。
应用:
- lpush + lpop : 栈
- lpush + rpop: 队列
- lpush + ltrim: 有限集合
- lpush + brpop: 消息队列
集合(set)
命令:
sadd key element [element….] 添加元素
srem key element [element…] 删除元素
scard key 计算元素个数
sismember key element 判断元素是否在集合中
srandmember key [count] 随机返回指定个元素
spop key 随机弹出元素
smembers key 获取所用元素
集合间的操作:
sinter key [key …] 求多个集合的交集
sunion key [key…] 求多个集合的并集
sdiff key [key…] 求多个集合的差集
内部编码:
- intset: 集合中的元素都是整数且元素个数小于512个
- hashtable : 当元素不是整数或元素个数大于512个
有序集合
zadd key score member [score member] 添加成员
zcard key 计算成员个数
zscore key member 计算成员分数
zrank key member 计算成员排名(从底到高)
zrevrank key member 计算成员排名 (从高到低)
zrem key member 删除成员
zincrby key increment member 增加成员分数
内部编码:
- ziplist: 当元素个数小于521个并且所有的值都小于64个字节。
- skiplist: 元素个数大于512或值大于64个字节。
数据结构 | 是否能重复 | 是否有序 | 有序实现方式 |
---|---|---|---|
列表 | 是 | 是 | 索引下标 |
集合 | 否 | 否 | 无 |
有序集合 | 否 | 是 | 分值 |