redis 数据类型和命令
通用命令
命令 | 作用 | 使用 | 描述 |
---|---|---|---|
type key | 查看 key 的类型 | type mykey |
|
del key | 删除 key | del mykey |
同步删除 |
unlink key | 删除 key | unlink mykey |
异步删除 |
expire key | 设置 key 的过期时间 | expire mykey 10 |
设置 mykey 10 秒后过期 |
ttl key | 查看 key 还有多久过期 | ttl mykey |
-1,永不过期 |
select index | 选择数据库分片 | select 0 |
共有 16 个,默认选择的是 0 |
flushdb | 清空当前库 | ||
flushall | 清空所有库 |
String
存储字符串、整数、小数
命令 | 作用 | 使用 | 描述 |
---|---|---|---|
get key | 获取 key 值 | get mykey |
|
set key value | 添加 key | set mykey val |
如果 key 不存在就添加;存在就覆盖 |
setnx key value | 添加 key (不存在时才添加) | setnx mykey val2 |
简易锁 |
setex key 过期时间 value | 添加 key 同时设置过期时间 | setex mykey 5 val3 |
|
incr key | key 的值 +1 | incr mykey |
值必须是数字型,不然报错 |
decr key | key 的值 -1 | ||
incrby key step | key 的值 + step | incrby mykey 4 |
mykey的值+4,值必须是数字 |
List
存储 String 类型的集合。每个元素是 quickList, quickList 里面才放真正的 String 数据,quickList 可以理解为数组(是一块连续的内存)
当值比较少的时候,申请一小块内存(一个 quickList)来存放数据;如果值比较多的时候,就会多申请几块内存(多个 quickList),每quickList 组成双向链表
命令 | 作用 | 使用 | 描述 |
---|---|---|---|
lpush key v1 | mykey 左边插入 v1 v2;key 不存在就创建 | lpush mykey v1 v2 |
注意顺序 |
rpush key v1 | 同上,右边插入 | ||
lpop key | 弹出最左边的值,并返回 | lpop mykey |
弹出就是删除的意思 |
rpop key | 同上,弹出右边 | ||
lrange key start end | 从左至右获得指定下标范围的元素 | lrange mykey 0 4 |
不会删除,只是获取; 如果取全部就 lrange key 0 -1 |
lindex key index | 获取指定下标位置的元素 | lindex mykey 2 |
Set
无序可重复的 String 集合,底层数据结构是 hash 表,所以时间复杂度是 O(1),原理类似 java hashSet
命令 | 作用 | 使用 | 描述 |
---|---|---|---|
sadd key v1 | key 添加一个元素;key 不存在就创建 | sadd mykey v1 |
|
smembers key | 获取 set 所有值 | smembers mykey |
|
sismember key value | 判断 set 中是否有有某个值 | sismember mykey v1 |
1:存在;0:不存在 |
scard key | 总元素个数 | ||
smove k1 k2 value | 把 k1 中的 value 移动到 k2 中 | ||
sinter k1 k2 | 取交集 | ||
sunion k1 k2 | 取并集 | ||
sdiff k1 k2 | 取差集 | k1 中存在,k2 中不存在 |
Hash
存储对象
命令 | 作用 | 使用 | 描述 |
---|---|---|---|
hset key field value | 给对象的属性赋值;没有就创建 | hset user:101 id 1001 |
给 user:101 这个 hash 设置 id=1001 |
hget key field | 取值 | hget user:101 id |
|
hkeys key | 对象所有键 | hkeys user:101 |
|
hvals key | 对象所有值 | hvals user:101 |
|
hexistxs key field | 是否有指定属性 | hexistxs user:101 id |
|
hsetex key field valye | 对象中不存在某个属性才添加属性并复制 | hsetex user:101 name zhangsan |
如果 user:101 没有 name 设置 name 的值 |
Zset
也是一个不重复的集合(元素不重复,分数可以重复)
两种数据结构实现,压缩列表(Zip list)和跳表(Skip list),和 java HashMap 类似元素个数达到合适条件使用不同的数据结构
当元素数量 <= 128,并且每个元素字节大小 <= 64 使用压缩列表
命令 | 作用 | 使用 | 描述 |
---|---|---|---|
zadd key score1 member1 | 给集合添加元素;可以多个 | zadd tv_rank 100 海信 99 索尼 |
添加两个元素;海信和索尼 海信分数:100;索尼分数:99 |
zcard key | 集合中的元素个数 | zcard tv_rank |
|
zcount key min max | 集合中指定分数分范围内的元素个数 | zcount tv_rank 10 80 |
分数是[10-80]之间的元素个数 |
zincrby key step e | 给元素增加指定分数 | zincrby tv_rank 15 索尼 |
给索尼增加15分 |
zrange key start end [withscores] | 按照下标获取元素;分数从小到大排列之后的顺序 | zrange tv_rank 0 -1 |
获取全部元素,没有分数 |
zrangebyscore key min max [withscores] | 集合中指定分数范围内的元素,按照分数从小到大排序 | zrangebyscore tv_rank 10 100 withscores |
获取10-100内的元素,带分数 |
zrevrangebyscore key max min [withscores] | 同上,按照分数从大到小排序 | ||
zrem key member | 移除元素;可以多个 | zrem tv_rank 海信 索尼 创维 |
移除这三个元素 |