对Redis来说,所有的key都是字符串,value可以有多中数据类型,value值字符串类型的限制为512M
一:字符串
1.使用场景
缓存,计数器,分布式锁
2.命令
get key 获取key对应的value O(1)
set key value 设置key和value O(1)
del key 删除key-value O(1)
incr key key自增1,若key不存在get(key) = 1 O(1)
decr key key自减1,若key不存在,自减后get(key) =-1 O(1)
incrby key k key自增k,若key不存在,自增后get(key)=k O(1)
decrby key k key自减k,若key不存在,自减后get(key)=-k O(1)
set key value 不管key是否存在,都会设置 O(1)
setnx key value key不存在,才设置 O(1)
set key value xx key存在,设置 O(1)
mget key1,key2,key3... 批量获取key,原子操作 O(n)
mset key1 value1 key2 value2 key3 value3... 批量设置key-value O(n)
getset key newvalue set keynewvalue并返回旧的value O(1)
append key value 将value追加到旧的value O(1)
strlen key 返回字符串的长度(注意中文) O(1)
incrbyfloat key 3.6 增减key对应的值3.6,无对应减少值,可以传负数达到减的效果 O(1)
getrange strart end 获取字符串指定下标所有的值 比如getrange 0 2
setrange key index value 设置下标所有对应的值
二:哈希键值
1.结构
key filed value
user:1:info name Kobe
age 38
date 201
add a new value
新增 time 2019
可单独去操作
2.特点
filed不能相同,value可相同
3.API
hget key field 获取hash key对应的field的value O(1)
hset key field value 设置hash key 对应field的value O(1)
hdel key field 删除hash key对应的field的value O(1)
hexists key field 判断hash key是否有field O(1)
hlen key 获取hash key field的数量 O(1)
hmget key field1 field2 ...fieldN 批量获取hash key的一批field对应的值 O(n)
hmset key field1 value1 field2 value2 ...fieldn valuen 批量设置hash key的一批field value O(n)
hgetall key 返回对应key所有属性field和值value O(n) Tips:若数据较多,注意使用该命令
hvals key 返回hash key对应的所有field的value O(n)
hkeys key 返回hash key对应的所有field O(n)
hsetnx key field value 设置hash key 对应field的value(若field已经存在,则失败) O(1)
hincrby key field intCounter 设置hash key 对应的field的 value自增intCounter O(1)
hincrbyfloat key field floatCounter 设置hincrby浮点数 O(1)
三:list
1.结构
key elements
user:1:info a-b-c-d...
2.特点
(1)有序,根据插入顺序
(2)可以重复
(3)左右两边插入弹出
3.API
增
rpush key value1 value2 ...valuen 从列表的 右端插入值(1-N个)O(1~n)
lpush key value1 value2 ...valuen 从列表的 左端插入值(1-N个)O(1~n)
linsert key before|after value newValue 在list指定的值前后插入newValue O(n)
删
lpop key 从左边弹出一个item O(1)
rpop key 从右边弹出一个item O(1)
lrem key count value
根据count值,从列表中删除所有value相等的项
(1)count < 0,从左到右,删除最多count个value相等的项
(2)count > 0,从右到左,删除最多Math.abs(count)个value相等的项
(3)count = 0,删除所有value相等的值
ltrim key start end 按照索引范围修剪列表 O(1) 保留起始和结束list
查
lrange key start end(包含end) 获取列表指定索引范围索引item O(n)
lindex key index 获取类别指定索引的item O(n)
llen key 获取列表长度 O(1)
改
lset key index newValue 设置列表指定索引值为newValue O(n)
其他
blpop key timeout lpop 阻塞版本,timeout是阻塞超时时间,timeout=0为永远不阻塞 O(1)
brpop key timeout rpop阻塞版本,timeout是阻塞超时时间,timeout=0为永远不阻塞 O(1)
Tips:
1.LRUSH + LPOP = Stack
2.LPUSH + RPOP = Quene
3.LPUSH + LTERM = Capped Collection
4.LPUSH + BRPOP = Message Quene
四:set
1.特点
无序,无重复元素,支持集合间操作(交集,并集,差集)
2.API
sadd key element 向集合key添加element(如果element已经存在,添加失败)O(1)
srem key element 将集合key中的element移除掉 O(1)
scard key 计算集合大小
sismember key element 判断element是否存在集合中
srandmember key count 从集合中随机挑选count个元素
spop key 从集合中随机弹出一个元素
smembers key 获取集合所有元素 (无序,若元素特别多,需小心使用)
集合间API
sdiff key1 key2 差集
sinter key1 key2 交集
sunion key1 key2 并集
sdiff|sinter|sunion +store destkey 将差集、交集、并集保存到destkey中(实例:unionstore testset user:1:follow user:1:info)
五:zset
1.结构
key score value
user:info 1 name
2.特点
无重复元素,有序,element+score
3.API
zadd key score elemet(可以是多对,score 可重复,element不可以重复) 添加score和element O(logN)
zrem key element (多个element)删除元素 O(1)
zscore key element 返回运算的分数 O(1)
zincrby key increScore element 增加或减少元素分数 O(1)
zcard key 返回元素的个数 O(1)
zrange key start end [WITHSCORES] 返回指定索引范围内的升序元素[分值] O(logN+m)
zrangebyscore key minScore maxScore [WITHSCORES] 返回指定分数范围内的升序元素 O(logN+m)
zcount key minScore maxScore 返回有序集合内在指定分数范围内的个数 O(logN+m)
zremrangebyrank key start end 删除指定排名内的升序元素 O(logN+m)
zremrangebyscore key minScore maxScore 删除指定分数内的升序元素 O(logN+m)