学习Redis的基本命令
在Redis难道有多个数据库?
在redis中默认是16个数据库、怎么在这些数据库之间 进行切换呢?
这个数据库的下标 0----15
默认选中的是 第0号数据库 默认数据存储也是存储到第0号数据库的
1、和key相关的
keys * :查看当前数据库中存在的键
select 数据库的下标 选中某一个数据库
del key :删除某一条数据
exists key :判定某一个key是否存在
token需要使用
所有缓存的地方都需要使用这个命令
expire key 过期时间 :这个命令可以用在前后分离项目中token设置的过期时间 过期之后 key会被删除
ttl key :查看这个key剩余的时间
场景:这个主要就是key如果是需要续期的话 就可以使用这个命令
返回-2 这个key不存在
返回-1 表示没有过期时间永远都有效
move key 数据库索引 :将一个key–value移动到另外一个数据库中去
场景:一般情况下做数据库的迁移(基本用的很少)
randomkey 随机返回一个key
```
2、和String相关的
set key value :在数据库中设置一个键值对的数据
get key :获取某一个值
场景:存储对象的数据
set user:1:userName xiaobobo
set user:1:password 123
set user:1:count 300
get user:1:userName 只取用户名
mset k v k1 v1 :同时设置多个键值对
mget k v k1 v1 :通古斯获取多个键值对的数据
场景:存储一个对象的数据
mset user:1:userName xiaobobo user:1:password 123 user:1:count 100
mget user:1:userName user:1:password user:1:count
incr key ;自增
decr key :自减
incrby key 步长 :一次性增加多少
decrby key 步长 :一次性减去多少
场景:多的很
怎么使用?
set weibo-readcount-{文章id} 0
incr weibo-readcount-1101
setnx key value:表示的是如果这个key不存在的话 那么就设置这个键值对
场景:主要是用在分布式的锁上面
3、和Hash相关的
hset 集合的名字 键的名字 值
hget 集合的名字 键的名字 值
hlen 集合的名字 键的名字 获取当前集合中值的数量
hdel 集合的名字 键的名字
hincrby 集合的名字 键的名字 增加的数量
hgetall 集合的名字 直接实现全选的功能
hexists 集合的名字 键的名字 (判断某个人是否有购物车)
hkeys 集合的名字 获取当前这个人的所有的购物车中的商品
hvals 集合的名字 取出当前集合中所有的值
场景:购物车
存购物车的数据
hset cart:100 100001 1
hset cart:100 10998 2
命令
hmset 集合的名字 键的名字 值的名字 键的名字 值的名字
hmget 集合的名字 键的名字 键的名字
场景:存储对象数据
hmset user 1:userName xiaobobo 1:password 123
hmset user 2:userName xiaowangzi 2:password 123
hmget user 2:userName 2:password
hmset dept 部门的id:部门的字段 值
4、和List相关的
lpush 键 值 :表示的是将一个或者多个值 插入到列表的表头
lpop 键 :移除并返回这个列表的头元素
rpush 键 值 :在列表的表位添加元素
rpop 键 从列表的右侧弹出元素
lrange 键 start stop
BLPOP 键:从列表的表头弹出一个元素 如果列表的表头没有元素 那么就阻塞等待
BRPOP 键:从列表的右侧弹出一个元素 如果没有元素 那么就阻塞等待
说明图
场景:栈的玩法
LPUSH + LPOP
场景:构造队列
LPUSH +RPOP
场景:阻塞队列
LPUSH+BRPOP
实际的应用场景
波波老师关注了 Modtech 还关注了 微博开放平台
假设现在 Mobtech发消息 消息的id : 10086
List结构来进行设计 要怎么设置
需求:波波老师现在关注了两个平台 这两个平台在发送消息的时候 只是发送给关注了这个平台的用户 现在 mobtech要发送消息给波波老师了 那么现在mobtech发送的这个消息 使用list结果如何来进行设计 就能够 让波波老师在登陆这个系统的时候 就自动的取到这个消息呢?
lpush mobtech:msg:{波波老师的id} 发送这条数据的id
lpush mobtech:msg:{刘磊老师的id} 发送这条数据的id
lpush weibo:msg:{波波老师id} 发送这条的id
lrange mobtech:msg:{波波老师id} 0 50
5、和Set相关的
命令
sadd 键 值 :就是向set集合中添加一个值 (可以用在点赞上)
srem 键 值 :删除这个键中的某一个值 (可以用在取消点赞上)
sismember 键 值 检查某一个值是否在这个集合中存在
smembers key :表示的是获取这个集合中的所有数据
srandmemebr key count :从集合中选出count个元素 ,元素不从key中删除(值是随机的)
spop key count :从集合中选中count个元素 元素从集合中删除
sinter key :做做交集运算
sinterstore desternation key:将交集的结果存入新的集合
sunion key :并集运算
sunionstore desternation key :将并集的结果存入这个集合
sdiff key :差集运算
adiffstore desternation key :将差集的结果存入这个集合
scard key :计算当前set集合中的元素的个数
适用场景
我要使用sadd 来存储当前这哥心情的点赞
怎么设计这个点赞才是最合理的?
点赞
sadd weixin:like:{消息的id} 用户的id
sadd 集合的名字 集合的值
取消点赞
srem weixin:like:10010 10 取消某一个人的点赞
检查某一个人是否点过赞
sismember weixin:10010 120 :检查id是120的用户是否点赞过这条消息
获取点赞的用户列表
smembers weixin:like:10010
获取当前点过赞的所有的用户
scard weixin:like:10010
多个集合之间运算
场景:
场景
波波老师 :关注了boboSet= { liulei dashixing}
刘磊老师:关注了liuleiSet={bobo dashixing yangjianhui hehanyu}
杨建辉老师: 关注了yangjianhuiSet={dashixing bobo liulei chengjunbo}
达世鑫老师{liulei yangjianhui bobo}
问题来了:
波波老师和杨建辉老师 共同关注的人
交集
sinter boboSet yangjianhuiSet
波波老师关注的人 也关注了他(刘磊)
1、找到波波老师关注了哪些人(除去刘磊老师)
dashixing liulei
2:找到dashixing老师集合
dashixinSet liuleiSet
3、只需要判断达世鑫老师的集合里面是否有 刘磊老师
sismember dashixinSet liulei
sismember liuleiSet liulei
bobo老师可能认识的人
和其他集合求差集就可以了(谁?)
1、获取波波老师关注的集合
smembers boboSet
2、波波老师关注的人的集合 和 波波的集合求差集
sdiff dashixingSet boboSet
sdiff liuleiSet boboSet
6、和Sorted Set相关的
备注:Sorted Set是自动根据打分实现排序的
看命令
zadd 集合的名字 打分 键的名字 :向Sorted Set中添加一个数据
zrange 集合的名字 开始的位置 结束的位置 获取集合中某一个区间的值
zincrby 集合的名字 加的分值 key的名字 //给某一个值添加分值
zrevrank 集合的名字 键的值 :查看当前数据的排名
zrem 集合的名字 键的名字 :删除某一条数据
zscore 集合的名字 键的名字
zcount 集合的名字 开始 结束 :获取得分在某一个区间类的数据的个数
场景:
就是给做最热商品 或者 人气商品的时候用
什么是最热商品 和 人气商品?
最热商品:购买数最多的 人气商品(点击量最多的、收藏量最多)
//假设最热商品
1:只要商品产生购买
zadd good:hot 10 商品id
又产生了购买
加分:zincrby 集合的名字 加的分值 key的名字
张三在直播平台看自己礼物的排名?
zrevrank 集合的名字 键的值 :查看当前数据的排名
产品下架了不卖了?
zrem good:hot goodId1 :删除某一条数据
人气得分(热度)
热度:弹幕的数量(算法)+不同礼物不同的得分+播放的时间点+粉丝数量
zscore good:hot goodId3
希望大家关注我一波,防止以后迷路,有需要的可以加我Q讨论互相学习java ,学习路线探讨,经验分享与java Q:2415773436