Redis使用基础
1 redis介绍
Redis(Remote Dictionary Server ),即远程字典服务 ! 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
免费和开源!是当下最热门的 NoSQL 技术之一!也被人们称之为结构化数据库!
1.1 redis优势 memcache
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势:
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
- Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
- Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
1.2 应用场景
redis的应用越来越多,已经不单单只是为了解决高速缓存的问题。redis官方更是推出了 Redis Stack 模块,帮助企业更加快速的构建一些复杂的开发场景。
关于它当下比较流行的十大场景,可以看一下这篇文章:(https://blog.csdn.net/m0_51358164/article/details/125927452)
2 安装redis
虽然redis现在已经支持在windows上进行安装了,但是在实际的开发应用中还是在Linux系统中安装使用。
鉴于我们之前已经学习过Linux系统的基本操作,因此我们这里直接安装到Linux系统中【依然是VM虚拟机】。
具体的安装过程,参考Linux开发环境部署讲义
3 redis基础
3.1 数据库说明
redis默认有16个数据库,这些数据库分别用【0-15】的索引值来表示。并且redis是没有表的概念的,你可以把它的每个数据库,看成一张表。
# 切换数据库,2代表数据库索引
select 2
在配置文件中有说明,你也可以修改它,改完记得重启服务。
3.2 连接命令
redis 客户端(redis-cli)在连接redis数据库时执行的命令。
# 查看命令帮助
redis-cli --help
# 语法结构为
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]-h <hostname> 服务器主机名,默认为 127.0.0.1-p <port> 服务器端口,默认为 6379-s <socket> 服务器套接字,覆盖主机名和端口-a <password> 连接到服务器时要使用的密码。你也可以使用 REDISCLI_AUTH 环境变量来更安全地传递这个密码(如果两者都使用,这个参数会优先使用)-u <uri> 服务器URI-r <repeat> 执行指定的命令 N 次-i <interval> 当使用 -r 时,每个命令等待 <interval> 秒。可以指定亚秒时间,如 -i 0.1-n <db> 数据库编号-x 从 STDIN(标准输入)读取最后一个参数。-d <delimiter> 用于原始格式的多块分隔符 (默认: \n)-c 启用集群模式(遵循 -ASK 和 -MOVED 的重定向)--raw 对回复使用原始格式 (当 STDOUT 不是 tty 时默认)--no-raw 强制格式化输出,即使 STDOUT 不是 tty--csv CSV格式输出--stat 打印关于服务器的滚动统计信息: mem, clients,...--latency 进入特殊模式连续采样延时。如果你在交互会话中使用这种模式,它会一直运行,显示实时数据。否则,如果指定了——raw或——csv,或者将输出重定向到非 TTY,它对1秒的延迟进行采样 (您可以使用 -i 来更改间隔),然后产生一个输出并退出。--latency-history 比如延迟,但是跟踪延迟会随着时间变化。默认时间间隔为15秒,请使用-i修改。--latency-dist 将延迟显示为光谱,需要xterm 256 色。默认时间间隔为1秒,请使用-i修改。--lru-test <keys> 用 80-20 分布模拟缓存工作负载。--replica 模拟一个副本,显示从主机接收到的命令。--rdb <filename> 从远程服务器传输 RDB 转储到本地文件。--pipe 从stdin向服务器传输原始Redis协议。--pipe-timeout <n> 在 --pipe 模式下,在发送完所有数据后,如果 <n> 秒内未收到回复,则错误终止。默认超时时间为: 30。用 0 表示永远等待。--bigkeys Redis 键的样本,寻找有许多元素的键(复杂性)--memkeys Redis 键的样本,查找占用大量内存的键--memkeys-samples <n> Redis 键的样本,查找占用大量内存的密钥,并允许定义要采样的关键元素的数量--hotkeys 寻找热键的 Redis 键样本,仅在 maxmemory-policy 为 *lfu 时有效。--scan 使用 SCAN 命令列出所有键--pattern <pat> 与 --scan 一起使用,可以指定一个 SCAN 模式--intrinsic-latency <sec> 运行一个测试来测量内在的系统延迟,测试将运行指定的秒数。--eval <file> 使用 Lua 脚本在 <file> 发送 EVAL 命令。--ldb 与 --eval 一起使用,启用 Redis Lua 调试器。--ldb-sync-mode 与 --ldb 类似,但使用同步 Lua 调试器,在这种模式下,服务器被阻塞,脚本更改不会从服务器内存回滚。--cluster <command> [args...] [opts...] 集群管理器命令和参数 (参见下面)--verbose 详细模式--no-auth-warning 在命令行界面上使用密码时不显示警告信息--help 输出这个帮助并退出--version 输出版本并退出
操作示例:
# 打开本地默认的redis服务 127.0.0.1:6379
redis-cli# 根据端口号打开本地的redis服务
redis-cli -p port# 根据端口号和密码打开本地redis
redis-cli -p port -a password# 根据IP地址、端口号、密码、打开远程redis
redis-cli -h host -p port -a password# 最后接shutdown可关闭redis服务,或在连接工具中使用shutdown也可关闭redis
redis-cli -h IP地址 -p 端口号 -a 密码 shutdown# redis-cli连接工具关闭服务
127.0.0.1:6379> shutdown # 直接关闭服务
127.0.0.1:6379> shutdown nosave # 直接关闭服务,不保存所有数据
127.0.0.1:6379> shutdown save # 关闭服务,并保存所有数据
3.3 key命令
Redis 键命令用于管理 redis 的键,Redis 键命令的基本语法如下:
命令符 keyName [数值]
127.0.0.1:6379> set mykey hello,world!
OK
127.0.0.1:6379> get mykey
"hello,world!"
127.0.0.1:6379> del mykey
(integer) 1
上面实例演示使用 set 命令向 Redis 添加一个 KEY,通过 get 命令获取 KEY 的数据,最后使用 del 命令删除 KEY。如果键被删除成功,命令执行后输出 (integer) 1,否则将输出 (integer) 0
常用的用来操作key的命令
命令 | 返回内容 | 说明 |
---|---|---|
set name jack | ok提示 | 添加一个key为name,value为jack的键值对。如果key已存在,内容替换 |
get name | value值 | 查看key为name的value值 |
dump name | 序列化值 | 序列化给定 key,并返回被序列化的值 |
rename name username | ok提示 | 修改key的名字,name变为username |
del name | 整数(删除数量) | 删除指定key,可以后面跟 , 号写多个,同时删除多个 |
exists name | 整数 | 判断key为name是否存在,1为存在,0为不存在 |
move name 1 | 整数 | 移动key为name的数据到数据库1中,本库删除 |
ttl name | 整数(秒) | 查询key为name的数据有效时间 >0 有存活时间,且时间正在倒计时 -1 一直有效 -2 已失效 |
expire name 15 | 整数(影响数量) | 设置key为name的值,15秒后失效 |
expireat name 1677341411 | 整数(影响数量) | 设置到期时间戳,就是指定具体的年与日时分秒到期,网上有转换工具 |
persist name | 整数(影响数量) | 移出到期时间,变为-2的key不能通过该命令恢复活性,需要重新set |
randomkey | key名 | 从当前数据库中随机返回一个 key |
type name | 数据类型 | 获取改值的数据类型 |
keys * | 键名称 | 查找符合匹配规则的key名称,如果为空返回(empty array) *代表0到任意个,?代表一个 例如: keys *a* ,keys ?a? |
flushall | ok提示 | 清空所有库的内容,注意这个命令一定会成功 |
clear | 无返回内容 | 清空当前操作屏幕 |
3.4 键值设计规约
key命名风格
**【推荐】**Redis key命名需具有可读性以及可管理性,不该使用含义不清的key以及特别长的key名;
【强制】以英文字母开头,命名中只能出现小写字母、数字、英文点号(.)和英文半角冒号(😃;
【强制】不要包含特殊字符,如下划线、空格、换行、单双引号以及其他转义字符;
命名规范
【强制】命名规范:业务模块名:业务逻辑含义:其他:value类型
1 )业务模块名:具体的功能模块
2)逻辑含义段:
【强制】不同业务逻辑含义使用英文半角冒号(:)分割,
**【强制】**同一业务逻辑含义段的单词之间使用英文半角点号 (.)分割,用来表示一个完整的语义
3)value类型:
**【强制】**Redis key命名以key所代表的value类型结尾,以提高可读性;
示例:user:basic.info:{userid}:string
value 设计
【强制】:拒绝bigkey(防止网卡流量、慢查询)。
String类型控制在10KB以内,Hash、List、Set、ZSet元素个数不要超过5000。
更多学习,点击这里学习Redis支持的数据类型。
相关文章:

Redis使用基础
1 redis介绍 Redis(Remote Dictionary Server ),即远程字典服务 ! 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并…...

PyCharm+RobotFramework框架实现UDS自动化测试- (四)项目实战0x10
1.环境搭建 硬件环境:CANoe、待测设备(包含UDS诊断模块) 2.pythonPyCharm环境 pip install robotframework pip install robotframework-ride pip install openpyxl pip install udsoncan pip install python-can pip install can-isotp3…...

【TCP】rfc文档
tcp协议相关rfc有哪些 TCP(传输控制协议)是一个复杂的协议,其设计和实现涉及多个RFC文档。以下是一些与TCP协议密切相关的RFC文档列表,按照时间顺序排列,涵盖了从基础定义到高级特性和优化的各个方面: 基…...

【SpringCloud】黑马微服务学习笔记
目录 1. 关于微服务 ?1.1 微服务与单体架构的区别 ?1.2 SpringCloud 技术 2. 学习前准备 ?2.1 环境搭建 ?2.2 熟悉项目 3. 正式拆分 ?3.1 拆分商品功能模块 ?3.2 拆分购物车功能模块 4. 服务调用 ?4.1 介绍 ?4.2 RustTemplate?的使用 4.3 服务治理-注册中…...

梯度提升决策树树(GBDT)公式推导
### 逻辑回归的损失函数 逻辑回归模型用于分类问题,其输出是一个概率值。对于二分类问题,逻辑回归模型的输出可以表示为: \[ P(y 1 | x) \frac{1}{1 e^{-F(x)}} \] 其中 \( F(x) \) 是一个线性组合函数,通常表示为ÿ…...

【MySQL】表的基本操作
??表的基本操作 文章目录: 表的基本操作 创建查看表 创建表 查看表结构 表的修改 表的重命名 表的添加与修改 删除表结构 总结 前言: 在数据库中,数据表是存储和组织数据的基本单位,对于数据表的操作是每个程序员需要烂熟…...

项目中使用的是 FastJSON(com.alibaba:fastjson)JSON库
从你的 pom.xml 文件中可以看到,项目明确依赖了以下 JSON 库: FastJSON: <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version> </depende…...

Flutter中PlatformView在鸿蒙中的使用
Flutter中PlatformView在鸿蒙中的使用 概述在Flutter中的处理鸿蒙端创建内嵌的鸿蒙视图创建PlatformView创建PlatformViewFactory创建plugin,注册platformview注册插件 概述 集成平台视图(后称为平台视图)允许将原生视图嵌入到 Flutter 应用…...

音频入门(一):音频基础知识与分类的基本流程
音频信号和图像信号在做分类时的基本流程类似,区别就在于预处理部分存在不同;本文简单介绍了下音频处理的方法,以及利用深度学习模型分类的基本流程。 目录 一、音频信号简介 1. 什么是音频信号 2. 音频信号长什么样 二、音频的深度学习分…...

规避路由冲突
路由冲突是指在网络中存在两个或多个路由器在进行路由选择时出现矛盾,导致网络数据包无法正确传输,影响网络的正常运行。为了规避路由冲突,可以采取以下措施: 一、合理规划IP地址 分配唯一IP:确保每个设备在网络中都有…...

SQLmap 自动注入 -02
1: 如果想获得SQL 数据库的信息,可以加入参数: -dbs sqlmap -u "http://192.168.56.133/mutillidae/index.php?pageuser-info.php&usernamexiaosheng&passwordabc&user-info-php-submit-buttonViewAccountDetails" --batch -p username -dbs…...

4.JoranConfigurator解析logbak.xml
文章目录 一、前言二、源码解析GenericXMLConfiguratorlogback.xml解析通过SaxEvent构建节点model解析model节点DefaultProcessor解析model 三、总结 一、前言 上一篇介绍了logback模块解析logback.mxl文件的入口, 我们可以手动指定logback.xml文件的位置, 也可以使用其它的名…...

React 19 新特性总结
具体详见官网: 中文:React 19 新特性 英文:React 19 新特性 核心新特性 1. Actions 解决问题:简化数据变更和状态更新流程 以前需要手动处理待定状态、错误、乐观更新和顺序请求需要维护多个状态变量(isPending, error 等) 新…...

kafka学习笔记6 ACL权限 —— 筑梦之路
在Kafka中,ACL(Access Control List)是用来控制谁可以访问Kafka资源(如主题、消费者组等)的权限机制。ACL配置基于Kafka的kafka-acls.sh工具,能够管理对资源的读取、写入等操作权限。 ACL介绍 Kafka的ACL是…...

【Java】Java抛异常到用户界面公共封装
前言 在Java中处理代码运行异常是常见的技术点之一,我们大部分会使用封装的技巧将异常进行格式化输出,方便反馈给用户界面,也是为了代码复用 看看这行代码是怎么处理异常的 CommonExceptionType.SimpleException.throwEx("用户信息不…...

基于Redis实现短信验证码登录
目录 1 基于Session实现短信验证码登录 2 配置登录拦截器 3 配置完拦截器还需将自定义拦截器添加到SpringMVC的拦截器列表中 才能生效 4 Session集群共享问题 5 基于Redis实现短信验证码登录 6 Hash 结构与 String 结构类型的比较 7 Redis替代Session需要考虑的问题 8 …...

步入响应式编程篇(二)之Reactor API
步入响应式编程篇(二)之Reactor API 前言回顾响应式编程Reactor API的使用Stream引入依赖Reactor API的使用流源头的创建 reactor api的背压模式发布者与订阅者使用的线程查看弹珠图查看形成新流的日志 前言 对于响应式编程的基于概念,以及J…...

Oracle SQL: TRANSLATE 和 REGEXP_LIKE 的知识点详细分析
目录 前言1. TRANSLATE2. REGEXP_LIKE3. 实战 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. TRANSLATE TRANSLATE 用于替换字符串中指定字符集的每个字符,返回替换后的字符串 逐一映射输入字…...

RabbitMQ 在实际应用时要注意的问题
1. 幂等性保障 1.1 幂等性介绍 幂等性是数学和计算机科学中某些运算的性质,它们可以被多次应⽤,⽽不会改变初始应⽤的结果. 应⽤程序的幂等性介绍 在应⽤程序中,幂等性就是指对⼀个系统进⾏重复调⽤(相同参数),不论请求多少次,这些请求对系统的影响都是相同的效果. ⽐如数据库…...

算法日记8:StarryCoding60(单调栈)
一、题目 二、解题思路: 题意为让我们找到每个元素的左边第一个比它小的元素,若不存在则输出-1 2.1法一:暴力(0n2) 首先,我们可以想到最朴素的算法:直接暴力两层for达成目标核心代码如下&…...

大象机器人发布首款穿戴式数据采集器myController S570,助力具身智能数据收集!
myController S570 具有较高的数据采集速度和远程控制能力,大大简化了人形机器人的编程。 myController S570 是一款可移动的轻量级外骨骼,具有 14 个关节、2 个操纵杆和 2 个按钮,它提供高数据采集速度,出色的兼容性,…...

【银河麒麟高级服务器操作系统】业务访问慢网卡丢包现象分析及处理过程
了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:product.kylinos.cn 开发者专区:developer.kylinos.cn 文档中心:document.kylinos.cn 交流论坛:forum.kylinos.cn 服务器环境以及配置 【内核版本…...

C语言之饭店外卖信息管理系统
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 C语言之饭店外卖信息管理系统 目录 设计题目设计目的设计任务描述设计要求输入和输出要求验…...

记一次 .NET某数字化协同管理系统 内存暴涨分析
一:背景 1. 讲故事 高级调试训练营里的一位朋友找到我,说他们跑在linux上的.NET程序出现了内存泄露的情况,上windbg观察发现内存都是IMAGE给吃掉了,那些image都标记了 doublemapper__deleted_ 字样,问我为啥会这样&a…...

部门管理查询部门,nginx反向代理,前端如何访问到后端Tomcat 注解@RequestParam
接口开发 增删改通常是不用返回data数据,返回null 列表查询-结果封装,时间 前后端联调测试 nginx反向代理,前端如何访问到后端Tomcat服务器 删除部门...

JS通过ASCII码值实现随机字符串的生成(可指定长度以及解决首位不出现数值)
在之前写过一篇“JS实现随机生成字符串(可指定长度)”,当时写的过于简单和传统,比较粗放。此次针对此问题,对随机生成字符串的功能进行优化处理,对随机取到的字符都通过程序自动来完成。 在写之前ÿ…...

速通Docker === 快速部署Redis主从集群
目录 镜像仓库介绍 持久化你的数据库 连接到其他容器 创建自定义网络 部署主节点 部署从节点 验证部署 总结 在现代应用架构中,Redis作为一个高性能的内存数据库,被广泛应用于缓存、会话存储、实时分析等多个领域。为了提高Redis的可用性和数据的…...

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(一)
Understanding Diffusion Models: A Unified Perspective(一) 文章概括引言:生成模型背景:ELBO、VAE 和分层 VAE证据下界(Evidence Lower Bound)变分自编码器 (Variational Autoencoders&#x…...

stm32使用MDK5.35时遇到*** TOOLS.INI: TOOLCHAIN NOT INSTALLED
mdk5.35出现*** TOOLS.INI: TOOLCHAIN NOT INSTALLED的问题!!!! 以管理员身份重新打开MDK5.35.0.0,用keygen破解密码,但是一直提示我是没有破解成功。 解决办法: target 改成ARM...

在Ubuntu上安装RabbitMQ教程
1、安装erlang 因为rabbitmq是基于erlang开发的,所以要安装rabbitmq,首先需要安装erlang运行环境 apt-get install erlang执行命令查是否安装成功:erl,疯狂 Ctrlc 就能退出命令行 2、安装rabbitmq 1、查看erlang与rabbitmq版本…...