【Redis】redis的基本使用

📝个人主页:五敷有你
🔥系列专栏:Redis
⛺️稳中求进,晒太阳

Redis的概述
为什么要有redis?
redis是数据库,mysql也是数据库,redis做缓存的意义就是为了减轻数据库压力
数据库为什么有压力?
数据量大,查询频繁
mysql的查询底层逻辑?
mysql会将索引文件(类似于字典的目录)比如说id是个主键索引,会将所有的id以B+树的形式,存放的内存当中,而redis的查询是直接通过key去查,不用像mysql一样去遍历B+树。
Redis数据结构
Redis是一个key-value的数据库,key一般是String,不过value的类型多种多样

Redis的常用命令
查询命令的方法:
1. 官方文档
Commands | Redis
2. 命令行
help @String
Redis的通用命令
- KEYS:查看符合模板的所有key ,不建议在生成环境下使用(Redis是单线程的,导致其他的无法使用)

- DEL:删除一个指定的key

- EXISTS:判断是否存在

- EXPIRE:给一个key设置有效期,有效期到期时key会被自动删除
![]()
- TTL:查看一个KEY的剩余有效期(-1为永久有效,单位为s)
![]()
String的常见命令
- SET:添加或者修改已经存在的一个String类型的键值对
- GET:根据key获取String类型的value
- MSET:批量添加多个String类型的键值对
- MGET:根据多个key获取多个String类型的value

- INCR:让一个整数的key自增1
- INCRBY:让一个整数的key自增并指定步长
- INCRBYFLOAT:让一个浮点类型的数字自增,并指定步长

- SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

- SETEX:添加一个String类型的键值对,并且指定有效期

Key的结构
Redis的key允许有多个单词形成层级结构,多个单词之间用' : '隔开,格式如下:
项目名:业务名:类型:id
这个格式并非固定,可以根据自己的需求来删除或者添加词条。
例如:
set aqiuo:user:1 '{"id":1,"name":"Rys"}'
set aqiuo:user:2 '{"id":2,"name":"Zy"}'
set aqiuo:product:1 '{"id":2,"name":"Zy"}'
Hash类型
hash类型,又叫散列类型,其value是一个无序字典,类似于java中的hashMap结构
String结构是将对象序列化为JSON字符串后存储,当需要修改对象时很不方便

Hash的常用命令:
- HSET KEY FIELD VALUE:添加或修改hash类型key的fileld的值
![]()
- HGET key filed: 获取一个hash类型key的fileld的值.

- HMSET:批量添加多个hash类型key的fileld的值
- HMGET:批量获取多个hash类型key的field的值
- HGETALL:获取一个hash类型的key的所有field和value

- HKEYS:获取一个hash类型的key中所有的field

- HVALS:获取一个hash类型的key中所有的value

- HINCRBY:让一个hash类型key的字段值自增并指定步长

- HSETNX:添加一个hash类型的key的field的值,前提是这个field不存在,否则不执行

LIst类型
Redis的LIst类型与java中的LinkList类似,可以看做是一个双向链表结构。既可以支持正向检索,也可以反向检索
特征:
- 有序
- 元素可以重复
- 插入和删除块
- 查询速度一般.
List的常见命令:
- LPUSH key element...:向列表左侧插入一个或多个元素
- LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil(真就自己弹出来,内容就没了)
- RPUSH key element:向列表右侧插入一个或多个元素
- RPOP key:移除并返回右侧的第一个元素
- LRANGE key star end:返回一段角标范围内的所有元素

- BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

Set类型
Redis的set结构与java中的HashSet类似,可以看做是一个value为null的hashMap.
特征:
- 无序
- 元素不可重复
- 查找快
- 支持交集 并集 差集
常见命令
- SADD key member ...:向set中添加一个或多个元素
- SREM key member ...:移除set中指定元素
- SCARD key: 返回set中元素的个数
- SISMEMBER key member:判断一个元素是否存在于set中
- SMEMBERS key:获取set中的所有元素
- SINTER key1 key2...:求key1与key2的交集
- SDIFF key1 key2 ...:求key1与key2的差集
- SUNION key1 key2 ...:求key1和key2的并集
SortedSet类型
SortedSet是一个可排序的set集合,与java中的TreeSet有些类似。但底层数据结构差别很大,SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素进行排序。底层实现是一个跳表加hash表。
特征:
- 可排序
- 元素不重复
- 查询速度快
因为SortedSet的可排序特性,经常实现排行榜这样的功能
常见函数:
- ZADD KEY score member:添加一个或多个元素到sorted set,如果已经存在则更新其score值。
- ZREM key member:删除sorted set中的一个指定元素
- ZSCORE key member:获取sorted set中的指定元素的score值
- ZRANK key member:获取sorted set 中的指定元素的排名
- ZCARD key:获取sorted set中元素个数
- ZCOUNT key min max:统计score值在给定范围内元素的个数
- ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
- ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
- ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
- ZDIFF,ZINTER,ZUNION:求差集,交集,并集
注意:所有的排名都是默认升序,如果要降序,则在命令Z后面添加REV即可
相关文章:
【Redis】redis的基本使用
📝个人主页:五敷有你 🔥系列专栏:Redis ⛺️稳中求进,晒太阳 Redis的概述 为什么要有redis? redis是数据库,mysql也是数据库,redis做缓存的意义就是为了减轻数据库压力 数据库为什么…...
植物病害识别:YOLO水稻病害识别数据集(3000多张,3个类别,yolo标注)
YOLO水稻病害识别数据集,包含细菌性枯萎病,水稻瘟疫,褐斑病3个常见病害类别,共3000多张图像,yolo标注完整,可直接训练。 适用于CV项目,毕设,科研,实验等 需要此数据集或…...
Java实现Tron(波场)区块链的开发实践(三)波场链水龙头、WEB3测试实战
上一节我们具体讲到Java实现Tron波场链的逻辑代码实现。 这一节我们通过部署和开发好的代码,针对测试链进行自测开发,准备测试环境。 1. 创建离线地址 首先我们需要一个离线地址,我们不需要在线进行创建,直接可以通过第一节的离…...
010-$nextTick
$nextTick 1、问题2、$nextTick3、应用场景 1、问题 Vue 实现响应式,在 data 更新后,一定时间内,没有继续操作DOM,然后会触发浏览器渲染引擎去更新DOM,更新DOM也是需要时间的,所以 data 更新引起的 DOM更新…...
[IAGC] Kafka消费者组的负载均衡策略
在Apache Kafka中,负载均衡是通过将主题的每个分区分配给消费者组中的一个消费者来实现的。Kafka的负载均衡算法会尽可能平均地将分区分配给每个消费者。 文章目录 分配策略Kafka的重新平衡扩展性参考资源 分配策略 在Kafka中,有两种内置的分区分配策略…...
2024年会声会影 迎接来了七大新功能
我喜欢Corel VideoStudio 会声会影2024旗舰版,因为它使用起来很有趣。它很容易使用,但仍然给你很多功能和力量。VideoStudio让我与世界分享我的想法!“这个产品的功能非常多,我几乎没有触及它的表面,我可以做大量的编辑…...
AIGC、3D模型、轻量化、格式转换、可视化、数字孪生引擎等(老子云三维模型可视化优化服务平台)
老子云概述 老子云3D可视化快速开发平台,集云压缩、云烘焙、云存储云展示于一体,使3D模型资源自动输出至移动端PC端、Web端,能在多设备、全平台进行展示和交互,是全球领先、自主可控的自动化3D云引擎。 平台架构 平台特性 基于 H…...
JMM(Java Memory Model)内存模型
Java内存模型,规范了计算机内存与java虚拟机之间的协调工作,即规定了 将java 虚拟机中的变量存储到内存中和从内从中取出来的内存细节。 Java内存模型中规定了所有的变量都存储在内存中,每条线程还有自己的工作内存,线程对变量的…...
.NET 简介:跨平台、开源、高性能的开发平台
.NET 简介 .NET 是微软开发的一个免费、开源、跨平台的开发人员平台,用于构建各种类型的应用程序。它可以运行使用多种语言编写的程序,其中 C# 是最常用的语言。.NET 依赖于许多大规模应用在生产中使用的高性能运行时。 .NET 平台具有以下特点…...
m序列生成器
function [m] mserial_generator(tap_set) % m序列产生器 % 输出为m序列,未进行极性变换。 L 2^(length(tap_set)-1)-1; x [zeros(1,(length(tap_set)-2)) 1]; for i 1:1:Lm(i)x(end);for j 1:1:length(tap_set)-1sum_vector(j)tap_set(j1)*x(j);endsum_x mod…...
go的数据类型看这一篇就够了
目录 一:类型分类 二:介绍 一:类型分类 go的数据类型包含11种,可以分为以下四类。 1:基础类型:布尔,数字和字符串: 2:复合类型:数组和结构体 3:引用类型: 指针,channel通道,切片,map字典,函数 4:接口类型 二:介绍 1:布尔 一个布尔类型的值只有两种:tr…...
【机器学习300问】28、什么是决策树?
〇、两个预测任务 (1)任务一:银行预测偿还能力 当前,某银行正致力于发掘潜在的放贷用户。他们掌握了每位用户的三个关键特征:房产状况、婚姻状况以及年收入。此外,银行还拥有过往这些用户的债务偿还能力的…...
嵌入式学习33-网络通信
网络: 数据传输,数据共享 1.网络协议模型: OSI协议模型 7 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式&…...
FFmepg--内存IO模式
功能: 内存IO模式:avio_alloc_context(): 自定义读写文件方式,打开文件 api // 自定义IO AVIOContext * avio_alloc_context (unsigend char * buffer;int buffer_size;void *opaque;int (*read_packet)(void * opaque, uint8_t * buf,in…...
Android AMS
Android进阶:一口气读完《Android进阶解密》 - 掘金 Android AMS(Activity Manager Service)实现的功能 **管理应用程序的生命周期:**启动、停止、暂停、恢复和销毁应用程序。 **控制应用程序的启动顺序:**确保应用程…...
2024暑期实习八股笔记
文章目录 自我介绍MySQL索引索引种类、B树聚簇索引、非聚簇索引联合索引、最左前缀匹配原则索引下推索引失效索引优化 日志、缓冲池redo log(重做日志)刷盘时机日志文件组 bin log(归档日志)记录格式写入机制 两阶段提交undo log&…...
EDGE 音乐生成的可编辑舞蹈 论文学习笔记
本文不是很严谨,供学习参考,随时更新 EDGE: Editable Dance Generation From Music 音乐生成的可编辑舞蹈 GitHub - Stanford-TML/EDGE: Official PyTorch Implementation of EDGE (CVPR 2023) 1. 我们引入了一种基于扩散的舞蹈生成方法,该…...
laravel 模型多对多,应用
laravel 模型多对多,应用,试卷 跟 区域 多对多关系 一个试卷可以发放到a b c 区域 创建试卷表 CREATE TABLE exams (exam_id int(11) unsigned NOT NULL AUTO_INCREMENT,exam_title varchar(100) NOT NULL DEFAULT COMMENT 标题,created_time int(11…...
嵌入式学习35-网络通信UDP聊天及TCP
题目:基于UDP实现直播间聊天的功能 需求: 软件划分为用户客户端和主播服务端两个软件client.c和server.c 用户客户端负责: 1.接收用户的昵称 2.接收用户输入的信息,能够将信息发送给服务端 3.接收服…...
Python:if条件判断语句
注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 内容简介 比较运算符和关系运算符: 本文将介绍Python中常见的比较运算符,如 (等于)、! 和 <&…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
