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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值