Redis数据库介绍

article/2025/11/2 12:21:37

1 Redis简介

Redis,全称远程字典服务(REmote DIctionary Server),是一个开源、基于内存、高性能、可数据持久化的key-value存储系统,遵守BSD协议,可用作数据库、缓存和消息中间件。
在Redis中文官网上是这么描述的:

redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串strings,散列hashes,列表lists,集合sets,有序集合sorted sets的范围查询,bitmaps,hyperloglogs 和地理空间geospatial索引半径查询。Redis内置了复制replication,LUA脚本Lua scripting,LRU驱动事件LRU eviction,事务transactions和不同级别的磁盘持久化persistence,并通过 Redis哨兵Sentinel和自动分区Cluster提供高可用性high availability。

在日常应用中,Redis主要适用于以下几个场景:
(1)缓存
(2)排行榜
(3)计数器
(4)分布式会话
(5)分布式锁
(6)社交网络
(7)最新列表
(8)消息系统

2 Redis的基本特性

Redis具有许多优秀特性,包括:支持多种数据类型、支持数据的持久化机制、支持事务控制、支持主从复制功能等。

2.1 数据类型

Redis的数据存储是通过Key映射Value的方式,建立字典以保存数据。Redis共支持五种数据类型。
(1)String(字符串)
Redis最基本的类型,一个key对应一个value。
(2)Hash(哈希表)
键值对集合,是一个string类型的数据域field和值value的映射表。
(3)List(列表)
字符串列表,按照插入顺序排序。支持在列表的头部或者尾部添加数据元素。
(4)Set(集合)
字符串类型的无序集合,支持添加、删除、查找,Redis还能对set进行交集、并集、差集等集合操作。
(5)Zset(有序集合)
字符串类型的有序集合,集合中的每个元素都会关联一个double类型的分数。Redis通过这个分数为集合进行排序。

2.2 数据的持久化机制

Redis支持持久化,在运行情况下,Redis以数据结构的形式将数据维持在内存中,通过将内存中的数据保持到磁盘,让这些数据在Redis重启之后可用来持久化。Redis分别提供了两种持久化模方式。
(1)RDB方式
即Snapshotting(快照)方式,是Redis默认的持久化方式。在Redis运行时,每隔几分钟或者几次操作后,RDB程序将内存中的数据以快照的方式保存到磁盘二进制文件dump.rdb中。在Redis重启时,RDB程序通过载入RDB文件的方式做快照持久化。RDB的配置信息保存在reedis.conf文件中。
RDB快照实现的数据持久化方式,存在的问题是:当在RDB程序保存数据的指定间隔之间,Redis断开连接,那么在上一次保存到此刻的数据就无法被保存。因此,为了解决这个问题,Redis还提供了AOF的持久化。
下面是RDB的默认配置(redis.conf)

save 900 1		# 900秒内如果超过1个key被修改,进行快照
save 300 10	
save 60 10000

(2)AOF方式
AOF以协议文本的方式,在使用AOF持久化时,Redis会将所有对数据库进行的命令(及其参数)写入到AOF日志文件appendonly.aof中,以此达到记录数据库状态的目的,当Redis重启时,就会通过执行AOF日志记录的命令进行数据的快速恢复。
Redis还设计了AOF重写机制:扫描数据库数据,转化为Redis命令存入临时AOF文件中,在扫描完成后用临时文件代替AOF文件。这使得AOF文件中记录的命令是最简洁的,在一定程度上避免了AOF随着时间的增长,占据磁盘的过多空间。
下面是默认的aof配置(redis.conf)

appendonly no			# 是否启动aof持久化方式
appendfilename "appendonly.aof"	#aof 文件名称
\# appendfsync always	\# 每收到命令就写一次
appendfsync everysec	\# 每秒钟写一次
\# appendfsync no		# 完全依赖os

2.3 事务控制

Redis事务的本质是一组命令的集合。在事务执行过程,队列中的命令会按照顺序串行化执行,此时,其他命令请求都不会插入到事务执行序列中。Redis可以通过MULTI/EXEC支持简单的事务控制:当客户端使用MULTI命令时,这个连接将会进入一个事务上下文,连接后续的命令都会放在事务队列中。当连接收到exec命令时,Redis将顺序地执行事务队列中的所有命令。

2.4 主从复制

主从复制就是使当前的服务器复制指定服务器的内容。被复制的服务器称为主服务器(master),对主服务器进行复制操作的服务器称为从服务器(slave)。
Redis通过修改redis.conf文件来使用和配置主从复制,复制过程上大体分为建立连接、数据同步、命令传播三个阶段。Redis主从复制功能强大,一个master支持多个slave连接,slave支持其他slave的连接,主从复制时,不会阻塞master和slave。
利用Redis主从复制的特效,可以实现以下功能:实现读写分离,比如用主服务器写数据,用从服务器读;支持备份数据分离,利用主从复制的方便,用slave服务器的一个或两个服务器来进行数据备份。
下面是默认的Master-Slave replication配置(redis.conf)

\# slaveof <masterip> <masterport>	# 当前节点是slave时配置
slave-serve-stale-data yes	# master失去联系时,slave是否会反馈客户端的请求
slave-read-only yes			# salve实例是否接受写操作
slave-priority 100		# slave的优先级

3 Redis安装与使用

3.1 安装Redis

(1)从官网下载redis安装包

        后者可通过这个下载地址下载
                a、Github下载地址:https://github.com/MicrosoftArchive/redis/releases
                b、百度网盘下载地址 https://pan.baidu.com/s/1z1_OdNVbtgyEjiktqgB83g 密码:kdfq
(2)解压到文件
(3)启动cmd,切换到redis目录,输入命令 redis-server redis.windows.conf
输入之后,会显示如下界面:

(4)另启一个 cmd 窗口,切换目录,输入命令 redis-cli.exe -h 127.0.0.1 -p 6379
这里的-h表示redis的bind的ip地址,-p指端口,输入之后显示:

(5)开始使用redis
设置键值对 set akey am

取出键值对 get akey

3.2 在Spring中使用Redis

工具:Redis Desktop Manager
(1)导入redis依赖

	<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.2.1.RELEASE</version></dependency>

(2)配置文件配置redis和连接池的信息

	spring:redis:host: localhostport: 6379# password: root # 根据需要# 连接超时时间(毫秒)timeout: 10000# Redis默认情况下有16个分片,这里配置具体使用的分片,默认是0database: 0lettuce:pool:# 连接池最大连接数(使用负值表示没有限制) 默认 8max-active: 8# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1max-wait: -1# 连接池中的最大空闲连接 默认 8max-idle: 8# 连接池中的最小空闲连接 默认 0min-idle: 0

(3)RedisTemplate配置

public class RedisCacheAutoConfiguration {@Beanpublic RedisTemplate<String, Serializable>redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory){RedisTemplate<String, Serializable> template = new RedisTemplate<>();//设置key序列化方式,StringRedisSerializer的序列化方式template.setKeySerializer(new StringRedisSerializer());//设置value序列化方式,序列化为jsontemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());//设置连接池template.setConnectionFactory(redisConnectionFactory);return template;}
}

(4)使用Redis
声明RedisTemplate

目录

Redis数据库介绍 

1 Redis简介

2 Redis的基本特性

2.1 数据类型

2.2 数据的持久化机制

2.3 事务控制

2.4 主从复制

3 Redis安装与使用

3.1 安装Redis

3.2 在Spring中使用Redis

3.3 Redis操作命令

4 Redis与中间件

4.1 中间件

4.2 Redis消息中间件

5 参考


	@Autowiredprivate RedisTemplate redisTemplate;

Redis操作代码

String akey = "akey";
if(redisTemplate.hasKey(akey)){redisTemplate.delete(akey);
}
redisTemplate.opsForValue().set(key, "am");
Object value = redisTemplate.opsForValue().get(akey);

启动redis服务端,启动可视化工具并连接到redis

3.3 Redis操作命令

(1)对value操作的命令
(2)对String操作的命令
(3)对List操作的命令
(4)对Set操作的命令
(5)对Zset操作的命令
(6)对Hash操作的命令
(7)持久化操作命令
(8)远程服务控制命令
详见:Redis中文官网命令手册

4 Redis与中间件

Redis中文官网的首页这么写到
—— Redis可以用作数据库、缓存和消息中间件。

4.1 中间件

百度百科是这么定义中间件的:

中间件是介于应用系统和系统软件之间一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统各个部分或不同应用,达到资源、功能共享的目的。
中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。

使用中间件,我们能够达到的效果是:使用这项服务的人,不需要知道底层逻辑的具体实现,就可以直接拿着中间件的结果来用。
显然,Redis属于中间件。

4.2 Redis消息中间件

消息中间件关注于数据的发送和接受,利用高效可靠的异步消息传递机制进行平台无关的数据交流,并基于数据通信集成分布式系统。
Redis消息队列通常采用广播发布及订阅模式:基于Redis的Pub/Sub机制,此模式允许生产者只生产一次消息,由中间件负责将消息复制到多个消息队列,每个消息队列由对应的消费组消费。订阅者可以通过subscribe向redis server订阅自己感兴趣的消息类型。redis将信息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的信息时,订阅该消息类型的全部订阅者都会收到此消息。
Redis的Pub/Sub实现:
(1)启动Redis服务器

(2)启动客户端,订阅am频道

(3)启动另一客户端,向服务器推送am频道的信息

此时,订阅了am频道的客户端接收到了信息

5 参考

[1] 马豫星. Redis数据库特性分析[J]. 物联网技术, 2015(3):105-106.
[2] 曾超宇,李金香. Redis在高速缓存系统中的应用[J]. 微型机与应用, 2013, 32(12):11-13.
[3] 杨雪婵.针对Redis主从复制[J]. 网络安全和信息化. 2017(03)
[4] Xhan. Redis学习笔记之持久化[EP/OL]. 2011-02-07.


http://chatgpt.dhexx.cn/article/dfHgqR7G.shtml

相关文章

redis详解(全)

学前小故事 数据库和缓存保证一致性小故事 windows && linux 安装redis redis 持久化 redis API 学前小故事 [我是redis] 你好&#xff0c;我是Redis&#xff0c;一个叫Antirez的男人把我带到了这个世界上。 说起我的诞生&#xff0c;跟关系数据库MySQL还挺有渊…

Redis 详解

文章目录 Redisredis 简介1. Redis 中的事务1.1 什么是事务&#xff1f;1.2 Redis 中的事务是怎么实现的&#xff1f;1.3 Redis 事务为什么不支持回滚&#xff1f;1.3.1 语法错误情况下的事务回滚状态1.3.2 类型错误情况下的事务回滚状态1.3.3 Redis事务不回滚总结 2. Redis 中…

Redis该怎么学?其实很简单,这份学习路线+资料+书单我全部贡献出来了!

前言 这绝对不是一篇水文&#xff0c;进来的兄弟们千万不要白嫖&#xff0c;真香警告⚠️。&#xff08;点赞&#xff01;&#xff01;&#xff01;&#xff09; 这篇文章很早前就打算写了&#xff0c;特地留到现在是因为我想把Redis系列的文章全部更完&#xff0c;能让需要的…

Redis入门官方文档

Redis资料 Redis官网:http://redis.io/ Redis官方文档:http://redis.io/documentation Redis教程:http://www.w3cschool.cn/redis/redis-intro.html Redis下载:http://redis.io/download redis英文文档 https://redis.io/topics/data-types redis中文文档 http://www.red…

Redis内存数据库必读的4本书

Redis从一个不为人熟知、只有少量应用的崭新数据库&#xff0c;逐渐变成了内存数据库领域的事实标准。时至今日&#xff0c;经过大量的实践应用&#xff0c;Redis简洁高效、安全稳定的特性已经深入人心。 无论是国内还是国外&#xff0c;从五百强公司到小型初创公司都在使用Re…

【好书推荐】Redis入门必备 | 《Redis实战》

一、Redis入门必备 你好&#xff0c;我是小雨青年&#xff0c;一名程序员。 今天为你推荐的书籍是《Redis实战》。 Redis作为一个内存数据库服务器&#xff0c;本书提供了大量讲解和用例。 本书的大部分用例是用Python编写的&#xff0c;希望你有一些Python语言基础。 本书…

Day768.大佬推荐的经典的Redis学习资料 -Redis 核心技术与实战

大佬推荐的经典的Redis学习资料 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于经典的Redis学习资料。 一、经典书籍 在学习 Redis 时&#xff0c;最常见的需求有三个方面。 日常使用操作&#xff1a;比如常见命令和配置&#xff0c;集群搭建等&#xff1b;关键技…

qt QSettings

qt QSettings 用法总结 用户对应用程序经常有这样的要求&#xff1a;要求它能记住它的settings&#xff0c;比如窗口大小&#xff0c;位置&#xff0c;一些别的设置&#xff0c;还有一个经常用的&#xff0c;就是recent files&#xff0c;等等这些都可以通过Qsettings来实现。 …

QT中使用QSettings保存应用程序配置信息

一、问题描述 今天遇到一个问题&#xff0c;就是想实现一个软件&#xff0c;我上一次开启软件时候配置的IP地址以及&#xff0c;打开的文件路径&#xff0c;能够在我下一次打开软件时候自动写入上一次配置的信息&#xff0c;不需要再重新设置配置了。 二、解决方法 使用QT中的…

QSettings用法(例子)

用户通常打开程序&#xff0c;希望每次打开程序都能记住跨会话设置&#xff0c;比如&#xff08;窗口的大小位置&#xff0c;选项等&#xff09;; 窗口打开如果没有记住上次打开的记录&#xff0c;每次关闭它都会重复在同样位置同样大小&#xff0c;好比如手机格式化&#xff…

Qt使用QSettings读写ini文件

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 QSettings 简介 QSettings 类提供了ini文件读写&#xff0c;注册表读写的功能 QSettings::Format有两种: QSettings::NativeFormat 在…

QSettings读写ini文件

QSettings简介 QSettings类提供了持久的独立于平台的应用程序设置。 用户通常希望应用程序能够跨会话记住它的设置(窗口大小和位置&#xff0c;选项等)。在Windows上&#xff0c;这些信息通常存储在系统注册表中&#xff0c;在macOS和iOS上则存储在属性列表文件中。在Unix系统…

Qt中使用QSettings读取配置文件注意事项

QSetting使用中的注意事项 QSetting为Windows、Linux和MacOS系统提供了统一的配置文件/注册表读取方式。 &#xff08;引用QtHelp的一句话&#xff1a;The QSettings class provides persistent platform-independent application settings.&#xff09; 但是在读取配置文件时…

QT 程序参数保存-QSettings类

背景&#xff1a; 程序需要设置参数保存在本地&#xff0c;下次一次打开时参数为上次设置的值&#xff0c;不会被重新初始化。 QSettings类 实现步骤 1 新建paraConfig类 1.1 paraConfig方法中传入文件名参数fileName 1.2 在程序目录下新建一个CFG文件夹&#xff0c;&…

QT中QSettings的使用

首先包含头文件 #include<QSettings>QSettings的使用 QSettings m_iniFile("test.ini", QSettings::IniFormat);m_iniFile.beginGroup("USERCONFIG");m_iniFile.setValue("userName", ui->Edt_user->text());m_iniFile.setValue(&q…

Qt如何用QSettings读写ini配置文件

一、ini文件的格式 ini文件的格式如下&#xff0c;主要是由节、键、值来组成。 [section1] age23 namlcm sexman[section2] age75 namelucimer sexman……………… [sectionN] // 节名 键 值 ……………… 键 值二、ini配置文件的写入 ini文件的读取和写入都是…

QSettings Class

QSettings类 QSettings类公共类型&#xff08;枚举&#xff09;公有成员函数静态成员函数函数作用这个类写文件的特征 QSettings类 QSettings类提供持久的独立于平台的应用程序设置。 头文件:#include< QSettings >qmake:QT core继承&#xff08;父&#xff09;:QObje…

Qt读写配置文件之QSettings的用法

主要是在开发中&#xff0c;将一些关键的东西写入或者读取配置文件中&#xff0c;本文主要就是使用了QSettings的setValue和value。 QSettings可以存储一系列设置。每个设置包括指定设置名称&#xff08;键&#xff09;的一个字符串和一个与该键关联的QVariant存储数据。使用se…

Qt之QSettings的使用

一.前言 软件开发中&#xff0c;有这样的需求&#xff1a;用户需要动态配置参数加载到软件界面&#xff0c;以及保存软件的一些状态值&#xff0c;这就需要将数据保存下来然后读取解析,针对这样的需求&#xff0c;可以有两种方式&#xff0c;一种就是自己定义数据格式&#xff…