基本类型

学习视频位于B站:https://www.bilibili.com/video/BV15A411i7fn?p=26

一、String

二、Hash

三、List

四、Set

1、基本命令

  1. SADD - 添加
  2. SREM key number - 删除
  3. SMEMBER - 展示列表
  4. SISMEMBER - 是否存在
  5. SPOP key number - 随机获取number个并删除

2、交并差

SINTER - 交
SUNION - 并
sdiff - 差

如图 交并差 集合 ,最终获得的是红色部分
image.png

3、交并差 并且将结果存如指定的key

SINTERSTORE  [要放入的新key] [操作的key...] - 在 交 基础上加 store
SUNIONSTORE  [要放入的新key] [操作的key...] - 并
sdiffSTORE   [要放入的新key] [操作的key...] - 差

4、将某个集合的值移动到另一个集合(set)

SMOVE [要移动谁] [移到哪里去] [移动的value集合]

五、Sorted Set

数据的存储结构为
image.png
基本用法为
image.png
image.png
image.png
集合交集并集的使用
image.png

排序的使用
image.png

通用命令

一、key基本操作

image.png

image.png

image.png

二、DB操作

image.png
虽然有16个独立的数据库分区。但是他们都公用一块内存区域(这个区域后面视频会有,可以通过配置文件配置属性)

image.png
ping - 用来确认服务器是否running
image.png

移动key 到其他的库
image.png
image.png
1、dbsize 输出当前库里面的key的数量-即:大小
2、flushdb 清理当前库-key全删除
3、flushall 所有的库-key都删除

持久化

rdb : redis data base 存储 redis 数据库快照 的方式进行存储
aof : append only file 仅文件后追加 存储log 的方式备份数据

一、RDB

1、持久化配置文件设定

image.png
dir: 配置了log 以及备份文件的位置
dbfilename : 当 rdb 方式存储,则文件名称为 dump-6379.rdb (按照上面配置,将会被存放在dir 配置指定的目录下)
rdbcompression : 指定是否要压缩存储 yes 为 是
rdbchecksum : 存储日志后是否要进行检查文件是否损害。 yes 为 是

2、持久化方式

bgsave 和配置文件 save 配置,走的都是 启动线程去执行备份。即:bgsave
只有save是同步执行备份,会有可能导致阻塞影响系统

1>、 命令: save
image.png

2>、这种方式是向redis 服务器提交保存命令,进行串行操作。
如果保存时间比较长。则阻塞后面的待执行的命令。例如 set or get 等。
如果数据量大还可能导致系统的崩溃。
因此 redis 可以将 备份操作进行后台处理,利用新的线程来处理。

redis 提供优化的save命令: bgsave

image.png
返回已经开始处理的结果。系统将启用新线程来进行备份操作。
image.png
日志文件将会查找到备份完成的 记录。

3> 就算有了后台备份。但是由于操作的人可能忘记了备份。
则 redis 提供了 定时 + 触发条件 进行备份。

操作: 配置文件增加配置: save [时间/秒] [次数(操作redis次数 ]
例如: save 10 5
10秒内,如果 redis 被 有效修改5次(不做相同比较,例如修改 name 张三两次,则认为次数为2)

3、优缺点

image.png

二、AOF

1、aof 开启配置

image.png
配置 appendonly 是否开启 aof ,默认是 no
appendfsync 同步策略( 指令发送到redis 服务器时候,会先被先放入一个缓冲池中。等到池子里的内容到一定量后,统一写入aof 文件中)
always : 每有一条指令则进行一次 aof 文件的追加
everysec : 每秒进行一次同步
no : 交给系统来处理,管理员无法控制。(no不是 不备份的意思。而是交由系统来处理,不可控)

2、aof 备份文件名称配置

image.png

3、aof 遇到的问题:

问题1:
image.png
解决方案:

image.png

image.png

通过命令或者配置进行设置
image.png

image.png

image.png

image.png

image.png

这些是否要持久化。完全看业务情况。这些就仁者见智的考量了。作者是:
image.png

三、持久化总结

image.png

REDIS事务

一、事务操作

1、命令

image.png

image.png

开始:multi - 中文:多
结束:exec - 中文:执行
取消:discard -中文:废弃

image.png

2、事务的工作流程

image.png

image.png

由于 redis 事务中遇到错误会跳过错误继续执行。因此企业中很少用reids 事务的。


注意:

事务与单条指令,如果修改同一个key。
那么会根据 执行的前后互相的叠加。

例如:
1、 设置 name 为 张三

2、 启动事务设置 name 为 lisi,并 exec

3、此时由于1 先执行。2将覆盖 张三 ,变成了李四。




REDIS锁

一、命令

image.png

1、unwatch 解锁,会解除掉所有的锁。无法指定特定的锁。
2、watch 进行锁定后。可以进行事务操作。
如果在事务未执行之前,被监控的 key 被改变。则 事务执行将会得到 “未执行”的结果 (实例如下截图)

3、watch 可以同时监控多个 key 。

例子:
image.png

在执行 exec 之前。在另一客户端 修改 myset 内容。 导致 exec后,并没有被修改。
image.png

二、利用setnx 命令,实现redis 分布式锁

setnx = set not exist 如果不存在的话设置key的值。属于字符串的操作。

练习:
image.png

在key存在时候。执行setnx 命令将会失败。以这个为契机 作为分布式锁。
在设置需要锁定的key 时候,先进行抢锁。成功后则可以进行修改数据。
如果执行完成。则 执行del key 命令进行删除 释放锁。

似乎不常用。因为 锁和 数据是弱关联。容易出错。

2、解决锁 由于宕机等原因。导致无法释放。
image.png

删除策略

一、设置key 的时效

1、expire

参考地址:https://www.runoob.com/redis/keys-expire.html
Redis Expire 命令用于设置 key 的过期时间,key 过期后将不再可用。单位以秒计。
Expire KEY_NAME TIME_IN_SECONDS

2、expireat

参考地址:https://www.runoob.com/redis/keys-expireat.html
Redis Expireat 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。
key 过期后将不再可用。

语法:
redis 127.0.0.1:6379> Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP

例如:
redis 127.0.0.1:6379> EXPIREAT runoobkey 1293840000
(integer) 1
redis 127.0.0.1:6379> EXISTS runoobkey
(integer) 0

3、pexpire

参考地址:
Redis PEXPIRE 命令和 EXPIRE 命令的作用类似,
但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位。

PEXPIRE key milliseconds

4、pexpireat

参考地址:https://www.runoob.com/redis/keys-pexpireat.html
Redis PEXPIREAT 命令用于设置 key 的过期时间,以毫秒计。key 过期后将不再可用。

语法:redis 127.0.0.1:6379> PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP


例如:redis 127.0.0.1:6379> PEXPIREAT runoobkey 1555555555005

二、策略

1、定时删除

image.png

2、惰性删除

image.png

3、定期删除

image.png
注意: 那个250ms / hz
其实是 1秒的 1/4 的时间。是规定死的 1/4。-之后可以继续详细学习。

其中 hz 的值,在info 的 server 下。(在redis下输入info试试就知道了)

image.png

特点:
image.png

三、总结

image.png

redis 使用 2,3 号两种删除过期key 的策略

逐出算法

一、新数据进入检测

这个逐出算法和 过期删除的意义不同。假如所有的数据都是永久的,同时内存又不够了。那么将会采取逐出算法进行合理的删除一下key,释放掉空间后,就可以存储新的值了。
image.png

1、配置-通过配置文件进行设定这些值

image.png
注: 设置最大内存 maxmemory ,并且在逐出时候,每次进行选择 maxmemory-samples 个 key ,按照 maxmemory-policy 策略进行删除。执行多次后,指导当前执行存储指令的所需内存足够为止。

2、淘汰策略 : maxmemory-policy 可选值

image.png
image.pngimage.png image.png

1、volatile-lru :least recently used  = 最少 最近 使用 = 到目前 最久没有用过
2、volatile-lfu :least frequently used = 最少 频繁 使用 = 到目前为止用的次数最少

3、ttl - 将要过期的。  random - 随机

还有其他的策略。总策略列表如下
image.png

二、总结

image.png

服务器基础配置

一、典型的几个配置

image.png
image.png
image.png
timeout 客户端连接时间 超过300 秒。并且不进行任何操作。则自动断开连接。
image.png

高级数据类型

一、bitmaps

image.png

利用位 进程存储数据
如果key不存在。则会返回0
value 只能存储 0 或者 1
返回值的意思目前未知:
实例:

image.png

1、业务场景

image.png

2、高级操作

image.png

二、HyperLogLog

统计不重复数据的次数 (uv)
image.png

1、操作

image.png

操作示例:
image.png
总共存在 6个值。 001 到 006
fpmerge 执行的就是marge操作

2、说明

image.png