【Redis】详解 Redis

news2025/1/10 17:27:35

Redis是一种高性能的开源键值存储数据库,它支持各种数据结构,包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。

Redis主要用于缓存、会话存储、消息队列等场景,以及用作数据库、应用程序的内存数据库。

1. 键值存储

  • Redis是一个键值存储数据库,它使用键(key)和值(value)的方式来存储数据。
  • 键是唯一的标识符,值可以是各种类型的数据,包括字符串、哈希、列表、集合、有序集合等。
  • Redis支持对存储在键中的数据执行各种操作,如读取、写入、删除、更新等。

Redis提供了丰富的命令集合,用于执行各种基本操作,包括数据的存储、读取、删除、更新等。下面是Redis的一些基本操作及其对应的命令:

  1. 字符串操作
SET key value [NX|XX] [EX seconds] [PX milliseconds] [GET]
  • key:要设置的键名。
  • value:要设置的值。
  • NX:可选参数,表示只在键不存在时才设置值。(初始设置值)
  • XX:可选参数,表示只在键已经存在时才设置值。(修改值)
  • EX seconds:可选参数,将键的过期时间设置为指定的秒数。(-1 表示永远不过期,-2 表示已过期)
  • PX milliseconds:可选参数,将键的过期时间设置为指定的毫秒数。
  • GET:可选参数,返回键的旧值。

其他操作:

  • 存储字符串:SET key value
  • 读取字符串:GET key
  • 删除字符串:DEL key
  • 检查键是否存在:EXISTS key
  • 设置字符串的过期时间:EXPIRE key seconds
  1. 哈希操作

    • 存储哈希:HSET key field value
    • 读取哈希:HGET key field
    • 删除哈希中的字段:HDEL key field [field ...]
    • 获取哈希的所有字段和值:HGETALL key
    • 检查哈希字段是否存在:HEXISTS key field
    • 获取哈希中的所有字段:HKEYS key
  2. 列表操作

    • 在列表左侧插入元素:LPUSH key value [value ...]
    • 在列表右侧插入元素:RPUSH key value [value ...]
    • 读取列表:LRANGE key start stop
    • 获取列表长度:LLEN key
    • 弹出列表左侧的元素:LPOP key
    • 弹出列表右侧的元素:RPOP key
  3. 集合操作

    • 添加元素到集合:SADD key member [member ...](不能重复)
    • 移除元素从集合:SREM key member [member ...]
    • 获取集合中的所有元素:SMEMBERS key
    • 检查元素是否存在于集合中:SISMEMBER key member
    • 获取集合的大小:SCARD key
  4. 有序集合操作

    • 添加元素到有序集合:ZADD key score member [score member ...]
    • 获取有序集合的成员和分数:ZRANGE key start stop [WITHSCORES]
    • 移除有序集合中的元素:ZREM key member [member ...]
    • 获取有序集合的成员数量:ZCARD key
    • 按分数范围获取有序集合的成员:ZRANGEBYSCORE key min max [WITHSCORES]
  5. 键操作

    • 删除键:DEL key
    • 获取所有匹配给定模式的键:KEYS pattern
    • 查看键的类型:TYPE key
    • 设置键的过期时间:EXPIRE key seconds
  6. 其他操作

    • 发布消息到指定的频道:PUBLISH channel message
    • 订阅一个或多个频道:SUBSCRIBE channel [channel ...]
    • 取消订阅一个或多个频道:UNSUBSCRIBE [channel [channel ...]]

2. 数据结构

  • Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等。
  • 字符串是最简单的数据结构,可以存储文本、整数等类型的数据。
  • 哈希用于存储对象,类似于字典或映射。
  • 列表是有序的字符串集合,支持从两端进行插入、删除等操作。
  • 集合是无序的字符串集合,支持集合运算,如并集、交集、差集等。
  • 有序集合类似于集合,但每个成员都关联一个分数,可以根据分数对成员进行排序。

3. 持久化

  • Redis支持两种持久化方式:RDB(Redis DataBase)和AOF(Append Only File)。
  • RDB是一种快照持久化方式,定期将内存中的数据保存到磁盘上。
  • AOF是一种追加日志持久化方式,将每个写操作追加到一个日志文件中,以保证数据的持久性。

rdb

打开 redis.windows.config 文件

image.png

dump.rdb 文件就是存储快照的信息。

但是他也有弊端,如果快照时间是一个小时生效,在一个半小时的时候发生宕机,那么数据就会丢失。所以 rdb 一般用于做数据备份(比如每晚12点对前一天的数据进行备份)。

image.png

手动存储也是可以的。

aof

image.png
默认是no,可以手动改为 yes。那么就可以将每次写的操作存到一个文件里面。

4. 缓存

  • Redis常被用作缓存,可以将频繁访问的数据存储在内存中,以提高访问速度。
  • Redis支持设置过期时间,可以自动删除过期的缓存数据,以节省内存空间。

5. 发布/订阅

  • Redis支持发布/订阅模式,允许客户端订阅一个或多个频道,并在频道中接收消息。
  • 这种模式常用于实现消息队列、即时通讯等功能。

image.png

但此时并没有持久化。

6. 事务

  • Redis支持事务,允许一组命令(多个命令)作为一个原子操作执行。
  • 使用MULTI命令开始事务,使用EXEC命令提交事务,或者使用DISCARD命令取消事务。
  • 不像 MySQL,Redis 的事务不支持回滚。

image.png

7. 集群

  • Redis提供了集群功能,允许将数据分布在多个节点上,以提高性能和可扩展性。
  • Redis集群使用分片(sharding)来实现数据的水平分布。

8. Lua脚本

  • Redis支持Lua脚本,允许在服务器端执行脚本来实现复杂的数据操作。

9. 主从复制

Redis主从复制是一种数据复制和同步机制,其中一个Redis服务器(称为主服务器)将其数据复制到一个或多个其他Redis服务器(称为从服务器)。主从复制提供了数据冗余备份、读写分离和故障恢复等功能。

具体使用见:Nodejs 第四十七章(redis主从复制) - 掘金 (juejin.cn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1570648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何借助Idea创建多模块的SpringBoot项目

目录 1.1、前言1.2、开发环境1.3、项目多模块结构1.4、新建父工程1.5、创建子模块1.6、编辑父工程的pom.xml文件 1.1、前言 springmvc项目,一般会把项目分成多个包:controler、service、dao、utl等,但是随着项目的复杂性提高,想复用其他一个模…

蓝桥集训之斐波那契前n项和

蓝桥集训之斐波那契前n项和 核心思想&#xff1a;矩阵乘法 左边求和 右边求和 得到Sn fn2 – 1 因此只要求出fn2 即可 #include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;int n,m;int A[2][2] { …

论大数据服务化发展史

引言 一直想写一篇服务化相关的文章&#xff0c;那就别犹豫了现在就开始吧 正文 作为大数据基础架构工程师&#xff0c;业界也笑称“运维Boy”&#xff0c;日常工作就是在各个机器上部署以及维护服务&#xff0c;例如部署Hadoop、Kafka、Pulsar这些等等&#xff0c;用于给公…

使用python将作图并将局部放大

此程序主要特点&#xff1a; 1、使用python画实验结果图 2、想要对大图的局部进行放大 3、有两个子图 4、子图和原图的横坐标都使用标签而不是原始的数据 代码和注释如下&#xff1a; import pandas as pd import numpy as np import matplotlib.pyplot as plt import ope…

BCLinux-for-Euler配置本地yum源

稍微吐槽一句…… 在这片土地上&#xff0c;国产化软件的大潮正在滚滚而来&#xff0c;虽然都不是真正意义上的国产化&#xff0c;但是至少壳是国产的~~~ 之前使用的Centos7的系统&#xff0c;现在都要求统一换成BCLinux-for-Euler。说实话换了之后不太适应&#xff0c;好多用习…

COCO格式转YOLO格式训练

之前就转换过好几次&#xff0c;每次换设备训练&#xff0c;由于压缩包太大&#xff0c;u盘不够用。每次都要找教程从网上再下载一遍。因此这里记录一下&#xff0c;以免下次重新找教程。 在coco数据集中&#xff0c;coco2017train或coco2017val数据集中标注的目标(类别)位置在…

Spring 详细总结

文章目录 第一章 IOC容器第一节 Spring简介1、一家公司2、Spring旗下的众多项目3、Spring Framework①Spring Framework优良特性②Spring Framework五大功能模块 第二节 IOC容器概念1、普通容器①生活中的普通容器②程序中的普通容器 2、复杂容器①生活中的复杂容器②程序中的复…

传输层 --- UDP

目录 1. 传输层是什么呢&#xff1f; 2. 再谈端口号 2.1. 端口号是什么 2.2. 协议号是什么 2.3. 认识知名端口号 2.4. 端口号的相关问题 2.4.1. 一个进程可以绑定多个端口号吗&#xff1f; 2.4.2. 一个端口号可以被多个进程绑定吗&#xff1f; 2.4.3. 为什么不使用P…

数据结构进阶篇 之 【并归排序】(递归与非递归实现)详细讲解

都说贪小便宜吃大亏&#xff0c;但吃亏是福&#xff0c;那不就是贪小便宜吃大福了吗 一、并归排序 MergeSort 1.基本思想 2.实现原理 3.代码实现 4.归并排序的特性总结 二、非递归并归排序实现 三、完结撒❀ –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀…

如何使用单片机 pwm 控制 mos 管?

目录 选择适合的硬件 连接电路 编写代码 参考示例 程序一 程序二 测试与调试 注意事项 使用单片机&#xff08;如常见的Arduino、STM32等&#xff09;通过PWM&#xff08;脉冲宽度调制&#xff09;控制MOS管&#xff08;金属氧化物半导体场效应管&#xff09;是一种常见…

Java中的集合(二)

一、回顾上期 上一篇讲到在Java中&#xff0c;集合和容器是非常重要的概念&#xff0c;用于存储和操作数据。在集合中&#xff0c;有单列集合和双列集合两种类型。我们在上一篇将单列集合中的list类讲完了&#xff0c;这一篇将会将集合中剩余部分介绍完&#xff0c;话不多说&am…

备战蓝桥杯---刷二分与前缀和题

刷点题~ 1.二分多路归并算法 对于每一个技能&#xff0c;我们把它看成一个等差数列&#xff0c;我们把所有可能都放到一个集合里&#xff0c;排个序&#xff0c;取前m个大即可&#xff0c;现在考虑优化&#xff0c;假如m不是很大&#xff0c;我们直接用优先队列即可&#xff0…

单细胞RNA测序(scRNA-seq)SRA数据下载及fastq-dumq数据拆分

单细胞RNA测序&#xff08;scRNA-seq&#xff09;入门可查看以下文章&#xff1a; 单细胞RNA测序&#xff08;scRNA-seq&#xff09;工作流程入门 单细胞RNA测序&#xff08;scRNA-seq&#xff09;细胞分离与扩增 1. NCBI查询scRNA-seq SRA数据 NCBI地址&#xff1a; https…

继承.Java

目录 1&#xff0c;概述 1.1继承的含义 1.2什么时候用继承 1.3继承的好处 1.4继承的特点 2&#xff0c;继承的格式 3&#xff0c;可以继承哪些内容 4&#xff0c;成员方法和成员变量的访问特点 5&#xff0c;构造方法的访问特点 6&#xff0c;this&#xff0c;super…

windows版本-idea中下载的java版本在哪

1、点击idea的file-projectStructure 进入&#xff1a; 通过电脑目录进入该目录 找到bin目录&#xff0c;copy该目录地址 copy下来之后设置到系统环境变量中

C#项目引用解决方案中其他项目dll时,出现黄色感叹号的解决方案

问题引入 今天拿着老师傅的老项目&#xff0c;需要做通讯调试&#xff0c;说测试一下&#xff0c;便添加了一个项目A来编写结构体&#xff0c;然后在窗体程序项目B中引用A&#xff0c;发现B一引用A&#xff0c;在B项目的引用下面A就多了个黄色感叹号&#xff0c;一编译B项目&am…

瑞_Redis_商户查询缓存

文章目录 项目介绍1 短信登录2 商户查询缓存2.1 什么是缓存2.1.1 缓存的应用场景2.1.2 为什么要使用缓存2.1.3 Web应用中缓存的作用2.1.4 Web应用中缓存的成本 2.2 添加Redis缓存2.2.1 背景2.2.2 缓存模型和思路2.2.3 代码实现2.2.4 测试附&#xff1a;IDEA控制台输出自动换行设…

色域(BT2020/BT709/sRGB/DCI-P3/Rec.709/NTSC)

什么是色域 色域是对一种颜色进行编码的方法&#xff0c;也指一个技术系统能够产生的颜色的总和。在计算机图形处理中&#xff0c;色域是颜色的某个完全的子集。一般来说&#xff0c;高端投影仪和电视都会强调色域范围和对比度&#xff0c;而不是唯亮度标准论。 自然界可见光…

面试算法-139-盛最多水的容器

题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。…

Sybase ASE中的char(N)的坑以及与PostgreSQL的对比

1背景 昨天,一朋友向我咨询Sybase ASE中定长字符串类型的行为,说他们的客户反映,同样的char类型的数据,通过jdbc来查,Sybase库不会带空格,而PostgreSQL会带。是不是这样的?他是PostgreSQL的专业大拿,但因为他手头没有现成的Sybase ASE环境,刚好我手上有,便于一试。 …