学习Redis的基本命令
文章目录
- 学习Redis的基本命令
- 1、和key相关的
- 2、和String相关的
- 3、和Hash相关的
- 4、和List相关的
- 5、和Set相关的
- 6、和Sorted Set相关的
学习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
学习Redis的基本命令相关推荐
- 深入学习Redis(3):主从复制
原味链接:https://www.cnblogs.com/kismetv/p/9236731.html 前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持 ...
- Redis数据库教程——系统详解学习Redis全过程
Redis数据库教程--系统详解学习Redis全过程 Redis快速入门:Key-Value存储系统简介 Key-Value存储系统: Key-Value Store是当下比较流行的话题,尤其 ...
- 深入学习Redis(4):哨兵
前言 在 深入学习Redis(3):主从复制 中曾提到,Redis主从复制的作用有数据热备.负载均衡.故障恢复等:但主从复制存在的一个问题是故障恢复无法自动化.本文将要介绍的哨兵,它基于Redis主从 ...
- 深入学习Redis(1):Redis内存模型
前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...
- [深入学习Redis]RedisAPI的原子性分析
在学习Redis的常用操作时,经常看到介绍说,Redis的set.get以及hset等等命令的执行都是原子性的,但是令自己百思不得其解的是,为什么这些操作是原子性的? 原子性 原子性是数据库的事务中的 ...
- 【Redis笔记】一起学习Redis | 如何利用Redis实现一个分布式锁?
一起学习Redis | 如何利用Redis实现一个分布式锁? 前提知识 什么是分布式锁? 为什么需要分布式锁? 分布式锁的5要素和三种实现方式 实现分布式锁 思考思考 基础方案 改进方案 保证setn ...
- 深入学习Redis系列文章
深入学习Redis(1)Redis内存模型 深入学习Redis(2):持久化 深入学习Redis(3):主从复制
- 【程序厨】学习 Redis ,可以看看这个
哈喽,大家好,我是厨子. 昨天收到了一位学弟的私信,想让我写一下 Redis 的学习路线,因为他之前从来没有接触过 Redis ,甚至都没有听过.但是 Redis 是秋招面试重点,想问一下应该如何学习 ...
- 拿下阿里三面是后,面试官问我:你是怎么学习Redis的?
你是怎么学Redis的? 随着面试官的这一句话,我的思绪回到了刚毕业的时候,面试官也是这么问的我; 记得刚毕业时,我是在B站看视频入门的,入个门应付平时的CRUD完全没问题,但当工作中碰到问题的时候, ...
最新文章
- 赠书:一本书带你吃透Nginx应用与运维
- python量化投资必背代码-量化投资:用Python实现金融数据的获取与整理
- Camel In Action 读书笔记 (1)
- 如何用ASP.NET加密Cookie数据过程分析
- JNDI 和JDBC的区别
- 推动Windows的限制:USER和GDI对象 - 第1部分
- 临死之前我要写一本《中国哲学史——以自然主义和人道主义的矛盾为视角》...
- OFFICE2013工具栏消失后的处理
- 电信吉比特光纤猫虚拟服务器设置,吉比特光纤猫内置wifi怎样设置上网
- 做嵌入式经典网站!(转)
- 快速幂与快速矩阵幂(以大数下的斐波那契数列为例)
- [Unity-经验]从购买云服务器到发布Unity WebGL项目
- 欧拉定理及扩展(附证明)
- 新手看spdlog源码做笔记以及附上简单使用手册
- 我是深圳南山的集体户口,要将我老婆的户口随迁入深圳 没有房产,可以办深圳人才中心的集体户口吗
- c++正方形的面积源代码
- 学习java的培训学校
- 10、面试官对于分布式搜索引擎的4个连环炮
- 我心目中的伟人—卡尔.马克思
- 企信通短信平台接口文档