redis 笔记
1. string
1.1 string常用命令
-
set,get
127.0.0.1:6379> set user:key userValue OK 127.0.0.1:6379> get user:key "userValue"
-
mset,mget
假如我要存储多个key value, 如用户信息 {“name”:“zhangsan”,“age”:“12”,“password”:“123456”}
用set,get的话,需要1.取出json 2.解析json 3.修改json 4.转成json 5.进行存储
用mget 和mset 就特别方便
127.0.0.1:6379> mset user:zhangsan:name zhangsan user:zhangsan:age 12 user:zhangsan:password 123456 OK # 取出所有字段 127.0.0.1:6379> mget user:zhangsan:name user:zhangsan:age user:zhangsan:password 1) "zhangsan" 2) "12" 3) "123456" # 修改其中一个字段 127.0.0.1:6379> mset user:zhangsan:age 15 OK 127.0.0.1:6379> mget user:zhangsan:name user:zhangsan:age user:zhangsan:password 1) "zhangsan" 2) "15" 3) "123456"
-
setnx 当有当前key时,不做任何操作, 当没有时,做插入操作
127.0.0.1:6379> setnx nxtest nxvalue (integer) 1 127.0.0.1:6379> get nxtest "nxvalue" 127.0.0.1:6379> setnx nxtest nxvalue123 (integer) 0 127.0.0.1:6379> get nxtest "nxvalue"
-
incr 计数器
127.0.0.1:6379> incr article:readcount:1001 (integer) 1 127.0.0.1:6379> incr article:readcount:1001 (integer) 2 127.0.0.1:6379> incr article:readcount:1001 (integer) 3 127.0.0.1:6379> incr article:readcount:1001 (integer) 4 127.0.0.1:6379> get article:readcount:1001 "4"
1.2 string 的应用场景
-
springsession
-
分表里面的维护全局序列号
-
每次取出1000个id
127.0.0.1:6379> incrby sequence:tablename 1000 (integer) 1000 127.0.0.1:6379> incrby sequence:tablename 100 (integer) 1100 127.0.0.1:6379> incrby sequence:tablename 1000 (integer) 2100
-
将1000个数据存到本地缓存
比如:取出的数据是2100,则可以使用的id范围是 1100 ~ 2100
-
用完了再次获取
-
2. hash
2.1 hash 常用命令
结构为,key-map
-
hset 设置map 属性 hset key field value
127.0.0.1:6379> hset hash:user:zhangsan name zhangsan (integer) 1 127.0.0.1:6379> hset hash:user:zhangsan age 12 (integer) 1
-
hget 取出value的值 hget key fied
127.0.0.1:6379> hget hash:user:zhangsan name "zhangsan"
-
hsetnx 存储一个不存在的map hsetnx key field value
127.0.0.1:6379> hsetnx hsetnx:user:zhangsan name zhangsan (integer) 1 127.0.0.1:6379> hget hsetnx:user:zhangsan name "zhangsan" 127.0.0.1:6379> hsetnx hsetnx:user:zhangsan name zhangsan123 (integer) 0 127.0.0.1:6379> hget hsetnx:user:zhangsan name "zhangsan"
-
hmset 多个键值对一块存储 hmset key field1 value1 field2 value2
127.0.0.1:6379> hmset hmset:user name zhangsan age 14 password 123456 OK 127.0.0.1:6379> hget hmset:user name "zhangsan" 127.0.0.1:6379>
-
hmget 多个键值对一块取 hmget key field1 field2 field3
127.0.0.1:6379> hmget hmset:user name age password 1) "zhangsan" 2) "14" 3) "123456"
-
hdel 删除hash表中 field的值 hdel key field [field …]
127.0.0.1:6379> hdel hmset:user name password (integer) 2 127.0.0.1:6379> hmget hmset:user name age password 1) (nil) 2) "14" 3) (nil) 127.0.0.1:6379>
-
hlen 返回hash表中field的数量 hlen key
127.0.0.1:6379> hlen hmset:user (integer) 1
-
hgetall 返回所有hash表中所有的键值 hgetall key
127.0.0.1:6379> hmset hmset:user name zhangsan age 14 password 123456 OK 127.0.0.1:6379> hgetall hmset:user 1) "age" 2) "14" 3) "name" 4) "zhangsan" 5) "password" 6) "123456"
-
hincrby 为hash表中field中的值加上增量 increment hincrby key field
127.0.0.1:6379> hincrby hmset:user increment 10 (integer) 10 127.0.0.1:6379> hget hmset:user increment "10"
2.2 hash应用场景
-
购物车的实现
-
以用户id为key,商品id为field ,商品数量为value
-
添加购物车 添加 商品id为1001 到zhangsan的购物车,添加数量为1
127.0.0.1:6379> hset car:zhangsan 1001 1 (integer) 1 127.0.0.1:6379> hget car:zhangsan 1001 "1"
-
增加数量 将zhangsan的购物车中的商品id为1001的 增加一个
127.0.0.1:6379> hincrby car:zhangsan 1001 1 (integer) 2
-
购物车中的商品总数 获取zhangsan购物车中的商品的总数
# 之前增加了 1001和1002 两个商品 127.0.0.1:6379> hlen car:zhangsan (integer) 2
-
删除商品 移除 zhangsan购物初中id为1001的商品
127.0.0.1:6379> hdel car:zhangsan 1001 (integer) 1
-
获取所有商品列表 获取zhangsan购物车的所有列表
127.0.0.1:6379> hgetall car:zhangsan 1) "1002" 2) "1"
-
3. list
3.1 list 常用命令
-
lpush 将一个或多个插入到列表的左侧 lpush key value [value …]
127.0.0.1:6379> lpush lpush:info zhangsan lisi wangwu (integer) 3
-
rpush 将一个或多个插入到列表的右侧 rpush key value [value …]
127.0.0.1:6379> rpush lpush:info aa bb cc (integer) 6
-
lpop 移除最左头元素,并返回移除的元素 lpop key
127.0.0.1:6379> lpop lpush:info "wangwu"
-
rpop 移除最右侧头元素,并返回移除的元素 rpop key
127.0.0.1:6379> rpop lpush:info "cc"
-
lreange 返回区间范围的列表 lrange key start end
# 目前里面的元素从左至右依次是 lisi,zhangsan,aa,bb 127.0.0.1:6379> lrange lpush:info 2 3 1) "aa" 2) "bb" 127.0.0.1:6379> lrange lpush:info 1 3 1) "zhangsan" 2) "aa" 3) "bb" 127.0.0.1:6379> lrange lpush:info 0 3 1) "lisi" 2) "zhangsan" 3) "aa" 4) "bb"
-
blpop 从key列表中弹出左侧第一个元素,若列表中没有该元素,阻塞等到timeout秒,如果timeout=0,则一直阻塞 blpop key [key…] timeout
# 一直阻塞 127.0.0.1:6379> blpop blpush:info 0 # 向blpush:info添加 zhangsan 127.0.0.1:6379> lpush blpush:info zhangsan (integer) 1 # 弹出第一个元素 127.0.0.1:6379> blpop blpush:info 0 1) "blpush:info" 2) "zhangsan" (34.55s)
-
brpop 从key列表中弹出右侧第一个元素,若列表中没有该元素,阻塞等到timeout秒,如果timeout=0,则一直阻塞 brpop key [key…] timeout
# 一直阻塞 127.0.0.1:6379> brpop brpush:info 0 # brpush:info添加 zhangsan 127.0.0.1:6379> lpush brpush:info aa (integer) 1 # 弹出第一个元素 127.0.0.1:6379> brpop brpush:info 0 1) "brpush:info" 2) "aa" (12.55s)
3.2 list 应用场景
-
stack 栈
Stack = lpush + lpop 先进后出
-
queue队列
Queue = lpush + rpop 先进先出
-
blocking mq 阻塞队列
Blocking MQ = lpush + brpop
4. set
4.1set 常用命令
-
sadd 往集合key中存入元素,若元素存在则忽略,不存在的新增
sadd key member [member…]
127.0.0.1:6379> sadd set:info zhangsan lisi wangwu (integer) 3 # 此处因为zhangsan已经存在,则忽略 127.0.0.1:6379> sadd set:info zhangsan aa (integer) 1
-
srem 从集合key中删除元素
srem key member [members]
127.0.0.1:6379> srem set:info aa (integer) 1
-
smembers 获取key中所有元素
smembers key
127.0.0.1:6379> smembers set:info 1) "zhangsan" 2) "wangwu" 3) "lisi"
-
scard 获取元素的个数
scard key
127.0.0.1:6379> scard set:info (integer) 3
-
sismember 判断元素是否在集合中
sismember key member
127.0.0.1:6379> sismember set:info zhangsan (integer) 1
-
srandmember 从集合key中随机选出count个元素,元素不从key中删除
srandmember key count
127.0.0.1:6379> srandmember set:info 2 1) "lisi" 2) "wangwu" 127.0.0.1:6379> srandmember set:info 2 1) "lisi" 2) "wangwu" 127.0.0.1:6379> srandmember set:info 2 1) "zhangsan" 2) "lisi"
-
spop 从集合key中随机选出count个元素,元素从key中删除
spop key count
127.0.0.1:6379> smembers set:info 1) "zhangsan" 2) "wangwu" 3) "lisi" 127.0.0.1:6379> spop set:info 1 1) "zhangsan" 127.0.0.1:6379> smembers set:info 1) "wangwu" 2) "lisi" 127.0.0.1:6379>
-
sinter 交集运算
sinter key [key…]
127.0.0.1:6379> sadd set:01 aa bb cc (integer) 3 127.0.0.1:6379> sadd set:02 bb cc dd (integer) 3 127.0.0.1:6379> sinter set:01 set:02 1) "cc" 2) "bb" 127.0.0.1:6379>
-
sinterstore 将交集运算存入新的集合中
sinterstote newKey key [key…]
127.0.0.1:6379> sinterstore set:03 set:01 set:02 (integer) 2 127.0.0.1:6379> smembers set:03 1) "bb" 2) "cc"
-
sunion 并集运算
sunion key [keys]
127.0.0.1:6379> sunion set:01 set:02 1) "dd" 2) "cc" 3) "bb" 4) "aa"
-
sunionstore 将并集运算存入新的集合中
sunionstore newkey key [key…]
127.0.0.1:6379> sunionstore set:04 set:01 set:02 (integer) 4 127.0.0.1:6379> smembers set:04 1) "dd" 2) "cc" 3) "bb" 4) "aa"
-
sdiff 差集运算
sdiff key [key…]
127.0.0.1:6379> sdiff set:01 set:02 1) "aa"
-
sdiffstore 将差集运算存入新的集合中
sdiffstore newkey key [key…]
127.0.0.1:6379> sdiffstore set:05 set:01 set:02 (integer) 1 127.0.0.1:6379> smembers set:05 1) "aa" 127.0.0.1:6379>
4.2 set应用场景
-
抽奖小程序
-
点击参与抽奖
sadd key userId
-
查看参与抽奖所有用户
smembers key
-
抽取count名中中奖者
srandmember key count / spop key count
-
-
微信,微博点赞收藏标签
-
点赞
sadd like:{消息id} userID
-
取消点赞
srem like:{消息id} userID
-
检查用户是否点过赞
sismember like:{消息id} userID
-
获取点赞的用户列表
smembers like:{消息id}
-
获取顶赞用户数
scard like:{消息id}
-
5. zset
5.1 zset 常用命令
- zadd 往有序集合中加入带分值元素
zadd key score member [score member …]
127.0.0.1:6379> zadd zset:info 1 zhangsan 2 lisi 3 wangwu
(integer) 3
-
zrem 删除元素
zrem key member [member…]
127.0.0.1:6379> zrem zset:info zhangsan (integer) 1 127.0.0.1:6379> zrange zset:info 0 10 1) "lisi" 2) "wangwu"
-
zscore 返回member的分值
zscore key member
127.0.0.1:6379> zscore zset:info lisi "2"
-
zincrby 为member增加分值
zincrby key increment menber
127.0.0.1:6379> zincrby zset:info 2 lisi "4" 127.0.0.1:6379> zscore zset:info lisi "4"
-
zcard 返回集合中元素的个数
zcard key
127.0.0.1:6379> zcard zset:info (integer) 2
-
zrange 正序获取集合中 从start 到stop 下表的元素
zrange key start stop
127.0.0.1:6379> zadd zset:01 1 aa 2 bb 3 cc 4 dd 5 ee 6 ff (integer) 6 127.0.0.1:6379> zrange zset:01 2 3 1) "cc" 2) "dd"
-
zrevrange 倒序获取集合中 从start 到stop 下表的元素
zrevrange key start stop
127.0.0.1:6379> zrevrange zset:01 2 3 1) "dd" 2) "cc"
-
zunionstore 并集计算,将计算的结果存入新的key
zunionstore newkey numkeys key [key…] numkeys:计算key的数量,本次为2
127.0.0.1:6379> zadd zset:01 1 aa 2 bb 3 cc 4 dd 5 ee 6 ff (integer) 6 127.0.0.1:6379> zadd zset:02 4 dd 5 ee 6 ff 7 gg 8 hh (integer) 5 127.0.0.1:6379> zunionstore zset:03 2 zset:01 zset:02 (integer) 8
-
zinterstore 交集计算 将计算的结果存入新的key
zinterstore newkey numkeys key [key…] numkeys:计算key的数量,本次为2
127.0.0.1:6379> zinterstore zset:04 2 zset:01 zset:02 (integer) 3
5.2 zset 应用场景
-
热搜排行榜
-
点击新闻
zincrby hotNews:20201101 1 守护香港
-
展示当日排行前十
zrevrange hotNews:20201101 0 9 withscores
-
七日搜索榜单计算
zunionstore hotNews:20201101-20201107 7 hotNews:20201101 hotNews:20201102 …hotNews:20201107
-
展示七日排行前十
zrevrange hotNews:20201101-20201107 0 9 withscores
-