文章目录

  • Redis 6.0学习指南
    • 第一章 引言
      • Redis简介
      • Redis高性能因素
        • 使用Redis可能遇到的问题
      • Redis下载
        • 基本配置
        • 启动redis
    • 第二章 数据库与键
      • Key
        • 重命名
        • 随机返回一个键
        • 键过期
          • 查看过期时间
          • 清除过期时间
        • 遍历键
          • 全量遍历键
          • 渐进式遍历
      • Database
        • 相关配置
        • 常用命令
    • 第三章 通讯协议RESP
      • 举个例子
      • 返回结果格式
    • 附录
      • 附录a. 网站资料
        • 网站收录
          • 官方网站
          • 国内社区
          • Github
          • [antirez 博客](http://antirez.com/latest/0)
          • [Redis 扩展模块](https://redis.io/modules)
      • 附录b. 书籍推荐
        • 使用类
        • 源码类

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 <bytes>
maxmemorty 1024000000

设置redis密码

#requirepass foobared
requirepass 123456

启动redis

redis-server.exe redis.windows.conf

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

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

第二章 数据库与键

Key

重命名

rename key newKey

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

随机返回一个键

randomkey

键过期

//键在seconds秒后过期
expire key seconds
//键在秒级时间timestamp后过期
expireat key timestamp//键在milliseconds毫秒后过期
pexpire key milliseconds
//键在毫秒级时间戳timestamp后过期
pexpireat key milliseconds-timestamp

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

查看过期时间
//查询键的剩余过期时间 秒级
ttl key
//查询键的剩余过期时间 毫秒级
pttl key

有3种返回值:

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

遍历键

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

全量遍历键
keys pattern

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]

  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;

相关配置

  数据库的数量可以在配件文件中,通过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 <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

常用命令

切换数据库

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

select 2

清除当前数据库

flushdb

清除所有数据库

flushall

第三章 通讯协议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

  格式化之后:

$3
SET
$5
hello
$5
world

  换行符 \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设计与源码分析》 陈雷

Redis 6.0学习指南相关推荐

  1. redis 3.0 cluster 集群 学习之路篇 [3]

    周氏一族,整理技术文档,给下一代留点教程...... redis 3.0 cluster 安装篇,请看 http://zhoushouby.blog.51cto.com/9150272/1560400 ...

  2. 《果壳中的C# C# 5.0 权威指南》 (09-26章) - 学习笔记

    <果壳中的C# C# 5.0 权威指南> ========== ========== ========== [作者] (美) Joseph Albahari (美) Ben Albahar ...

  3. 《果壳中的C# C# 5.0 权威指南》 (01-08章) - 学习笔记

    <果壳中的C# C# 5.0 权威指南> ========== ========== ========== [作者] (美) Joseph Albahari (美) Ben Albahar ...

  4. c语言学习指南app,C语言学习指南下载-C语言学习指南 v1.0.0_手机乐园

    软件简介 C语言学习指南是一款好用的编程语言学习工具,界面无任何的广告,而且开发者保证绝对的免费,里面全部都是网友在网上收集的C语言教程和文章,资源很丰富,而且分类也超级的详细,除了教程外还有面试题以 ...

  5. 下载!微软出品的最新 Kubernetes 学习指南 3.0

    点击上方"逆锋起笔",关注领取视频教程 ☞ 程序员进阶必备资源免费送「各种技术!」 ☜ Kubernetes 正在席卷应用开发世界,正在塑造应用程序开发和管理的未来,这是一个不争的 ...

  6. python从零开始到精通_「Python 入门学习指南」0基础小白助你从入门到精通!

    Python比较简单,非常适合初学者入门,内置了各种库,还有丰富的大约13万第三方库,掌握了语法和编程思维后,可以直接使用这些库做出自己的产品.这篇 Python 入门学习指南,针对没有任何编程经验. ...

  7. 阿里p8软测专家耗时一个月整理出,从0基础自学到功能测试再到自动化测试超全学习指南

    从事测试工作已8年有余了,今天想聊一下自己刚入门时和现在的今昔对比,虽然现在也没什么大成就,只能说笑谈一下自己的测试生涯. 技术栈的变化 刚开始是做的开发,也是做了好几年的开发,后面软件测试的风潮开始 ...

  8. 广工工作室各方向学习指南

    广工工作室各方向学习指南 新的学期即将开始,计算机学院各大工作室也陆续会在本学期开始招新.但是想要加入工作室,我们需要一定的知识储备,并顺利通过所有的考核.此刻的你也许还很迷茫,对工作室的各大方向和和 ...

  9. Java工程师学习指南(2019最新版)

    写过一个Java工程师学习指南,我把它分为了四个部分,第一步是打好Java基础,掌握Java核心技术,第二步是掌握Java Web技术栈,能够做一些项目,第三步是掌握Java方面的进阶技术,包括网络编 ...

  10. 超硬核Java工程师学习指南,真正的从入门到精通,众多粉丝亲测已拿offer!

    最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思 ...

最新文章

  1. 梦心日记本V2.0完工
  2. 软件测试用例文档模板 简书,如何写出高质量的测试用例
  3. esp8266驱动oled屏幕_为什么“更好的OLED电视”在海信?
  4. 理解 RIPv1使用广播更新路由与RIPv2使用组播更新路由的区别
  5. BAT大神推荐:看懂英文文档,每天只需要10分钟做这件事……
  6. 关于Web面试的基础知识点--Html+Css(三)
  7. 数据库和缓存一致性分析
  8. print (re.findall((?:abc)+,abcabcabc))
  9. wordpress中直接执行mysql查询语句的常用方法
  10. HTML实现页面注册
  11. linux离线安装系统工具arping
  12. 如何把图片上的文字转换成word的文字。
  13. 直流有刷电机与无刷电机的区别
  14. 未来发展人工智能的意义是什么?
  15. 计算机与打印机脱机后怎么共享,打印机脱机工作怎么恢复(连接的共享打印机脱机)...
  16. 高小英和张东健1998年合作出演过爱情片《恋风恋歌
  17. 剑指Offer-22反转链表
  18. 已知函数func的C语言代码框架,第三章习题-ddg
  19. python利用datetime模块计算时间差
  20. MDK解决方案:Warning L6989W

热门文章

  1. asp php 一句话,ASP_asp一句话木马原理分析,通过HTTP协议来访问 一句话木 - phpStudy...
  2. 基于Packet Tracer 的校园网络设计方案(计算机网络与课程实验)(一)——子网划分方案规划
  3. php函数find的用法,fleaphp fleaphp crud操作之find函数的使用方法
  4. Flutter videoplayer
  5. Nvidia 的新显卡架构 Maxwell 性能相比开普勒提升了多少?
  6. 怎么在html中加入网上的图片,css中如何插入图片?
  7. ISO27001风险评估实施流程(详细版)
  8. QT5.14.1安装教程
  9. 学习中科院杨力祥c++
  10. 手机屏幕坏了____怎么把里面的资料导出(18种方法)