strings字符串
- APPEND key value
如果key存在,并且值为字符串,name这个命令会把value追加到原来的(value)结尾;
如果key不存在,那么这个命令将创建一个空字符串的key,再执行追加操作。(类似set操作)
redis>append user:1 user1
(integer) 14 返回的值时追加字符串值(value)的长度
- BITCOUNT key [start end]
统计字符串被设置为1的bit数
内存计算:单位换算8BIT = 1B;1024B = 1MB
start表示开始位置 1 byte = 8bit
end表示结束位置 1byte = 8bit
bitcount key 0 0
统计key的字符串被设置的二进制位1的bit数0~7位置
bitcount key 0 1
0~15位置上bit为1的个数
bitcount key 1 1
8~15位置上bit为1的个数
依此类推..
GETBIT key offset
返回key对应的string在offset位置处的bit值;
当offset超出字符串长度的位置时,使用0bit进行填充,返回0;
当key不存在,offset返回的值为0SETBIT key offset value
设置或者清空key的value值,在offset位置处的bit值;
value只能是0/1;
返回值:offset位置处旧的值
DECR key (记忆法则:decrease-减少)
对key对应的数值做减1操作;
如果key不存在,操作时key的值被置为0;
如果key的value类型报错,就返回错误;
返回结果:减少之后的value值;DECRBY key decrement
将key对应的数值减少decrement。
如果key不存在,操作时候key的值会被置为0;
如果key的value类型错误,就返回错误;
返回结果:减少之后的value值;GET key
返回key的value。
如果key不存在,返回特殊值nil;
如果 key的value不是string,就返回错误;GETRANGE key start end (记忆法则:range-范围)
返回key对应的value字符串,范围由start和end决定;
start:0表示索引为0,正数索引从1开始,负数表示从最后一位开始
end:-1表示结束位置到右边末尾GETSET key value
将key的值设置为value;
返回结果是旧的key对应的value值;INCR key (记忆法则:increase-增加)
将对应的key的值执行原子加1操作;
返回结果,value加1后的值INCRBY key increment
将对应的key执行原子增加一个increment值
返回结果,value加increment的结果INCRBYFLOAT key increment
执行原子增加一个浮点数MGET key [key...] ("[]"括号中的为可选项)
获取所有key的值MSET key value [key value...]
设置多个key value的值MSETNX key value [key value...]
设置多个key value,当key存在,则set不成功
当key不存在,则set成功PSETEX key milliseconds value
设置key value的值并且设置过期时间;
milliseconds 以毫秒为单位SET key value [EX seconds] [PX milliseconds] [NX|XX]
设置key value的值SETEX key seconds value
设置key-value并设置过期时间(单位秒)SETNX key value
设置key value值,当key不存在时设置成功STRLEN key
获取key的指定长度
模拟打卡案例
redis> setbit user:1 0 1 用户1 第一天 打卡
redis> setbit user:1 1 1 用户1 第二天 打卡
redis> setbit user:1 2 1 用户1 第三天 打卡
redis> setbit user:1 3 1 用户1 第四天 打卡
redis> setbit user:1 4 0 用户1 第五天 未打卡
redis> getbit user:1 0 获取用户1 第一天 是否打卡=打卡
redis> getbit user:1 4 获取用户1 第五天 是否打卡=未打卡
redis> bitcount user:1 获取用户1 总打卡次数 4次
redis> bitcount user:1 0 0 获取用户1 1~8天 是否打卡总次数 4次
redis> bitcount user:1 1 1 获取用户1 8~16天 是否打卡总次数 0次
lists列表
LPUSH key value [value ...]
将所有指定的值插入到存储于key的列表的头部;
如果key不存在,push操作前会创建一个空列表;
注意多个value值依次按顺序插入列表的头部中;
返回值:在push操作后的list长度RPUSH key value [value ...]
将所有指定的值插入到存储于key的列表的尾部;
如果key不存在,push操作前会创建一个空列表;
注意多个value值依次按顺序插入列表的尾部中;
返回值:在push操作后的list长度LRANGE key start stop
返回存储在key的列表中指定范围内的元素;
start和stop偏移基于0下标,第一个元素下标为0,第二个元素下标为1,以此类推;
偏移可以为负数,最后一个元素下标为-1,倒数第二个元素小标为-2,以此类推;
返回值:指定范围里的列表元素LTRIM key start stop
剪切一个已经存在的list,这样list就会只包含指定范围的指定元素;
start和stop索引从0开始,范围包含start和stop的索引值;LLEN key
返回key中的list的长度;
如果key不存在,那么就被看做空list,返回长度0;
如果key不是一个list,返回错误;LPOP key
从key对应的list列表头部移除第一个元素;
返回值:被移除的元素的值;RPOP key
从key对应的list列表尾部移除第一个元素;
返回值:被移除的元素的值;BLPOP key [key ...] timeout
阻塞式从key对应的list列表中头部删除第一个元素;
timeout:0表示一直等待,整数1~无穷大以秒为单位等待;
返回结果:删除的列表key,及key对应列表中被删除的的元素值;
阻塞时间只有等待才会返回阻塞时间;BRPOP key [key ...] timeout
阻塞式从key对应的list列表中尾部删除第一个元素;BRPOPLPUSH source destination timeout
阻塞式弹出一个列表的值,并将这个值推到另一个列表中;
source:表示要从那个key对应的列表中尾部删除一个元素;
destination:表示从那个key对应的列表中头部插入一个source中被删除的元素;
timeout:预期的超时时间;LINDEX key index
获取一个元素,通过index索引获取对应位置元素值;LINSERT key before|after pivot value
将value的值插入到key对应的列表元素pivot的before|after;
返回值:经过插入操作后的list的长度值;LREM key count value
移除key列表中value的值;
count > 0:从头部往尾部移除count个value的元素
count < 0:从未往头部移除值为count个value的元素
count = 0:移除所有值为value的元素LSET key index value
给key对应的list列表的index位置设置value值;RPOPLPUSH source destination
移除source列表尾部第一个元素,并将移除的值添加到destination列表的头部的第一个元素;
点赞帖子案例
redis> set user:1:post:1 'hello redis' 创建用户1 帖子1 内容
redis> lpush post:1:good 'friend1' 帖子1 被好友1 点赞
redis> lpush post:1:good 'friend2' 帖子1 被好友2 点赞
redis> lpush post:1:good 'friend3' 帖子1 被好友3 点赞
redis> llen post:1:good 帖子1 被点赞次数
redis> lrange post:1:good 0 2 帖子1 被那些好友点赞 start stop控制范围
回帖案例
redis> set user:1:post:2 'wohenshuai' 创建一个帖子2
redis> set postreply:1 'nonono' 创建一个回帖1
redis> set postreply:2 'hehe' 创建一个回帖2
redis> lpush post:2:replies 1 回帖1 和 帖子2关联
redis> lpush post:2:replies 2 回帖2 和 帖子2关联
redis> lrange post:2:replies 0 -1 查看帖子2的回帖
redis> get postreply:1 查看回帖1 内容
redis> get postreply:2 查看回帖2 内容
sets集合
SADD key member [member]
添加一个或多个指定的member元素的集合到key中;
如果member有重复的值,那么如果存入一个,另外的直接被忽略;
返回值是新添加到集合中的元素个数,不包括重复已存在的;SREM key member [member ...]
在key集合中移除指定的元素
返回值:在key集合中被移除的元素个数SISMEMBER key member
判断member值在key集合中是否存在;
返回值:存在/不存在 返回1/返回0SMEMBERS key
获取key集合中所有的元素;
返回值:key集合中所有的元素,以list方式返回;SCARD key (记忆法则:cardinal-基数)
获取key集合的存储的基数(集合元素的数量)SRANDMEMBER key [count]
随机返回key集合中count个元素SUNION key [key ...]
返回给定的多个集合的并集中的所有元素;SINTER key [key ...] (记忆法则:intersection-交集)
返回指定所有的集合的元素的交集SINTERSTORE destination key [key ...] (记忆法则:intersection-交集;store-存储)
获取key集合的元素交集,并将交集的元素存储到destination集合中;SDIFF key [key ...]
返回一个集合与给定集合没有的元素SDIFFSTORE destination key [key ...]
第一个集合中去除后面集合中的元素,并返回一个新的集合;
将新的集合元素存储到destination集合元素中
抽奖案例
初始化抽奖用户池:
redis>sadd luckdraws 'stef1' 'stef2' 'stef3' 'stef4' 'stef5' 'stef6' 'stef7' 'stef8' 'stef9' 'stef10' 'stef11' 'stef12'
redis>srandmember luckdraws 3 抽3个三等奖
redis>srem 'stef5' 'stef4' 'stef11' 移除中三等奖用户
redis>srandmember luckdraws 2 抽2个二等奖
redis>srem luckdraws 'stef9' 'stef7' 移除中二等奖用户
redis>srandmember luckdraws 1 抽1个一等奖
好友推荐可能认识的人案例
初始化好友用户组
redis>sadd user:1:friends 'user:2' 'user:3' 'user:5'
redis>sadd user:2:friends 'user:1' 'user:3' 'user:6'
redis>sadd user:3:friends 'user:1' 'user:7' 'user:8'
给user1推荐可能认识的好友
redis>sunionstore user:1:groups user:1:friends user:2:friends user:3:friends 对用户好友组进行组合
redis>sdiffstore ret:users user:1:groups user:1:friends 去除用户1中已经存在的好友
redis>srem ret:users 'user:1' 推荐好友中删除用户1自己
redis>srandmember ret:users 2 推荐好友中随机推荐2个给用户1
sorted sets有序集
SET是一种非常方法的结构,但是数据无序,redis提供了一个sorted set,每一个添加的值都有一个对应的分数,可以通过这个分数进行排序
- ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
添加到有序的set集合,key集合存储分数和成员;
NX:不更新存在的成员,只添加新成员;
XX:仅仅更新存在的成员,不添加新成员;
CH:修改返回值为发生变化的成员总数,原始的返回新添加成员的总数。
INCR:当ZADD指定这个选项时,成员的操作就等同zincrby命令,并对成员的分数进行递增操作;
ZRANGE key start stop [withscores]
指定全包含的区间start和stop的key的集合元素,配置withscores,返回的集合包含分数;ZCOUNT key min max
获取指定key集合分数范围在min~max内的成员数量;ZRANK key member
获取指定key集合成员中的排列等级(排列的索引)ZREVRANGE key start stop [WITHSCORES]
获取指定范围区间start~stop在key集合元素中的成员,并且分数以递减方式进行排序的元素列表;
配置withscores参数,列表中带有分数参数;ZINCRBY key increment member
设置key集合中member成员增加increment评分值;
游戏天梯排名
redis> zadd ladder 100 'stefE' 99 'stefA' 98 'stefB' 97 'stefD' 96 'stefC' 添加初始化天梯排名
redis> zrevrank ladder stefA 查询stefA在天梯的排名
redis> zrevrange ladder 0 2 查询天梯前三名
redis> zincrby ladder 20 'stefB' stefB增加20等级
hashes散列
hashes可以理解为一个map,这个map由一对一的字段和值组成;
一般可以使用hashes来保存一个对象;
HSET key field value
给key设置一个field和value的键值对;
返回值:
1:field是一个新的字段;
0:field原来在map里面已经存在;HGET key field
获取key的map中的该字段所关联的值HMSET key field value [field value]
设置key的map中的多个字段和值;HMGET key field [field ...]
获取key的map中的多个field字段的值;HGETALL key
获取key的map中的所有的字段和值;
返回值:字段名和值的list集合;HINCRBY key field increment
给指定的key的map的指定field字段的值增加increment;HKEYS key
获取指定key中的字段的名称的list集合;HDEL key field [field ...]
删除指定key的map中的指定的field字段(包含字段的值)