首页 > 数据库 >Redis 入门

Redis 入门

时间:2023-07-22 16:55:41浏览次数:39  
标签:入门 stream Redis 命令 查看 使用 节点

Redis 入门教程

0x01 概述

  • Redis(Remote Dictionary Server)是一个开源的基于内存的数据存储系统,可以用作数据库缓存和消息队列等场景,是一种 NoSQL
  • 数据类型
    • 基本数据类型
      • 字符串 String
      • 列表 List
      • 集合 Set
      • 有序集合 SortedSet
      • 哈希 Hash
    • 高级数据类型
      • 消息队列 Stream
      • 地理空间 Geospatial
      • HyperLogLog
      • 位图 Bitmap
      • 位域 Bitfield
  • 使用方式
    • 命令行界面 CLI(Command Line Interface)
    • 应用程序接口 API(Application Programming Interface)
    • 图形用户界面 GUI(Graphical User Interface)
  • 特点
    • 性能极高
    • 数据类型丰富,单键值对最大支持 512M 大小的数据
    • 简单易用,支持所有主流编程语言
    • 支持数据持久化、主从复制、哨兵模式等高可用特性

0x02 安装

  • Mac

    • 安装:brew install redis
    • 启动:redis-serverredis-cli
  • Linux

    • 安装:apt install redis
    • 启动:redis-serverredis-cli
  • Windows

    • 安装

      • 通过 WSL 安装 Linux,在其中安装 Redis

      • 通过 Docker 寻找镜像并下载,之后运行这个镜像

        docker search redis -> docker pull redis

      • 通过 EXE 文件

    • 启动

      • Docker 安装时:docker redis
      • EXE 安装时:redis-server.exe

0x03 RedisInsight 的使用

  • RedisInsight 是操作 Redis 的一种图形化工具
  • 官网下载

0x04 发布订阅模式

  • 通过命令 PUBLISH 将消息发送到指定的频道
    • 向 abc 频道发布 def 消息:PUBLISH abc def
  • 通过命令 SUBSCRIBE 订阅指定频道
    • 订阅 abc 频道:SUBSCRIBE abc
  • 目前缺陷:消息无法持久化、无法计入历史消息等

0x05 数据类型

(1)字符串 String

  • Redis 默认使用字符串存储数据,而且是二进制安全的
    • 中文以二进制的方式存储,使用 GET 命令并不会输出中文,而是十六进制数
    • 在启动 Redis CLI 时使用命令 redis-cli --raw 即可将中文正常显示
  • 存储过程中需要通过指定键值对来保存数据,同时区分大小写
  • 添加
    • 添加字符串:SET name zhangsan
    • 添加数字:SET age 20
  • 查找
    • 查找 name:GET name
    • 查找 age:GET age
    • 查找所有键:KEYS *
  • 删除
    • 删除 name:DEL name
    • 删除所有键:FLUSHALL
  • 存在性
    • 查看键的存在性:EXISTS key
    • 如果键不存在则设置键值:SETNX key value
  • 过期时间
    • 查看键的过期时间:TTL key
    • 设置键的过期时间:EXPIRE key 10(时间单位:秒)
    • 创建键值对并设置过期时间:SETEX key 10 value

(2)列表 List

  • 可以使用 LPUSH 命令或 RPUSH 将元素添加到列表的头部或者尾部
    • 创建列表 letter 并在头部添加元素 a b c:LRUSH letter a b c
  • 使用命令 LRANGE 获取列表内容
    • 获取列表 letter 第一个元素到最后一个元素:LRANGE letter 0 -1
  • 可以使用 LPOP 命令或 RPOP 将元素从列表的头部或者尾部删除
    • 删除列表 letter 后两个元素:RPOP letter 2
  • 使用命令 LLEN 获取列表长度
    • 获取列表 letter 的长度:LLEN letter
  • 可以使用 LTRIM 命令删除指定范围以外的元素
    • 删除列表 letter 除第二个以外的所有元素:LTRIM letter 1 1

(3)集合 Set

  • 使用命令 SADD 创建集合

    • 创建集合 number 并添加元素 1 2 3:SADD number 1 2 3
  • 使用命令 SMEMBERS 查看集合中的所有元素

    • 查看集合 number 中的所有元素:SMEMBERS number
  • 使用命令 SISMEMBER 判断元素是否在集合中

    • 查看集合 number 中是否存在元素 1:SISMEMBER number 1
  • 使用命令 SREM 删除集合中指定的元素

    • 删除集合 number 中的元素 1:SREM number 1
  • 集合运算

    • SINTER:交集运算命令
    • SUNION:并集运算命令
    • SDIFF:差运算命令

(4)有序集合 SortedSet

  • SortedSet 又称 ZSet
  • 与一般集合的区别在于每个元素会被赋予一个分数,之后依据这个分数进行从小到大排序
  • 使用命令 ZADD 创建有序集合
    • 创建有序集合 score 并为学生添加分数:SADD score 80 Alex 90 Bob
  • 使用命令 ZRANGE 查看有序集合中的元素
    • 查看有序集合 score 中的元素:ZRANGE result 0 -1
    • 查看有序集合 score 中的元素以及对应分数:ZRANGE result 0 -1 WITHSCORES
  • 使用命令 ZSCORE 查看指定元素对应分数
    • 查看有序集合 score 中 Bob 的分数:ZSCORE score Bob
  • 使用命令 ZRANK 查看指定元素的排名
    • 查看有序集合 score 中 Bob 的排名:ZRANK score Bob
  • 使用命令 ZREVRANK 查看指定元素的倒序排名
    • 查看有序集合 score 中 Bob 的倒序排名:ZREVRANK score Bob

(5)哈希 Hash

  • 哈希是一个字符类型的字段和值的映射表,是键值对的集合,适合存储对象
  • 使用命令 HSET 向哈希中添加键值对
    • 创建哈希 student 并添加相关信息
      • HSET student name Bob
      • HSET student age 20
  • 使用命令 HGET 查看哈希中的指定键的值
    • 查看哈希 student 中 name 的值:HGET student name
    • 查看哈希 student 中的全部键值对:HGETALL student
  • 使用命令 HDEL 删除哈希中指定键值对
    • 删除哈希 student 中的 age:HDEL student age
  • 使用命令 HEXISTS 判断哈希中某个键值对是否存在
    • 查看哈希 student 中 age 的存在性:HEXISTS student age
  • 使用命令 HKEYS 查看哈希中所有键
  • 使用命令 HLENS 查看哈希中所有键值对的数量

(6)消息队列 Stream

  • 使用命令 XADD 向消息队列中添加一条消息
    • 创建消息队列 stream 并添加消息:XADD stream * message
      • * 表示消息 id 自动生成
      • id 由两个整数以及整数之间的 - 构成
        • 第一个整数表示时间戳
        • 第二个整数表示序列号
  • 使用命令 XLEN 查看消息队列中消息的数量
    • 查看消息队列 stream 中消息的数量:XLEN stream
  • 使用命令 XRANGE 查看消息队列中消息的详细内容
    • 查看消息队列 stream 中所有消息的内容:XRANGE stream - +
  • 使用命令 XDEL 删除消息队列中的消息队列中通过 id 指定的消息
    • 删除消息队列 stream 中消息 id 为 1 的消息:XDEL stream 1
    • 删除消息队列 stream 中所有消息:XTRIM stream MAXLEN 0
  • 使用命令 XREAD 消费消息
    • XREAD COUNT 2 BLOCK 1000 STREAMS stream 0
      • COUNT 2:一次读取两条消息
      • BLOCK:如果没有消息则阻塞 1000 毫秒
      • STREAMS stream:指定消息队列
      • 0:从头开始读取
    • 获取从现在开始最新的消息:XREAD COUNT 2 BLOCK 1000 STREAMS stream $
      • $:从最新消息开始读取
    • 消费者读取消息队列 stream 最新消息:XREADGROUP GROUP group1 consumer1 COUNT 2 BLOCK 3000 STREAMS stream >
  • 使用命令 XGROUP 处理消费者组相关任务
    • 创建一个 id 为 0 的消费者组 group1 读取消息队列 stream 的消息:
      XGROUP CREATE stream group1 0
    • 为消费者组 group1 添加消费者 consumer1:
      XGROUP CREATECONSUMER stream group1 comsumer1
  • 使用命令 XINFO GROUPS 查看消费者组的信息
    • 查看消息队列 stream 的消费者组信息:XINFO GROUPS stream

(7)地理空间 Geospatial

  • 一种存储地理位置信息的数据结构,支持对地理位置进行各种计算操作
  • 使用命令 GEOADD 添加地理空间
    • 创建地理空间 city,添加以下地理位置,经度为 120,纬度为 40,名称为 moudi:
      GEOADD city 120 40 moudi
    • 添加多个信息:GEOADD city 1 1 a 2 2 b
  • 使用命令 GEOPOS 获取地理空间中指定位置经纬度坐标
    • 查看 moudi 的经纬度坐标:GEOPOS city moudi
  • 使用命令 GEODIST 计算两个地理位置的举例
    • 计算 a 地和 b 地的距离:GEODIST city a b(单位为米)
  • 使用命令 GEOSEARCH 搜索指定范围内的成员并返回
    • 计算在 a 地方圆 100km 内的地理位置:
      GEOSEARCH city FROMMEMBER a BYRADIUS 100 KM

(8)HyperLogLog

  • 一种用来做基数统计的算法
    • 基数:如果集合中的每个元素都是唯一且不重复的,那么这个集合的基数就是集合中元素的个数
  • 特点:占用内存小,存在一定误差
  • 使用命令 PFADD 添加元素
    • 创建 number 并添加数字 1 2 3:PFADD number 1 2 3
  • 使用命令 PFCOUNT 查看基数
    • 查看 number 的基数:PFCOUNT number
  • 使用命令 PFMERGE 合并多个 HyperLogLog
    • 合并 hll1 和 hll2:PFMERGE hll hll1 hll2

(9)位图 Bitmap

  • 位图是字符串类型的扩展,可以使用一个 String 类型来模拟一个 Bit 数组
  • 使用命令 SETBIT 设置某个偏移量的值
    • 设置一个名为 like 的 Bitmap,其偏移量 0 设置为 1,偏移量 1 设置为 0:
      SETBIT like 0 1SETBIT like 1 0
  • 使用命令 GETBIT 获取某个偏移量的值
    • 获取 like 偏移量 1 的值:GETBIT like 1
  • 使用命令 SET 批量设置某个键的各个偏移量对应的值
    • 设置 like2:SET like2 "\xF0"
      • \xF0 转换为二进制数为 11110000
  • 使用命令 BITCOUNT 统计某个键的值里有多少个 1
    • 统计 like2:BITCOUNT like2
  • 使用命令 BITPOS 可以获取某个键里第一个出现的 0 或 1 的位置
    • 获取 like2 第一个出现 0 的位置:BITPOS like2 0

(10)位域 BitField

  • 位域能够将很多小的整数存储到一个较大的位图中,从而高效使用内存
  • 使用命令 BITFIELD 可以设置位域
    • BITFIELD player:1 set u8 #0 1
      • player:1:键名,表示角色 id
      • set:设置
      • u8:八位无符号整数,表示角色等级
      • #0:表示第一个存储位置
    • BITFIELD player:1 get u8 #0
      • get:获取
    • BITFIELD player:1 incrby u8 #0 2
      • incrby:增加

0x06 事务

  • Redis 支持事务,使得在一次请求中可以执行多个命令
  • Redis 中的事务主要是通过 MULTIEXEC 命令实现的
    • MULTI 命令用于开启一个事务,事务开启后,所有命令就会进入一个队列中
    • EXEC 命令用于执行事务中的所有命令
  • 事务并不能保证所有命令全部执行成功,但可以保证以下三点
    1. 在发送 EXEC 命令前,所有命令都会被放入一个队列中缓存起来,而非立即执行
    2. 在收到 EXEC 命令后,事务开始执行,任何一个命令执行失败不会导致事务暂停
    3. 在事务执行过程中,其他客户端提交的请求不会插入到该事务当中
  • 使用命令 MULTI 开启一个事务,(TX) 说明进入了事务模式,此时输入需要执行的命令即可
  • 在事务模式下,使用命令 EXEC 即可执行事务,完成上述指令

0x07 持久化

  • 由于 Redis 是一个基于内存的数据库,断电等情况会导致数据丢失,故而需要持久化
  • 实现持久化方式
    • RDB(Redis Database) 方式
      • RDB 是指在指定时间间隔内,将内存中的数据快照写入磁盘
      • 数据快照是某个时间点上数据的完整副本,可以通过配置文件中的 save 参数配置
      • 在终端直接使用命令 save 即可手动触发快照
      • 由于不是实时保存数据,故而 RDB 方式更适合用来做备份
      • 在生产环境中,Redis 所需的内存空间比较大,导致内存中的数据同步到硬盘的时间比较长,造成阻塞状态,不能进行操作。因此可以使用命令 bgsave 单独创建一个子进程来负责将内存中的数据写入到硬盘中,使主进程可以继续处理请求
    • AOF(Append Only File)方式
      • 解决 RDB 无法做到秒级快照的问题
      • AOF 是指追加文件,原理是在执行写命令时,不仅将命令写入内存,还会写入到一个追加文件中,以日志的方式记录每个写操作,当 Redis 重启时就会重新执行 AOF 文件中的命令,从而重建数据库
      • 开启 AOF 方式:在配置文件中,将 append only 参数的值改为 yes 即可

0x08 主从复制

  • 主从复制是指将一台 Redis 服务器的数据复制到其他 Redis 服务器,前者称为“主节点”(master),后者称为“从节点”(slave),主节点有多个从节点,从节点仅有一个主节点;数据的复制是单向的(主节点->从节点)

  • 一般情况下,主节点负责写操作,从节点负责读操作

  • 主节点会将自己的数据变化,通过异步的方式发送到从节点,从节点接收后更新自己的数据,从而达成数据一致

  • 配置主从节点

    • 使用命令 role 查看当前节点角色

      • 一般情况下默认为主节点
    • 配置从节点

      • 命令行方式,直接指定主节点的 IP 地址和端口

        • 旧版:slaveof host port
        • 新版:replicaof host port
      • 修改配置文件(redis.conf)方式

        主节点:6379,从节点:6380

        # 修改端口号
        port 6380
        
        # 修改 pidfile 配置项
        pidfile /.../redis_6380.pid
        
        # 修改 dbfilename 配置项,此文件是持久化的文件
        dbfilename dump-6380.rdb
        
        # 修改 replicaof 配置项,此项用来指定主节点
        replicaof 127.0.0.1 6379
        
        • 使用命令 redis-server redis-6380.conf 启动从节点
        • 使用命令 redis-cli -p 6380 连接该从节点

0x09 哨兵模式 Sentinel

  • 哨兵会以一个独立的进程运行在 Redis 集群中,用来监控 Redis 集群中的各个节点是否运行正常
  • 功能:
    1. 监控:通过不断发送命令检查 Redis 节点是否正常
    2. 通知:当发现某个节点出现问题时,哨兵就会通过发布订阅模式来通知其他节点
    3. 自动故障转移:当主节点不能正常工作时,哨兵会将一个从节点升级为主节点,并将其他从节点指向新的主节点
  • 配置哨兵模式
    • 在 Redis 集群中添加哨兵配置文件 sentinel.conf:
      sentinel monitor master 127.0.0.1 6379 1
      • master:是主节点的名称
      • 1:表示只需要一个哨兵节点同意即可执行自动故障转移
    • 启动哨兵节点:`redis-sentinel sentinel.conf

-End-

标签:入门,stream,Redis,命令,查看,使用,节点
From: https://www.cnblogs.com/SRIGT/p/17573683.html

相关文章

  • redis del namespace
    RedisDel命令解析与示例简介在Redis中,DEL命令被用来删除一个或多个键。这个命令可以用于删除任何类型的键,包括字符串、列表、哈希表、集合和有序集合。在删除键时,与被删除键关联的数据也会被同时删除。本文将介绍DEL命令的用法、参数、返回值以及示例代码。DEL命令的用......
  • redis dbtree
    RedisDBTree:ExploringtheDataStructureRedisisanopen-source,in-memorydatastructurestorethatiscommonlyusedasadatabase,cache,andmessagebroker.Itsupportsvariousdatastructures,suchasstrings,hashes,lists,sets,andsortedsets,......
  • redis cluster 删除key
    RedisCluster删除Key简介Redis是一个开源的内存数据库,它提供了多种数据结构和丰富的功能。RedisCluster是Redis的分布式解决方案,它允许将数据分布在多个节点上,提高了数据的可用性和性能。在RedisCluster中删除Key是一项常见的操作。本文将介绍如何使用RedisCluster删除Key,并......
  • redis 6.2.6 for windows
    Redis6.2.6forWindowsRedisisanopen-source,in-memorydatastructurestorethatcanbeusedasadatabase,cache,andmessagebroker.Itisknownforitssimplicity,highperformance,andrichsetofdatatypes.Inthisarticle,wewillexplorehowt......
  • redis自动刷新过期时间
    Redis自动刷新过期时间Redis是一个开源的内存数据库,它提供了一些强大的功能,如缓存、消息队列和键值存储等。在缓存应用中,我们经常会遇到一个问题,就是如何处理缓存的过期时间。当缓存过期后,我们需要从数据库中重新加载数据,并将其重新设置到Redis中。为了解决这个问题,我们可以使用Re......
  • redis主从模式修改密码
    Redis主从模式修改密码概述在Redis主从模式中,需要修改密码时,需要在主节点上修改密码,并且同步到所有的从节点上。下面将详细介绍如何实现这个过程。修改密码流程下面是修改Redis主从模式密码的流程:步骤描述步骤1连接到主节点步骤2修改主节点密码步骤3获取从......
  • redis重置过期时间
    Redis重置过期时间Redis是一款开源的高性能键值存储系统,常用于缓存、消息队列等场景。在Redis中,可以为每个键设置过期时间,过期时间到达后,Redis会自动删除该键。但有时候,我们需要动态地重置键的过期时间,以延长其存活时间。本文将介绍如何在Redis中重置键的过期时间,并提供相应的代码......
  • redis中地区的存八个小时格式怎么写
    使用Redis存储地区信息并设置过期时间在一些应用程序中,我们经常需要存储地区信息,并设置一个过期时间来保持数据的新鲜度。例如,一个电子商务网站可能会存储用户所在地区的商品偏好,然后根据地区信息来展示相关商品。在这种情况下,我们可以使用Redis来存储地区信息,并设置一个合适的过......
  • redis中的Cursor使用实例
    Redis中的Cursor使用实例Redis是一种高性能的键值存储系统,常用于缓存、消息队列和排行榜等应用场景。在Redis中,Cursor是一种用于遍历集合元素的机制。通过使用Cursor,我们可以逐步地获取集合中的元素,而不需要一次性将整个集合加载到内存中。什么是Cursor在Redis中,Cursor是一个游......
  • redis怎么获取用户名和密码
    Redis怎么获取用户名和密码Redis是一个开源的内存数据结构存储系统,通常用作数据库、缓存和消息中间件。在实际应用中,为了保护Redis的安全性,我们需要设置用户名和密码进行身份验证。下面将介绍如何在Redis中设置用户名和密码,并在代码示例中展示如何获取用户名和密码。设置用户名......