• 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安装

    # 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    vscode安装database client插件

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

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

    基本使用

    key:要设置的键名。
    value:要设置的值。
    NX:可选参数,表示只在键不存在时才设置值。
    XX:可选参数,表示只在键已经存在时才设置值。
    EX seconds:可选参数,将键的过期时间设置为指定的秒数。
    PX milliseconds:可选参数,将键的过期时间设置为指定的毫秒数。
    GET:可选参数,返回键的旧值。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    字符串

    设置

    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

    1) "name"
    2) "xiaoming"
    3) "age"
    4) "xiaoliu"
    
    • 1
    • 2
    • 3
    • 4

    删除哈希表字段

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

    示例

    # 连接Redis
    redis-cli
    
    # 开启事务
    mutli
    
    # 添加命令到事务队列
    set key1 value1
    get key2
    
    # 执行事务
    exec
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    持久化

    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 文件配置

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

    启用从服务器

    从服务器不允许写操作只能读。
    在配置完毕后执行如下命令

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

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

  • 相关阅读:
    C++ PrimerPlus 复习 第一章 命令编译链接文件 make文件
    Vue 时间插件 moment 使用
    Brew包的基本安装(手把手教学)
    TCPIP网络编程 学习笔记_1 --网络编程入门
    字节三面被挂后,狂刷算法,意外斩获阿里offer,定级P6+
    nodejs+vue+elementui社区居民信息管理及数据分析与可视化系统设计
    【Jailhouse 文章】Look Mum, no VM Exits
    【软件测试】测试用例的设计
    qt环境配置
    【机器学习算法】支持向量机(support Vector Machine,SVM)
  • 原文地址:https://blog.csdn.net/m0_47195133/article/details/136366706