redis快速入门

什么是Redis

Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,它提供了一个高效的键值存储解决方案,并支持多种数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets)等。它被广泛应用于缓存、消息队列、实时统计等场景。

Redis出现解决了什么问题?有什么优点

  1. 数据库数据是存储在磁盘上,每次读写数据比较慢,而redis数据存储在内存中,因此提升了速度。
  2. 数据持久化问题:虽然Redis的数据是存储在内存中的,但它也提供了持久化功能,可以将内存中的数据写入到硬盘中,从而在Redis重新启动时加载这些数据。这样一来,即使Redis服务器出现故障,也可以最大限度地降低数据丢失带来的影响。
  3. 高并发问题:Redis支持高并发访问,可以处理大量的并发请求。这使得它在处理高并发场景时具有优势,如分布式锁、实时统计等。通过使用Redis,可以有效地提高系统的并发处理能力,避免系统因并发过高而崩溃。
  4. 数据结构问题:Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。这使得它可以灵活地处理各种类型的数据,并提供了丰富的数据操作功能。通过使用Redis,可以更加便捷地处理数据,提高开发效率
  5. 事务支持:Redis支持事务,可以将多个命令打包成一个原子操作执行,确保这些命令要么全部执行成功,要么全部失败。(例如支付操作A给B转金币,A- B+一旦失败全部失败)
  6. 高可用性:Redis支持主从复制和Sentinel哨兵机制 。通过主从复制,可以创建多个Redis实例的副本,以提高读取性能和容错能力。Sentinel是一个用于监控和自动故障转移的系统,它可以在主节点宕机时自动将从节点提升为主节点。并且可以实现读写分离,提高性能。
  7. 实时统计:Redis的计数器和有序集合等数据结构使其非常适合实时统计场景。它可以存储和更新计数器,并对有序集合进行排名和范围查询,用于统计和排行榜功能

安装下载

mac和linux安装

shell 复制代码
# mac通过下面方式
brew install redis # 安装完成后直接可以使用,启动redis-server 连接redis-cli

# centos 通过下面方式
wget https://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable
make
make install

vscode安装database client插件

该插件可以可视化redis,让我们更好观察数据的存储。

  1. 点击+新建连接
  2. 选择redis直接点击链接即可

基本使用

shell 复制代码
key:要设置的键名。
value:要设置的值。
NX:可选参数,表示只在键不存在时才设置值。
XX:可选参数,表示只在键已经存在时才设置值。
EX seconds:可选参数,将键的过期时间设置为指定的秒数。
PX milliseconds:可选参数,将键的过期时间设置为指定的毫秒数。
GET:可选参数,返回键的旧值。

字符串

设置

set name fancyfish NX. 不存在name时设置fancyfish
set name fancyfish1 XX. 存在name时修改其值为fancyfish1
set name fancyfish2 GET. 修改name值的同时返回旧值
set token asdasdv2313 EX 60 . 设置token过期时间60秒

删除

del name . 删除键名为name的字段,并返回删除的数量,0代表删除失败不会报错

del name age job . 删除多个字段,并返回删除的数量,0代表删除失败不会报错

集合操作

集合(Set)是一种无序且不重复的数据结构,用于存储一组独立的元素。集合中的元素之间没有明确的顺序关系,每个元素在集合中只能出现一次。

添加集合

sadd是添加 students是集合名 xiaohong是集合成员
sadd students xiaohong 将xiaohong添加到集合中
sadd students xiaoming 将xiaoming添加到集合中

批量添加
sadd students xiaoli xiaogang xiaoliu

获取全部集合成员

smembers students

检查成员是否存在于集合中

sismember students xiaoming .如果存在则返回(integer) 1

删除成员

srem students xiaoming. 删除成功则返回(integer) 1

获取集合成员数量

scard students. 集合存在则返回数量例如(integer) 4

获取随机成员

srandmember students. 会返回该集合内的随机成员,集合不存在则返回(nil)

求多个集合之间并集

两个集合所有成员
sunion students graduates会得到两个集合所有成员

求多个集合之间交集

两集合相同成员
sinter students graduates. 成功则返回交集成员,不存在交集则返回(empty array)

求多个集合之间差集

集合1中的不存在于集合2中的成员
sdiff students graduates 会得到students中不存在于graduates集合中的成员

哈希

哈希表(Hash)是一种数据结构,也称为字典、关联数组或映射,用于存储键值对集合。在哈希表中,键和值都是存储的数据项,并通过哈希函数将键映射到特定的存储位置,从而实现快速的数据访问和查找。

设置成员

hset students name xiaoming. 设置students的键name 值 xiaoming
批量设置
hset students age 18 job frontend 设置students的键age 值 18 键job 值frontend

获取成员

hget students age 得到18
批量获取
hget students name age job

获取哈希表所有字段和值

hgetall students

shell 复制代码
1) "name"
2) "xiaoming"
3) "age"
4) "xiaoliu"

删除哈希表字段

hdel students name job . 成功返回数量失败数量为0

获取所有字段

hkeys students

获取所有字段值

hvals students

获取哈希表字段数量

hlen students

列表

列表(List)是一种有序、可变且可重复的数据结构。在许多编程语言和数据存储系统中,列表是一种常见的数据结构类型,用于存储一组元素

添加元素

列表元素的添加分两个一个是左添加一个是右添加
lpush list 1 2 3. 相当于js数组的unshift()
rpush list 1 2 3. 相当于js数组的push()

获取元素

获取指定下标位置元素
lindex list 0
获取指定范围的元素
lrange list 0 -1. -1指的是倒数第一个元素,这个命令会获取整个列表的元素,从第一个到最后一个。

删除元素

lpop list相当于jsshift()从列表的左侧移除并返回第一个元素
rpop list相当于jspop()从列表的右侧移除并返回最后一个元素
lrem list 3 xiaoming 从列表list中删除指定数量3的指定值元素xiaoming

获取列表长度

llen list

发布订阅

发布-订阅是一种消息传递模式,其中消息发布者(发布者)将消息发送到频道(channel),而订阅者(订阅者)可以订阅一个或多个频道以接收消息。这种模式允许消息的解耦,发布者和订阅者之间可以独立操作,不需要直接交互。

在Redis中,发布-订阅模式通过以下命令进行操作:

publish命令:用于将消息发布到指定的频道。语法为:publish channel message。例如,publish channel1 hello将消息"hello"发布到名为"channel1"的频道。
subscribe命令:用于订阅一个或多个频道。语法为:subscribe channel [channel ...]。例如,subscribe channel1 channel2 订阅了名为"channel1"和"channel2"的频道。
unsubscribe命令:用于取消订阅一个或多个频道。语法为:subscribe [channel [channel ...]]。例如,unsubscribe channel1 取消订阅名为"channel1"的频道。
psubscribe命令:用于模式订阅一个或多个匹配的频道。语法为:psubscribe pattern [pattern ...]。其中,pattern可以包含通配符。例如,psubscribe channel1.订阅了以"channel1."开头的所有频道。
punsubscribe命令:用于取消模式订阅一个或多个匹配的频道。语法为:punsubscribe [pattern [pattern ...]]。例如,punsubscribe channel1 取消订阅以"channel1."开头的所有频道。

事务

Redis支持事务(Transaction),它允许用户将多个命令打包在一起作为一个单元进行执行。事务提供了一种原子性操作的机制,要么所有的命令都执行成功,要么所有的命令都不执行。

Redis的事务使用MULTI、EXEC、WATCH和DISCARD等命令来管理。
multi命令:用于开启一个事务。在执行MULTI命令后,Redis会将接下来的命令都添加到事务队列中,而不是立即执行。

'exec命令:用于执行事务中的所有命令。当执行EXEC命令时,Redis会按照事务队列中的顺序执行所有的命令。执行结果以数组的形式返回给客户端。

'watch命令:用于对一个或多个键进行监视。如果在事务执行之前,被监视的键被修改了,事务将被中断,不会执行。

'discard命令:用于取消事务。当执行DISCARD命令时,所有在事务队列中的命令都会被清空,事务被取消。

事务执行流程

  1. 开启事务
  2. 将要执行的命令添加到事务队列中(可以使用watch监视)
  3. 使用exec执行事务,redis会按队列顺序执行,并返回执行结果

redis中事务不支持回滚,如果执行期间发生错误事务会继续执行,因此我们要保证事务中的命令是!幂等!的

示例

shell 复制代码
# 连接Redis
redis-cli

# 开启事务
mutli

# 添加命令到事务队列
set key1 value1
get key2

# 执行事务
exec

持久化

Redis提供两种持久化方式:

RDB(Redis Database)持久化:RDB是一种快照的形式,它会将内存中的数据定期保存到磁盘上。可以通过配置Redis服务器,设置自动触发RDB快照的条件,比如在指定的时间间隔内,或者在指定的写操作次数达到一定阈值时进行快照保存。RDB持久化生成的快照文件是一个二进制文件,包含了Redis数据的完整状态。在恢复数据时,可以通过加载快照文件将数据重新加载到内存中。

AOF(Append-Only File)持久化:AOF持久化记录了Redis服务器执行的所有写操作命令,在文件中以追加的方式保存。当Redis需要重启时,可以重新执行AOF文件中保存的命令,以重新构建数据集。相比于RDB持久化,AOF持久化提供了更好的数据恢复保证,因为它记录了每个写操作,而不是快照的形式。然而,AOF文件相对于RDB文件更大,恢复数据的速度可能会比较慢。

RDB存储

在redis.conf文件中可以设置
save time updateTimes我们可以在文件中添加这个指令time是时间,以秒为单位,updateTimes是修改次数。例如save 3600 50一小时内修改了50次就会进行快照。
手动存储 直接执行save

AOF使用

将 appendonly 配置项的值设置为 yes:默认情况下,该配置项的值为 no,表示未启用AOF持久化。将其值修改为 yes,以启用AOF持久化。

主从复制

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

流程

以下是Redis主从复制的一般工作流程:

配置主服务器:在主服务器上,你需要在配置文件中启用主从复制并指定从服务器的IP地址和端口号。你可以使用replicaof配置选项或slaveof配置选项来指定从服务器。

连接从服务器:从服务器连接到主服务器并发送复制请求。从服务器通过发送SYNC命令请求进行全量复制或通过发送PSYNC命令请求进行部分复制(增量复制)。

全量复制(SYNC):如果从服务器是第一次连接或无法执行部分复制,主服务器将执行全量复制。在全量复制期间,主服务器将快照文件(RDB文件)发送给从服务器,从服务器将接收并加载该文件以完全复制主服务器的数据。

部分复制(PSYNC):如果从服务器已经执行过全量复制并建立了复制断点,主服务器将执行部分复制。在部分复制期间,主服务器将发送增量复制流(replication stream)给从服务器,从服务器将接收并应用该流以保持与主服务器的同步。

复制持久化:从服务器接收到数据后,会将其保存在本地磁盘上,以便在重启后仍然保持数据的一致性。

同步延迟:从服务器的复制是异步的,因此存在复制延迟。延迟取决于网络延迟、主服务器的负载和从服务器的性能等因素。

读写分离:一旦建立了主从复制关系,从服务器可以接收读操作。这使得可以将读流量从主服务器分散到从服务器上,从而减轻主服务器的负载。

故障恢复:如果主服务器发生故障,可以将一个从服务器提升为新的主服务器,以继续提供服务。当主服务器恢复时,它可以作为从服务器连接到新的主服务器,继续进行数据复制。

创建从服务的配置文件

根目录下面新建一个 slave-6378.conf配置文件 作为redis从服务器,默认的配置文件6379作为主服务器,如下是slave-6378.conf 文件配置

shell 复制代码
bind 127.0.0.1 #ip地址
port 6378 #端口号
daemonize yes #守护线程静默运行
replicaof 127.0.0.1 6379 #指定主服务器

启用从服务器

从服务器不允许写操作只能读。

在配置完毕后执行如下命令

  1. redis-server ./slave-6378.conf . 指定从服务器配置文件
  2. redis-cli -p 6378 打开从服务器cli

配置完成后主服务器的写操作会自动同步到从服务器上,并且当主服务器宕机,可以将某个从服务器升级为主服务器。

相关推荐
程序员的开发手册14 分钟前
新手教学系列——慎用Flask-SQLAlchemy慢日志记录
数据库·python·flask·sqlalchemy
八月林城1 小时前
JAVA导出数据库字典到Excel
java·数据库·excel
TiDB_PingCAP4 小时前
国产化新标杆:TiDB 助力广发银行新一代总账系统投产上线
运维·数据库·开源·tidb
乐安lan5 小时前
数据库的操作
数据库·oracle
霖烟易辞6 小时前
MySQL中的DDL语句
数据库·mysql·ddl
PY1786 小时前
Python的上下文管理器
数据库·python·oracle
阿猿收手吧!6 小时前
【MySQL】表的操作{创建/查看/修改/删除}
数据库·mysql
超维Ai编程6 小时前
mysql从入门到精通
数据库·mysql
CCI3447 小时前
Rust简明教程第三章-所有权与借用
开发语言·数据库·rust
zengson_g7 小时前
如何监控和分析 PostgreSQL 中的查询执行计划?
数据库·postgresql·oracle