redis 数据类型常用命令和应用场景
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
name zhangsan user
age 12 user
password 123456
OK
# 取出所有字段
127.0.0.1:6379> mget user
name user
age user
password
1) "zhangsan"
2) "12"
3) "123456"
# 修改其中一个字段
127.0.0.1:6379> mset user
age 15
OK
127.0.0.1:6379> mget user
name user
age user
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
1001
(integer) 1
127.0.0.1:6379> incr article
1001
(integer) 2
127.0.0.1:6379> incr article
1001
(integer) 3
127.0.0.1:6379> incr article
1001
(integer) 4
127.0.0.1:6379> get article
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
zhangsan name zhangsan
(integer) 1
127.0.0.1:6379> hset hash
zhangsan age 12
(integer) 1
hget 取出value的值 hget key fied
127.0.0.1:6379> hget hash
zhangsan name
"zhangsan"
hsetnx 存储一个不存在的map hsetnx key field value
127.0.0.1:6379> hsetnx hsetnx
zhangsan name zhangsan
(integer) 1
127.0.0.1:6379> hget hsetnx
zhangsan name
"zhangsan"
127.0.0.1:6379> hsetnx hsetnx
zhangsan name zhangsan123
(integer) 0
127.0.0.1:6379> hget hsetnx
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
还没有评论,来说两句吧...