String操作
常用操作
#存储
SET key value |MSET key1 value1 key2 value2 ...
#新建一个键值对存储,通过返回1或0判断是否添加成功
SETNX key value true
#获取
GET key | MGET key1 key2 ...
#删除
DEL key | DEL key1 key2 ...
#设置过期时间
expire(秒)|pexpire(毫秒) key seconds
#取消过期时间
persist key
#查看过期时间
ttl(秒)|pttl(毫秒) key
运算
#将key中储存的数字值加1
INCR key
#将key中储存的数字值减1
DECR key
#将key所储存的值加上increment,过去key不存在则新建,value初始化为0
INCRBY key increment
#将key所储存的值减去decrement
DECRBY key decrement
----------------------------------------------
m:批量; expire:过期时间;nx:原子操作
set、mset、get、mget、del、expire、setnx
in:加; de:减; by 按量
incr、decr、incrby、decrby
----------------------------------------------
应用场景:
1、分布式锁
2、计数器,用于朋友圈点赞等
3、批量生成分布式ID
4、分布式Session
Hash操作
常用操作
#存储一个哈希表key的键值
HSET key field value
#新建一个键值对存储,通过返回1或0判断是否添加成功
HSETNX key field value
#在一个哈希表key中批量存储键值对
HMSET key field1 value1 field2 value2 ...
#获取哈希表key对应的field键值
HGET key field
#批量获取哈希表key中多个field键值
HMGET key field1 field1
#删除哈希表key中的field键值
HDEL key field1 field2 ...
#获取哈希表key中field的数量
HLEN key
#返回哈希表key中所有的键值
HGETALL key
#哈希表key中field键的值加上增量increment
HINCRBY key field increment
----------------------------------------------
H:哈希结构;len:长度;all:所有
hset、hget、hsetnx、hmset、hdel、hlen;hgetall
hincr、hdecr、hincrby、hdecrby
----------------------------------------------
应用场景:购物车设计
用户Id为key、商品id为filed、商品数量为value
#添加商品
hset user0001 1111 2
增加数量
hincrby user0001 1111 1
获取商品总数
hlen user0001
删除商品
hdel user0001 1111
获所有商品
hgetall user0001
List操作
常用操作
//将一个或多个值value插入到key列表的表头(最左边)
LPUSH key value [value ...]
//将一个或多个值value插入到key列表的表尾(最右边)
RPUSH key value [value ...]
//移除并返回key列表的尾元素
LPOP key
//移除并返回key列表的尾元素
RPOP key
//返回列表key中指定区间内的元素,区间以偏移量start和stop指定
LRANGE key start stop
//从key列表表头弹出一个元素,若列表中没有元素,阻塞等待timeout秒
BLPOP key [key ...] timeout
//从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒
BRPOP key [key ...] timeout
----------------------------------------------
l:left(左); r:right(右); push:压栈;pop:出栈; b:block(阻塞)
lpush、rpush、lpop、rpop、blpop、brpop
----------------------------------------------
使用场景
可以作为栈、队列、阻塞队列
Stack(栈) = LPUSH + LPOP
Queue(队列)= LPUSH + RPOP
Blocking MQ(阻塞队列)= LPUSH + BRPOP
----------------------------------------------
商品抢购场景:可以将商品从头部压入列表,另一个线程从队列中轮训获取商品数据进行处理,当list空了就会抛出异常,代表抢购商品售卖完了
关注公众号:
#用户userId001 关注公众号account111 account112 ...
lpush userId001 account111 account112 ...
#获取最近关注的0-3个公众号
lrange userId001 0 3
Set操作
常用操作
#新建一个Set集合
SADD key member member2 ...
#删除集合元素
SREM key member member2 ...
#获取集合所有元素
SMEMBERS key
#获取集合元素数量
SCARD key
#判断元素是否存在key中(1存在,0不存在)
SISMEMBER key member
#从集合中随机选取count个元素,元素不删除
SRANDMEMBER key count
#从集合中随机选取count个元素,元素删除
SPOP key [count]
运算
#获取key1 key2 ... 交集
SINTER key1 key2 ...
#将key1 key2 ...交集存入新集合destination中
SINTERSTORE destination key1 key2 ...
#获取key1 key2 ... 并集
SUNION key1 key2 ...
#将key1 key2 ...并集存入新集合destination中
SUNIONSTORE destination key1 key2 ...
#获取key1 key2 ... 差集
SDIFF key1 key2 ...
#将key1 key2 ...差集存入新集合destination中
SDIFFSTORE destination key1 key2 ...
----------------------------------------------
s:set结构;rem:remove(删除);member:成员;rand:随机;pop:出栈
sAdd、sRem、sMembers、sCard、sIsMember、sRandMember、sPop
inter:intersection(交集);store:储存;union:联合、并集;diff:different(不同的、差集)
sInter、sInterStore、sUnion、sUnionStore、sDiff、sDiffStore
----------------------------------------------
应用场景
抽奖程序:
#抽奖成员添加到集合
SADD key userId01 userId02 ...
#随机获取count个中奖者
SRANDMEMBER key count /SPOP key [count]
----------------------------------------------
朋友圈点赞功能
#点赞
SADD myId:newsId:like userid
取消点赞
SREM myId:newsId:like userid
3) 检查用户是否点过赞
SISMEMBER myId:newsId:like userid
4) 获取点赞的用户列表
SMEMBERS myId:newsId:like
5) 获取点赞用户数
SCARD myId:newsId:like
Zset操作
常用操作
#往集合key中加入带分值元素
ZADD key score1 member1 score2 member2 ...
#从集合中删除元素
ZREM key member1 member2 ...
#返回集合key中元素member的分值
ZSCORE key member
#为集合key中元素member的分值加上increment
ZINCRBY key increment member
#返回集合key中元素个数
ZCARD key
#正序获取集合key从start下标到stop下标的元素
ZRANGE key start stop WITHSCORES
#倒序获取集合key从start下标到stop下标的元素
ZREVRANGE key start stop WITHSCORES
运算
#并集计算
ZUNIONSTORE destination numkeys key1 key2...
#交集计算
ZINTERSTORE destination numkeys key1 key2...
#destination:新的集合的key、numkeys集合的个数
# 新集合number分值是多个集合中分值的和
----------------------------------------------
z:zset结构;rem:remove(删除);Score:得分;in:加;by 按量;Range:范围;rev:reverse(倒序)
zAdd、zRem、zScore、zIncrBy、zCard、zReange、zRevRange
inter:intersection(交集);store:储存;union:联合、并集;
zUnionStore、zinterStore
----------------------------------------------
应用场景
#点击新闻
ZINCRBY news:20230220 1 新闻
#当日排行前十
ZREVRANGE news:20230220 0 9 WITHSCORES
#三日搜索榜单
ZUNIONSTORE news:20230220-news:20230222 3 news:20230220 news:20230221 news:20230220
#三日搜索榜单前十
ZREVRANGE news:20230220-news:20230222 0 9 WITHSCORES