基本类型
学习视频位于B站:https://www.bilibili.com/video/BV15A411i7fn?p=26
一、String
二、Hash
三、List
四、Set
1、基本命令
SADD - 添加SREM key number - 删除SMEMBER - 展示列表SISMEMBER - 是否存在SPOP key number - 随机获取number个并删除
2、交并差
SINTER - 交
SUNION - 并
sdiff - 差
如图 交并差 集合 ,最终获得的是红色部分
3、交并差 并且将结果存如指定的key
SINTERSTORE [要放入的新key] [操作的key...] - 在 交 基础上加 store
SUNIONSTORE [要放入的新key] [操作的key...] - 并
sdiffSTORE [要放入的新key] [操作的key...] - 差
4、将某个集合的值移动到另一个集合(set)
SMOVE [要移动谁] [移到哪里去] [移动的value集合]
五、Sorted Set
数据的存储结构为
基本用法为


集合交集并集的使用
排序的使用
通用命令
一、key基本操作



二、DB操作

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

ping - 用来确认服务器是否running
移动key 到其他的库

1、dbsize 输出当前库里面的key的数量-即:大小
2、flushdb 清理当前库-key全删除
3、flushall 所有的库-key都删除
持久化
rdb : redis data base 存储 redis 数据库快照 的方式进行存储
aof : append only file 仅文件后追加 存储log 的方式备份数据
一、RDB
1、持久化配置文件设定

dir: 配置了log 以及备份文件的位置
dbfilename : 当 rdb 方式存储,则文件名称为 dump-6379.rdb (按照上面配置,将会被存放在dir 配置指定的目录下)
rdbcompression : 指定是否要压缩存储 yes 为 是
rdbchecksum : 存储日志后是否要进行检查文件是否损害。 yes 为 是
2、持久化方式
bgsave 和配置文件 save 配置,走的都是 启动线程去执行备份。即:bgsave
只有save是同步执行备份,会有可能导致阻塞影响系统
1>、 命令: save 
2>、这种方式是向redis 服务器提交保存命令,进行串行操作。
如果保存时间比较长。则阻塞后面的待执行的命令。例如 set or get 等。
如果数据量大还可能导致系统的崩溃。
因此 redis 可以将 备份操作进行后台处理,利用新的线程来处理。
redis 提供优化的save命令: bgsave

返回已经开始处理的结果。系统将启用新线程来进行备份操作。
日志文件将会查找到备份完成的 记录。
3> 就算有了后台备份。但是由于操作的人可能忘记了备份。
则 redis 提供了 定时 + 触发条件 进行备份。
操作: 配置文件增加配置: save [时间/秒] [次数(操作redis次数 ]
例如: save 10 5
10秒内,如果 redis 被 有效修改5次(不做相同比较,例如修改 name 张三两次,则认为次数为2)
3、优缺点

二、AOF
1、aof 开启配置

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


通过命令或者配置进行设置




这些是否要持久化。完全看业务情况。这些就仁者见智的考量了。作者是:
三、持久化总结

REDIS事务
一、事务操作
1、命令


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

2、事务的工作流程

由于 redis 事务中遇到错误会跳过错误继续执行。因此企业中很少用reids 事务的。
注意:
事务与单条指令,如果修改同一个key。
那么会根据 执行的前后互相的叠加。
例如:
1、 设置 name 为 张三
2、 启动事务设置 name 为 lisi,并 exec
3、此时由于1 先执行。2将覆盖 张三 ,变成了李四。
REDIS锁
一、命令

1、unwatch 解锁,会解除掉所有的锁。无法指定特定的锁。
2、watch 进行锁定后。可以进行事务操作。
如果在事务未执行之前,被监控的 key 被改变。则 事务执行将会得到 “未执行”的结果 (实例如下截图)
3、watch 可以同时监控多个 key 。
例子:
在执行 exec 之前。在另一客户端 修改 myset 内容。 导致 exec后,并没有被修改。
二、利用setnx 命令,实现redis 分布式锁
setnx = set not exist 如果不存在的话设置key的值。属于字符串的操作。
练习:
在key存在时候。执行setnx 命令将会失败。以这个为契机 作为分布式锁。
在设置需要锁定的key 时候,先进行抢锁。成功后则可以进行修改数据。
如果执行完成。则 执行del key 命令进行删除 释放锁。
似乎不常用。因为 锁和 数据是弱关联。容易出错。
2、解决锁 由于宕机等原因。导致无法释放。
删除策略
一、设置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、定时删除

2、惰性删除

3、定期删除

注意: 那个250ms / hz
其实是 1秒的 1/4 的时间。是规定死的 1/4。-之后可以继续详细学习。
其中 hz 的值,在info 的 server 下。(在redis下输入info试试就知道了)

特点:
三、总结

redis 使用 2,3 号两种删除过期key 的策略
逐出算法
一、新数据进入检测
这个逐出算法和 过期删除的意义不同。假如所有的数据都是永久的,同时内存又不够了。那么将会采取逐出算法进行合理的删除一下key,释放掉空间后,就可以存储新的值了。
1、配置-通过配置文件进行设定这些值

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



1、volatile-lru :least recently used = 最少 最近 使用 = 到目前 最久没有用过
2、volatile-lfu :least frequently used = 最少 频繁 使用 = 到目前为止用的次数最少
3、ttl - 将要过期的。 random - 随机
还有其他的策略。总策略列表如下
二、总结

服务器基础配置
一、典型的几个配置



timeout 客户端连接时间 超过300 秒。并且不进行任何操作。则自动断开连接。
高级数据类型
一、bitmaps

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

1、业务场景

2、高级操作
二、HyperLogLog
统计不重复数据的次数 (uv)
1、操作

操作示例:
总共存在 6个值。 001 到 006
fpmerge 执行的就是marge操作
2、说明


