key:string value:以下五种类型
1、String
set key value: 不管key是否存在,都设置
setnx key value: key不存在,才设置
setex key seconds value: 将值value关联到key,并将key的过期值设为seconds(以秒为单位),在设置缓存时候特别有用。
PSETEX key milliseconds value:这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
mset key1 value key2 value... : 同时设置一个或多个 key-value 对
msetnx key1 value key2 value... : 同时设置一个或多个 key-value 对,当且仅当所有的key值都不存在
setrange key offset value : 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
get key: 获取指定 key 的值。
mget : 获取所有(一个或多个)给定 key 的值。
getrange key start end : 返回 key 中字符串值的子字符
getbit key offset : 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
getset key value : 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
incr key: 将 key 中储存的数字值增一。
decr key: 将 key 中储存的数字值减一。
incrby key increment: 将 key 所储存的值加上给定的增量值(increment) 。
decrby key decrement: key 所储存的值减去给定的减量值(decrement) 。
append key value: 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。
strlen: 返回 key 所储存的字符串值的长度。
incrbyfloat: 将 key 所储存的值加上给定的浮点增量值(increment) 。
del key: 删除key所存储的值。
[root@tcy1 tcy]# docker exec -it ab54741166e1 redis-cli
127.0.0.1:6379> set tcy 21-22
OK
127.0.0.1:6379> setnx tcy 22
(integer) 0
127.0.0.1:6379> mset m1 1 m2 2 m3 3
OK
127.0.0.1:6379> mget m1 m2 m3
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> mset m1 4 m4 5
OK
127.0.0.1:6379> msetnx m1 22 m5 7
(integer) 0
127.0.0.1:6379> get tcy 21-22-24
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> getset tcy 21-22-24
"21-22"
127.0.0.1:6379> append tcy -26
(integer) 11
127.0.0.1:6379> get tcy
"21-22-24-26"
127.0.0.1:6379> del tcy
(integer) 1
127.0.0.1:6379> get tcy
(nil)
2、Hash
hget key field: 获取存储在哈希表中指定字段的值。
hset key field value: 将哈希表 key 中的字段 field 的值设为 value 。
hdel key field1 [field2]: 删除一个或多个哈希表字段
hgetall key: 获取在哈希表中指定 key 的所有字段和值
127.0.0.1:6379> hset user:tcy:info name tcy
(integer) 1
127.0.0.1:6379> hget user:tcy:info name
"tcy"
127.0.0.1:6379> hset user:tcy:info age 22
(integer) 1
127.0.0.1:6379> hgetall user:tcy:info
1) "name"
2) "tcy"
3) "age"
4) "22"
127.0.0.1:6379> hdel user:tcy:info age
(integer) 1
127.0.0.1:6379> hgetall user:tcy:info
1) "name"
2) "tcy"
hexists key field: 查看哈希表 key 中,指定的字段是否存在。
hlen key: 获取哈希表中字段的数量
127.0.0.1:6379> hgetall user:tcy:info
1) "name"
2) "tcy"
127.0.0.1:6379> hexists user:tcy:info name
(integer) 1
127.0.0.1:6379> hlen user:tcy:info
(integer) 1
hmset key field1 value1 [field2 value2 ] : 同时将多个 field-value (域-值)对设置到哈希表 key 中。
hmget key field1 [field2] 获取所有给定字段的值 :
127.0.0.1:6379> hmset user:tcy2:info name tcy2 age 21-22
OK
127.0.0.1:6379> hmget user:tcy2:info name age
1) "tcy2"
2) "21-22"
hincrby key field increment: 为哈希表中的字段值加上指定增量值。
127.0.0.1:6379> hset key1 field1 2
(integer) 1
127.0.0.1:6379> hincrby key1 field1 1
(integer) 3
hgetall key: 获取在哈希表中指定 key 的所有字段和值
hvals key: 获取哈希表中所有值(value)
hkeys key: 获取所有哈希表中的字段(field)
hlen key: 获取哈希表中字段的数量
127.0.0.1:6379> hgetall user:tcy:info
1) "name"
2) "tcy"
3) "age"
4) "22"
5) "hobby"
6) "sport"
127.0.0.1:6379> hvals user:tcy:info
1) "tcy"
2) "22"
3) "sport"
127.0.0.1:6379> hkeys user:tcy:info
1) "name"
2) "age"
3) "hobby"
127.0.0.1:6379> hlen user:tcy:info
(integer) 3
127.0.0.1:6379>
3、List
列表:有序,可以重复,左右两边插入弹出
lpush + lpop = Stack
lpush + rpop = queue
lpush + ltrim = capped collection
lpush + brpop = Message Queue
增:
rpush key value1 value2 ...valueN : 从列表右边插入值
lpush key value1 value2 ...valueN: 从列表左端插入值
linsert key before | after value newValue: 在列表的元素前或者后插入元素
删:
lpop key: 从列表左边弹出一个item
rpop key: 从列表右边弹出一个item
lrem key count value: 移除列表元素,根据count的值,从列表中删除所有value相等的项
count > 0,从左到右,删除最多count个value相等的项
count < 0,从右到左,删除最多math.abs(count)个value相等的项
count=0,删除所有value相等的项
lrem listkey 0 a : 把列表中所有value为a的值全部删除
lrem listkey -1 a : 列表中,从右向左,把value为a的值删除1个
lrem listkey 2 a : 列表中,从左向右,把value为a的值删除2个
ltrim key start end : 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
ltrim listkey 1 4 : 只保留列表索引在1~4中的值
查:
lrange key start end(包含end) :获取列表指定索引范围所有item o(n)
lrange listkey 0 2 : 查找前三个元素
lrange listkey 1 -1: 查找第二个元素到最后一个元素
lindex key index : 获取列表指定索引的item
lindex listkey 0 :获取第一个元素
lindex listkey -1:获取最后一个元素
llen key : 获取列表长度 o(1)
改:
lset key index newValue : 设置列表指定索引值为newValue o(n)
lset listkey 2 tcy : 把下标为2的值设置为tcy
blpop key [key2] timeout : 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。(将对各列表加入timeout)
brpop key [key2] timeout : 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
上面两个命令做消息队列时很有帮助:
127.0.0.1:6379> rpush mylist tcy tcy2 tcy3
(integer) 3
127.0.0.1:6379> lrange 0 -1
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange listkey 0 -1
(empty list or set)
127.0.0.1:6379> lrange mylist 0 -1
1) "tcy"
2) "tcy2"
3) "tcy3"
127.0.0.1:6379> lpush mylist tcy4
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "tcy4"
2) "tcy"
3) "tcy2"
4) "tcy3"
127.0.0.1:6379> rpop mylist
"tcy3"
127.0.0.1:6379> lrange 0 -1
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange mylist 0 -1
1) "tcy4"
2) "tcy"
3) "tcy2"
127.0.0.1:6379> lset mylist 1 tcy_changed
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "tcy4"
2) "tcy_changed"
3) "tcy2"
127.0.0.1:6379> ltrim mylist 1 2
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "tcy_changed"
2) "tcy2"
4、Set 编码可以是intset或者hashtable
增:
sadd key member1 [member2] : 向集合添加一个或多个成员 o(1)
删:
srem key member1 [member2] : 移除集合中一个或多个成员 o(1)
查:
scard key : 获取集合的成员数
sismember key memeber: 判断 member 元素是否是集合 key 的成员
srandmember key count: 从集合中随机挑选count个元素返回
smembers key: 返回集合中的所有成员(无序)(元素太多,会阻塞)
spop key: 移除并返回集合中的一个随机元素
集合间:
sunion key1 [key2]: 返回所有给定集合的并集
sunionstore destination key1 [key2] : 返回给定所有集合的并集并存储在 destination 中
sinter key1 [key2]: 返回给定所有集合的交集
sinterstore destination key1 [key2] : 返回给定所有集合的交集并存储在 destination 中
sdiff key1 [key2]: 返回给定所有集合的差集
sdiffstore destination key1 [key2] : 返回给定所有集合的差集并存储在 destination 中
127.0.0.1:6379> sadd user:tcy22 felme sports foods bananas
(integer) 4
127.0.0.1:6379> smembers user:tcy22
1) "bananas"
2) "sports"
3) "foods"
4) "felme"
127.0.0.1:6379> spop user:tcy22
"bananas"
127.0.0.1:6379> smembers user:tcy22
1) "sports"
2) "foods"
3) "felme"
127.0.0.1:6379> srandmembers user:tcy22 3
(error) ERR unknown command 'srandmembers'
127.0.0.1:6379> srandmember user:tcy22 3
1) "sports"
2) "foods"
3) "felme"
127.0.0.1:6379> scard user:tcy22
(integer) 3
127.0.0.1:6379> sismember user:tcy22 test
(integer) 0
5、Zset
有序集合:集合元素按分值从小到大进行排序。
编码可以是ziplist或者skiplist,当有序集合保存的元素数量小于128个;有序集合保存的所有元素成员的长度都小于64字节。使用ziplist。
增:
zadd key score1 member1 [score2 member2] :向有序集合添加一个或多个成员,或者更新已存在成员的分数 o(logN)
删:
zrem key member [member ...] : 移除有序集合中的一个或多个成员 o(1)
zremrangebyrank key start stop : 移除有序集合中给定的排名区间的所有成员 o(log(n)+m)
zremrangebyscore key min max :移除有序集合中给定的分数区间的所有成员 o(log(n)+m)
zrevrange key start stop [WITHSCORES] :返回有序集中指定区间内的成员,通过索引,分数从高到底
zrevrankbyscore key max min [WITHSCORES] :返回有序集中指定分数区间内的成员,分数从高到低排序
zrevrank key member :返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
查:
zscore key member : 返回有序集中,成员的分数值 o(1)
zcard key : 获取有序集合的成员数 o(1)
zrank key member : 返回有序集合中指定成员的索引
zcount key minScore maxScore : 计算在有序集合中指定区间分数的成员数 o(log(n)+m)
zlexcount key min max : 在有序集合中计算指定字典区间内成员数量
zrange key start end [withscores] : 通过索引区间返回有序集合成指定区间内的成员(是否带分值) o(log(n)+m)
zrangebylex key min max [LIMIT offset count]
通过字典区间返回有序集合的成员
改:
zincrby key increScore element : 增加或减少元素的分数 o(1)