redis的value有五种类型,每个类型有对应的方法
type key 描述这个key对应的value的类型
object encoding key 这个key对应的value操作过的类型
String组操作:(字符串/字节数组、数值、位)
字符串:
set key value 设置值
get key 获取值
set key value nx 当key不存在时设置(只能新建,分布式锁时用)
set key value xx 当key存在时才能设置(只能更新)
mset key1 value1 key2 value2 key3 value3 ... 多个key设置
mget key1 key2 key3 多个key获取
msetnx key value key value ... 多个设置,所有的key都不存在时设置成功,原子性操作(有一个setnx失败了,全部失败)
append key xxx 追加xxx
getrange key start end 获取索引从start到end的值
可以使用正向索引和方向索引,例如: abcdefg,正向索引为:0123456,反向索引为-7-6-5-4-3-2-1
setrange key start xxxx 把索引为start以后的值替换为xxxx
strlen key 获取字符串的长度
getset key value 更新新的值,返回老的值
数值:
incr key 加1,如果key不存在,那么就是1
incrby key x 加x
decr key 减1
decrby key x 减x
bitmap:
setbit key offset value offset:二进制位索引的偏移量,而不是字节索引的偏移量
例如:setbit k1 1 1 的结果:01000000 因为这个二进制,一个二进制就可以表示,所以strlen k1为1
bitpos key bit start end 查找某bit(0或者1),在二进制(字节索引范围)中第一次出现的位置(二进制位索引)
例如:现有 k1 的二进制为: 01000001 01000000
bitpos k1 1 0 0 :代表查找k1中字节索引为0-0范围内第一次出现的1的二进制位索引:1
bitpos k1 1 1 1:代表查找k1中字节索引为1-1范围内第一次出现的1的二进制位索引:9
bitcount key start end 统计二进制位1的个数
bitop operation destkey key 按位操作,operation:操作,and or ,destkey:操作后的目标key key: 参与运算的key
例如,现有k1: 01000001
和k2: 01000010
如果执行: bitop and andresult k1 k2 那么andresult的二进制结果为: 01000000 (与运算,遇0则0,全1为1)
如果执行: bitop or orresult k1 k2 那么orresult的二进制结果为: 01000011(或运算,有1则1)
使用场景:
1.统计用户登录天数:
2.电商系统统计活跃用户:
list操作:
特点:不去重,插入和弹出有序
链表,key里面包含第一个元素head和最后一个元素tail
当同向命令(左边存左边弹出/右边存右边弹出)时,后进先出 栈
当反向命令(左边存右边出/右边存左边出)时,先进先出 队列
lindex lset 根据下标获取和设置 数组
blpop brpop 阻塞 先阻塞的单有元素的时候先拿到元素 单播队列
lpush key value ... 从左边存入
lpop key 从左边弹出一个元素
rpush key value ... 从右边存入
rpop key 从右边弹出一个元素
lrange key start end 获取start-end区间的元素(支持反向索引)
lindex key index 获取下标为index的元素(支持反向索引)
lset key index element 设置下标为index的元素为element
lrem key count element 删除count个element元素,
当count为正数时,从左边开始查找count个删除
当count为负数时,从右边开始查找count个删除
linsert key before | after pivot element 在pivot前面(before)或者后面(after)插入
llen key 获取元素个数
blpop key timeout 从左边弹出一个元素,如果没有数据,那么最多阻塞timeout秒
brpop key timeout 从右边弹出一个元素,如果没有数据,那么最多阻塞timeout秒
ltrim key start stop 删除start左边的和stop后边的元素,只保留中间的
hash操作:(可以把hash理解为对象,每个key都是这个对象的属性)
hset key field value 设置值
hget key field 获取值
hmset key field value field value ... 多值设置
hmget key field field field ... 多值获取
hsetnx key field value 当某field 存在时设置成功
hkeys key 获取所有的field
hvals key 获取所有的value
hincrby key field increment 数字运算加increment,increment可以为负数
hincrbyfloat key field increment 浮点数运算
set操作:
特点:去重 不维护插入顺序
sadd key member ... 添加一个或多个元素
scard key 获取元素个数
spop key 随机弹出一个元素
smembers key 获取所有的元素
sismember key member 查询member是否是set中的一个元素
srem key member ... 删除一个或多个元素
集合操作:
sinter k1 k2 获取k1和k2的交集
sinterstore result k1 k2 获取k1和k2的交集,并存入result目标集合中
sunion k1 k2 获取k1和k2的并集
sunionstore result k1 k2 获取k1和k2的并集并存入结果集(result)中
sdiff k1 k2 k1-k2的差集,注意有顺序问题,一定是前面的-后面的差集
srandmember key count 获取随机元素,
当count为正数且小于元素总数时,会返回个数为count的不重复的结果集
当count为正数且大于元素总数时,有几个元素返回几个元素,不会达到count个
当count为负数时,一定会返回count个元素,且可能重复
sorted set
特点:有序的
物理内存,左小右大,不随命令发生变化
多了一个score(分值)维度,这个分值是sorted set用于排序的依据
zadd key score member score member 添加元素,同时设置元素的分值
zscore key member 获取元素的分值
zrank key member 获取元素的排名
zincrby key increment member 更改某元素的score
zrange key start end 获取start-end区间的元素
zrevrange key start end 获取倒叙start-end区间的元素
扩展:获取前两名的元素:zrange key 0 1
获取后两名的元素:zrevrange key 0 1
zrange key start end withscores 获取start-end区间的元素及其分值,可以看到分值是从小到大排序的
zrangebyscore key min max 获取score为min--max区间的元素
集合操作:
zunionstore resultset numkeys key ... 获取集合的并集,并把结果存入目标集合(resultset)中,numkeys代表有多少个集合参加,
相同的key的score会做相加处理
例如集合k1的元素和score: a 11 b 20 c 33 d 45
集合k2的元素和score: b 17 d 27 e 60
结果会是: a 11 c 33 b 37 e 60 d 72
zunionstore resultset numkeys key ... weights weight ... 这个命令是带权重的求并集方法,相同key的score的处理为:先乘以权重后相加
例如集合K1中有 a 10 集合k2中有 a 8
命令为: zunionstore resultset 2 k1 k2 weights 1 2
那么a的结果为:10*1+8*2=26
zunionstore resultset numkeys key... aggregate max|min|sum 取最大值/最小值/和