Redis快速上手

Redis

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

以下是一些关键特性和用途介绍:

  1. 内存存储:Redis主要将数据存储在内存中,因此具有快速的读写性能。它可以持久化数据到磁盘,以便在重新启动后恢复数据。
  2. 多种数据结构:Redis不仅仅是一个简单的键值存储,它支持多种数据结构,如字符串、哈希、列表、集合和有序集合。这些数据结构使得Redis能够更灵活地存储和操作数据。
  3. 发布/订阅:Redis支持发布/订阅模式,允许多个客户端订阅一个或多个频道,以接收实时发布的消息。这使得Redis可以用作实时消息系统。
  4. 事务支持:Redis支持事务,可以将多个命令打包成一个原子操作执行,确保这些命令要么全部执行成功,要么全部失败。
  5. 持久化:Redis提供了两种持久化数据的方式:RDB(Redis Database)和AOF(Append Only File)。RDB是将数据以快照形式保存到磁盘,而AOF是将每个写操作追加到文件中。这些机制可以确保数据在意外宕机或重启后的持久性。
  6. 高可用性:Redis支持主从复制和Sentinel哨兵机制。通过主从复制,可以创建多个Redis实例的副本,以提高读取性能和容错能力。Sentinel是一个用于监控和自动故障转移的系统,它可以在主节点宕机时自动将从节点提升为主节点。
  7. 缓存:由于Redis具有快速的读写性能和灵活的数据结构,它被广泛用作缓存层。它可以将常用的数据存储在内存中,以加快数据访问速度,减轻后端数据库的负载。
  8. 实时统计:Redis的计数器和有序集合等数据结构使其非常适合实时统计场景。它可以存储和更新计数器,并对有序集合进行排名和范围查询,用于统计和排行榜功。

基本使用

字符串
SET key value [NX|XX] [EX seconds] [PX milliseconds] [GET]
  • key:要设置的键名。
  • value:要设置的值。
  • NX:可选参数,表示只在键不存在时才设置值。
  • XX:可选参数,表示只在键已经存在时才设置值。
  • EX seconds:可选参数,将键的过期时间设置为指定的秒数。
  • PX milliseconds:可选参数,将键的过期时间设置为指定的毫秒数。
  • GET:可选参数,返回键的旧值。

案例

1.设置键名为 “name” 的值为 “John”:

SET name "xiaoman"

2.设置键名为 “counter” 的值为 10,并设置过期时间为 60 秒:

SET counter 10 EX 60

3.只在键名为 “status” 不存在时,设置其值为 “active”:

SET status "active" NX

4.只在键名为 “score” 已经存在时,将其值增加 5:

SET score 5 XX

5.设置键名为 “message” 的值为 “Hello”,并返回旧的值:

SET message "Hello" GET

6.删除键名为 “name” 的键:

DEL name

7.批量删除多个键名:

DEL key1 key2 key3

8.删除不存在的键名,不会报错,返回删除的键数量为 0:

DEL non_existing_key
集合

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

1.添加成员到集合:

SADD fruits "apple"
SADD fruits "banana"
SADD fruits "orange"

2.获取集合中的所有成员:

SMEMBERS fruits

输出结果:

1) "apple"
2) "banana"
3) "orange"

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

SISMEMBER fruits "apple"

输出结果:

(integer) 1

4.从集合中移除成员:

SREM fruits "banana"

输出结果:

(integer) 1

5.获取集合中的成员数量:

SCARD fruits

输出结果:

(integer) 2

6.获取随机成员:

SRANDMEMBER fruits

输出结果:

"apple"

7.求多个集合的并集:

SUNION fruits vegetables

输出结果:

1) "apple"
2) "orange"
3) "tomato"
4) "carrot"

8.求多个集合的交集:

SINTER fruits vegetables

输出结果:

"apple"

9.求多个集合的差集:

SDIFF fruits vegetables

输出结果:

"orange"
哈希表

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

1.设置哈希表中的字段值:

HSET obj name "John"
HSET obj age 25
HSET obj email "john@example.com"

2.获取哈希表中的字段值:

HGET obj name

输出结果:

"John"

3.一次设置多个字段的值:

HMSET obj name "John" age 25 email "john@example.com"

4.获取多个字段的值:

HMGET obj name age email

输出结果:

1) "John"
2) "25"
3) "john@example.com"

5.获取哈希表中所有字段和值:

HGETALL obj

输出结果:

1) "name"
2) "John"
3) "age"
4) "25"
5) "email"
6) "john@example.com"

6.删除哈希表中的字段:

HDEL obj age email

输出结果:

(integer) 2

7.检查哈希表中是否存在指定字段:

HEXISTS obj name

输出结果:

(integer) 1

8.获取哈希表中所有的字段:

HKEYS obj

输出结果:

1) "name"

9.获取哈希表中所有的值:

HVALS obj

输出结果:

1) "John"

10.获取哈希表中字段的数量:

HLEN obj

输出结果:

(integer) 1
列表

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

1.添加元素:

RPUSH key element1 element2 element3  // 将元素从右侧插入列表
LPUSH key element1 element2 element3  // 将元素从左侧插入列表
  • LPUSH key element1 element2 ...:将一个或多个元素从列表的左侧插入,即将元素依次插入列表的头部。如果列表不存在,则在执行操作前会自动创建一个新的列表。

  • RPUSH key element1 element2 ...:将一个或多个元素从列表的右侧插入,即将元素依次插入列表的尾部。如果列表不存在,则在执行操作前会自动创建一个新的列表。

2.获取元素:

LINDEX key index  // 获取列表中指定索引位置的元素
LRANGE key start stop  // 获取列表中指定范围内的元素

3.修改元素:

LSET key index newValue  // 修改列表中指定索引位置的元素的值

4.删除元素:

LPOP key  // 从列表的左侧移除并返回第一个元素
RPOP key  // 从列表的右侧移除并返回最后一个元素
LREM key count value  // 从列表中删除指定数量的指定值元素

5.获取列表长度:

LLEN key  // 获取列表的长度
发布订阅

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

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

  1. PUBLISH命令:用于将消息发布到指定的频道。语法为:PUBLISH channel message。例如,PUBLISH news “Hello, world!” 将消息"Hello, world!"发布到名为"news"的频道。
  2. SUBSCRIBE命令:用于订阅一个或多个频道。语法为:SUBSCRIBE channel [channel …]。例如,SUBSCRIBE news sports 订阅了名为"news"和"sports"的频道。
  3. UNSUBSCRIBE命令:用���取消订阅一个或多个频道。语法为:UNSUBSCRIBE [channel [channel …]]。例如,UNSUBSCRIBE news 取消订阅名为"news"的频道。
  4. PSUBSCRIBE命令:用于模式订阅一个或多个匹配的频道。语法为:PSUBSCRIBE pattern [pattern …]。其中,pattern可以包含通配符。例如,PSUBSCRIBE news.* 订阅了以"news."开头的所有频道。
  5. PUNSUBSCRIBE命令:用于取消模式订阅一个或多个匹配的频道。语法为:PUNSUBSCRIBE [pattern [pattern …]]。例如,PUNSUBSCRIBE news.* 取消订阅以"news."开头的所有频道。
事务

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

Redis的事务使用MULTI、EXEC、WATCH和DISCARD等命令来管理。

  1. MULTI命令:用于开启一个事务。在执行MULTI命令后,Redis会将接下来的命令都添加到事务队列中,而不是立即执行。
  2. EXEC命令:用于执行事务中的所有命令。当执行EXEC命令时,Redis会按照事务队列中的顺序执行所有的命令。执行结果以数组的形式返回给客户端。
  3. WATCH命令:用于对一个或多个键进行监视。如果在事务执行之前,被监视的键被修改了,事务将被中断,不会执行。
  4. DISCARD命令:用于取消事务。当执行DISCARD命令时,所有在事务队列中的命令都会被清空,事务被取消。

使用事务的基本流程如下:

  1. 使用MULTI命令开启一个事务。
  2. 将需要执行的命令添加到事务队列中。
  3. 如果需要,使用WATCH命令监视键。
  4. 执行EXEC命令执行事务。Redis会按照队列中的顺序执行命令,并返回执行结果。
  5. 根据返回结果判断事务执行是否成功。

事务中的命令在执行之前不会立即执行,而是在执行EXEC命令时才会被执行。这意味着事务期间的命令并不会阻塞其他客户端的操作,也不会中断其他客户端对键的读写操作。

需要注意的是,Redis的事务不支持回滚操作。如果在事务执行期间发生错误,事务会继续执行,而不会回滚已执行的命令。因此,在使用Redis事务时,需要保证事务中的命令是幂等的,即多次执行命令的结果和一次执行的结果相同。

# 连接Redis
redis-cli

# 开启事务
MULTI

# 添加命令到事务队列
SET key1 value1
GET key2

# 执行事务
EXEC

持久化

Redis提供两种持久化方式:

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

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

RDB

打开redis配置文件

在这里插入图片描述

找到save

在这里插入图片描述

他提供了三个案例

  1. 3600秒内也就是一小时进行一次改动就会触发快照
  2. 300秒内也就是5分钟,进行100次修改就会进行快照
  3. 60秒内一万次修改就会进行快照

具体场景需要根据你的用户量,以及负载情况自己定义.

其次就是可以通过命令行手动触发快照

127.0.0.1> save
OK
AOF

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

在这里插入图片描述

主从复制

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

在这里插入图片描述

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

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

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

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

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

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

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

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

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

修改配置文件

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

redis-6378.conf 文件配置

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

启动从服务器

redis-server ./redis-6378.conf 指定配置文件

打开从服务器cli

redis-cli -p 6378

启动主服务器

redis-cli 直接启动默认就是主服务器的配置文件

主服务器写入一个值

set master 2

从服务器直接同步过来这个值 就可以直接获取到

注意从服务器是不允许写入的操作

在这里插入图片描述

  • 32
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值