• Redis 6.0学习指南


    Redis 6.0学习指南

    第一章 引言

    Redis简介

      Redis 是一个开源(BSD许可)、基于内存、高性能的数据结构,可以作为K-V数据库、缓存、消息代理(message broker)和流引擎。

      Redis提供了许多数据结构,诸如String、Hash、List、Set、Sorted Set、BitMap、Hyperloglog、Geospatial index和Stream。

    Redis高性能因素

    • 纯内存存储
    • 单线程操作,避免了频繁的上下文切换
    • 采用了非阻塞I/O多路复用机制

    使用Redis可能遇到的问题

    • 缓存和数据库双写一致性问题
    • 缓存雪崩问题
    • 缓存击穿问题
    • 缓存的并发竞争问题

    Redis下载

      Redis 使用标准版本标记进行版本控制:major.minor.patchlevel。偶数的版本号表示稳定的版本, 例如 1.2,2.0,2.2,2.4,2.6,2.8,奇数的版本号用来表示非标准版本。

      Redis官方下载地址:https://redis.io/download/

    基本配置

    redis启动这一块不会出啥问题,这边就直接复制老博客内容了。

    修改redis.windows.conf文件,设置maxmemory 大小

    #maxmemorty 
    maxmemorty 1024000000
    
    • 1
    • 2

    设置redis密码

    #requirepass foobared
    requirepass 123456
    
    • 1
    • 2

    启动redis

    redis-server.exe redis.windows.conf
    
    • 1

    将redis加入到windows的服务中(service和loglevel前都是两个-)

    redis-server –service-install redis.windows.conf –loglevel verbose
    
    • 1

    第二章 数据库与键

    Key

    重命名

    rename key newKey
    
    • 1

    如果在rename之前,键java已经存在,那么它的值也将被覆盖。
    为了防止被rename覆盖,Redis提供了renamenx命令,确保只有newKey不存在时候才被覆盖。

    随机返回一个键

    randomkey
    
    • 1

    键过期

    //键在seconds秒后过期
    expire key seconds
    //键在秒级时间timestamp后过期
    expireat key timestamp
    
    //键在milliseconds毫秒后过期
    pexpire key milliseconds
    //键在毫秒级时间戳timestamp后过期
    pexpireat key milliseconds-timestamp
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    但无论是使用过期时间还是时间戳,秒级还是毫秒级,在Redis内部最终使用的都是pexpireat。

    查看过期时间
    //查询键的剩余过期时间 秒级
    ttl key
    //查询键的剩余过期时间 毫秒级
    pttl key
    
    • 1
    • 2
    • 3
    • 4

    有3种返回值:

    • 大于等于0的整数:键剩余的过期时间(ttl是秒,pttl是毫秒)。
    • -1:键没有设置过期时间。
    • -2:键不存在。
    清除过期时间
    persist key
    
    • 1

    遍历键

      当数据量较小时,可以使用Keys命令返回所有满足条件的Key集合。但是当数据量较大时,由于此命令通过遍历匹配key所以很容易阻塞Redis服务;另外由于不能使用limit命令,Keys命令会返回所有匹配数据,导致输出过多,所以生产环境一般不使用此命令。

    全量遍历键
    keys pattern
    
    • 1

    KEYS * 匹配数据库中所有 key 。
    KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
    KEYS h*llo 匹配 hllo 和 heeeeello 等。
    KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。

    渐进式遍历
    scan cursor [match pattern] [count number]
    
    • 1

      cursor是必需参数,实际上cursor是一个游标,第一次遍历从0开始,每次scan遍历完都会返回当前游标的值,直到游标值为0表示遍历结束。
      match pattern是可选参数,它的作用的是做模式的匹配,这点和keys的模式匹配很像。
      count number是可选参数,它的作用是表明每次要遍历的键个数,默认值是10,此参数可以适当增大。

    Database

      Redis中默认有16个相互空间独立的数据库(Database)。每个数据库都有一个整数类型id,新客户端默认选择的数据库是id为0的数据库。

    typedef struct redisDb {
        dict *dict;                 /* The keyspace for this DB */
        dict *expires;              /* Timeout of keys with a timeout set */
        dict *blocking_keys;        /* Keys with clients waiting for data (BLPOP)*/
        dict *ready_keys;           /* Blocked keys that received a PUSH */
        dict *watched_keys;         /* WATCHED keys for MULTI/EXEC CAS */
        int id;                     /* Database ID */
        long long avg_ttl;          /* Average TTL, just for stats */
        unsigned long expires_cursor; /* Cursor of the active expire cycle. */
        list *defrag_later;         /* List of key names to attempt to defrag one by one, gradually. */
    } redisDb;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    相关配置

      数据库的数量可以在配件文件中,通过databases参数进行配置。

    # Set the number of databases. The default database is DB 0, you can select
    # a different one on a per-connection basis using SELECT  where
    # dbid is a number between 0 and 'databases'-1
    databases 16
    
    • 1
    • 2
    • 3
    • 4

    常用命令

    切换数据库

      可以通过调用select [id]的命令来改变当前客户端所选数据库,如下所示。随后,所有的命令将使用DB2,直到再次切换到另一个数据库下。每个数据库都有属于自己的空间,不必担心之间的key冲突。不同的数据库下,相同的key取到各自的值。

    select 2
    
    • 1

    清除当前数据库

    flushdb
    
    • 1

    清除所有数据库

    flushall
    
    • 1

    第三章 通讯协议RESP

      Redis制定了RESP(REdis Serialization Protocol, Redis序列化协议) 实现客户端与服务端的正常交互,这种协议简单高效,既能够被机器解析,又容易被人类识别。

    举个例子

      "set hell world"基于RESP格式化之后的结果是:

    *3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n
    
    • 1

      格式化之后:

    $3
    SET
    $5
    hello
    $5
    world
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

      换行符 \r\n 用于区分命令请求的若干参数,*3表示该命令请求有3个参数,$3$5$5 表示该参数字符串长度。

    返回结果格式

      Redis的返回结果类型分为以下五种,

    • 状态回复 在RESP中第一个字符为“+”。
    • 错误回复 在RESP中第一个字符为“-”。
    • 整数回复 在RESP中第一个字符为“:”。
    • 字符串回复 在RESP中第一个字符为“$”。
    • 多条字符串回复 在RESP中第一个字符为“*”。

    附录

    附录a. 网站资料

    网站收录

    官方网站

    Redis 官网文档非常丰富,它的文档非常值得啃。Redis官网的精华文章都在顶部导航Documentation连接中。

    国内社区

    如果你的英文不佳,可以去看看中文Redis网站。

    Github

    github项目地址

    antirez 博客

    Redis 作者 antirez 大佬的博客有很多关于 Redis 的最新消息,除此之外还会有一些作者新发现的、好玩的技术知识点。

    Redis 扩展模块

    Redis 4.0 增加了模块化之后,越来越多的 Redis 模块雨后春笋般的被开发出来。这个页面包含了开源市场上所有的 Redis 模块列表,有一些模块比较稳定,还有一些处于 Alpha 阶段。读者可以从中挑选出自己感兴趣的模块研究学习。

    附录b. 书籍推荐

    使用类

    《Redis开发与运维》 付磊

    源码类

    《Redis设计与实现》 黄健宏

    《Redis5设计与源码分析》 陈雷

  • 相关阅读:
    采用cv2和默认的人脸识别分类器实现人脸检测功能
    车载氧吧E-mark认证流程是怎样的?
    Scrapy基本概念——Item Pipeline
    java计算机毕业设计ssm+vue东莞大益球队管理系统
    Windows server 2003安装IIS教程怎么安装iis?win2003 iis服务器实验报告
    Feign的面试
    【Matlab】欧拉公式、梯形公式和改进欧拉公式求解常微分方程
    96-MySQL高级
    最新前端vue项目打包放到gitHub上部署步骤
    WebMail:网页注册成功发送邮件
  • 原文地址:https://blog.csdn.net/qq1620657419/article/details/126033791