String
存储键值
> set name wes
> get name
"wes"
> append name Chen # 追加,返回长度,不存在时=set
(integer) 7
> mset k1 v1 k2 v2 k3 v3 # 批量设置
> msetnx k1 v1 k2 v2 k3 v3 # 批量设置键值,当且仅当所有不存在
> mget k1 k2 k3 # 批量获取
1) "v1"
2) "v2"
3) "v3"
> strlen name # 获取字符串长度
(integer) 7
> setex age 30 3 # 创建age键值,30秒过期,值为3
> setnx age 33 # 不存在时创建,存在则不进行任何动作
> move k1 1 # 删除键值:1个
> getset age 30 # 设置新值并获取旧值,初始值为null
设置自增
> set view 0
> incr view # 让储存的数字值加一
(integer) 1
> get view
"1"
> decr view # 让储存的数字值减一
(integer) 0
> get view
"0"
> incrby view 10 # 加10
(integer) 10
> decrby view 3 # 减3
(integer) 7
获取字符串内容
> getrange name 0 3 # 获取字符串 0~3 的内容
"wesC"
> getrange name 0 -1 # 获取整个字符串
"wesChen"
> setrange name 3 "abc" # 将字符串从3开始逐位替换abc
(integer) 7
> get name
"wesabcn"
创建对象
> set user:1 {name:wes,age:3}
> get user:1
"{name:wes,age:3}"
> mset user:2:name wes user:2:age 3
> keys *
1) "user:2:name"
2) "user:2:age"
List
> lpush list one # 在首部加值
(integer) 1
> rpush list two # 在尾加值
(integer) 2
> rpoplpush list list2 # 从尾部取一个值插入首部,list2不存在时会创建
"two"
> lrange list 0 -1 # 获取 list 所有值
1) "one"
2) "two"
> lrange list 0 0 # 获取 list 范围值
1) "one"
> lindex list 0 # 获取指定下标值
"one"
> llen list # 获取 list 大小
(integer) 1
> lpop list # 删除第一个元素并返回
"three"
> rpop list # 删除最后一个元素并返回
"two"
> lrem list 1 one # 从左边删除1个值为one的
> ltrim list 0 1 # 保留 0~1 的值,其他删除
> lset list 0 demo # 将 index = 0 的值替换为 demo
插入元素
127.0.0.1:6379> linsert list before "k3" "k4" # 在k3前插入k4
127.0.0.1:6379> linsert list after "k3" "k5" # 在k3后插入k5
Set
Set 存储的值不能重复
> sadd k1 1
> sadd k1 2 3 4 5
> smembers k1 # 查看set所有内容
1) "1"
2) "2"
> scard k1 # 查看元素个数
(integer) 2
> sismember k1 1 # 判断是否存在,存在1,不存在0
(integer) 1
> srem k1 1 # 删除指定元素
(integer) 1
> spop k1 # 随机删除元素并返回
"4"
> smove k1 set2 "2" # 把value移动到别的key
(integer) 1
> srandmember k1 # 随机获取一个元素
"2"
> srandmember k1 2 # 随机抽取两个元素
1) "4"
2) "2"
差集、交集、并集
> smembers k1
1) "3"
> smembers k2
1) "2"
> sdiff k1 k2 # 差集 set - set2
1) "3"
> sinter k1 k2 # 交集
(empty array)
> sunion k1 k2 # 并集
1) "2"
2) "3"
Hash
存的是 key - value
> hset user id 1
> hmset user name zhangsan age 20
> hsetnx user email 136@qq.com # 键值不存在则创建,存在不创建
(integer) 1
> hget user id
"1"
> hmget user name age
1) "zhangsan"
2) "20"
> hgetall user # 获取所有键值对
1) "id"
2) "1"
3) "name"
4) "zhangsan"
5) "age"
6) "20"
> hkeys user # 获取所有key
1) "name"
2) "age"
> hvals user # 获取所有键值
1) "zhangsan"
2) "20"
> hlen user # 获取键值对数量
(integer) 2
> hdel user id # 删除指定键值对
(integer) 1
> hexists user id # 判断键值是否存在,存在1 不存在0
(integer) 0
> hincrby user age 1 # 键值增加1
(integer) 21
> hincrby user age -2 # 键值减少2
(integer) 19
Zset
> zadd k1 1 one # 添加一个值,score = 1
> zadd k1 2 two 3 three # 增加两个值
> zrange k1 0 -1 # 获取所有值
1) "one"
2) "two"
3) "three"
> zrangebyscore k1 -inf +inf # 按score升序显示
1) "one"
2) "two"
3) "three"
> zrangebyscore k1 -inf +inf withscores # 显示值并显示score
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
> zrevrangebyscore k1 0 -1 withscores # 降序显示
1) "three"
2) "two"
3) "one"
> zrangebyscore k1 -inf 2 withscores # 显示score到2位置的数据
1) "one"
2) "1"
3) "two"
4) "2"
> zcard k1 # 获取集合元素个数
(integer) 2
> zrem k1 one # 删除 one
> zcount k1 1 2 # 计算 score 在 [1,2] 的个数
(integer) 1
> zrank key value # 返回value在key中的排名,从0开始
> zadd k1 1 20
> zincrby k2 50 20 # 让20增加50
底层:hash + 跳跃表
- hash:关联元素 value 和 权重 score,保障 value 的唯一性,可以通过 value 找到 score
- 跳跃表:给元素 value 排序,根据 score 的范围获取元素列表