Redis全套学习笔记


声明:本站所有资源均搜集于互联网或网友分享,仅供学习与交流,如果侵犯到你的权益,请及时联系我删除该资源。

Redis全套学习笔记.docx (访问密码: 2344)

目录

1、redis概述和安装
1.1、安装redis
1.2、启动redis
方式1:前台启动(不推荐)
方式2:后端启动(推荐)
1.3、关闭redis
1.4、进入redis命令窗口
1.5、redis命令大全
1.6、redis介绍相关知识
2、redis 5大数据类型
2.1、redis键(key)
2.2、redis字符串(String)
2.2.1、简介
2.2.2、常用命令
set:添加键值对
get:获取值
apend:追价值
strlen:获取值的长度
setnx:key不存在时,设置key的值
incr:原子递增1
decr:原子递减1
incrby/decrby:递增或者递减指定的数字
mset:同时设置多个key-value
mget:获取多个key对应的值
msetnx:当多个key都不存在时,则设置成功
getrange:获取值的范围,类似java中的substring
setrange:覆盖指定位置的值
setex:设置键值&过期时间(秒)
getset:以新换旧,设置新值同时返回旧值
2.2.3、数据结构
2.3、redis列表(List)
2.3.1、简介
2.3.2、常用命令
lpush/rpush:从左边或者右边插入一个或多个值
lrange:从列表左边获取指定范围内的值
lpop/rpop:从左边或者右边弹出多个元素
rpoplpush:从一个列表右边弹出一个元素放到另外一个列表中 lindex:获取指定索引位置的元素(从左到右)
llen:获得列表长度
linsert:在某个值的前或者后面插入一个值
lrem:删除指定数量的某个元素
lset:替换指定位置的值
2.3.4、数据结构
2.4、redis集合(Set)
2.4.1、简介
2.4.2、常用命令
sadd:添加一个或多个元素
smembers:取出所有元素
sismember:判断集合中是否有某个值
scard:返回集合中元素的个数
srem:删除多个元素
spop:随机弹出多个值

srandmember:随机获取多个元素,不会从集合中删除 
smove:将某个原创从一个集合移动到另一个集合 
sinter:取多个集合的交集 
sinterstore:将多个集合的交集放到一个新的集合中 
sunion:取多个集合的并集,自动去重 
sunionstore:将多个集合的并集放到一个新的集合中 
sdiff:取多个集合的差集 
sdiffstore:将多个集合的差集放到一个新的集合中 
3.4.3、数据结构 
2.5、redis哈希(Hash)
2.5.1、简介 
2.5.2、常用命令 
hset:设置多个field的值 
hget:获取指定filed的值 
hgetall:返回hash表所有的域和值 
hmset:和hset类似(已弃用)
hexists:判断给定的field是否存在,1:存在,0:不存在 
hkeys:列出所有的filed 
hvals:列出所有的value 
hlen:返回filed的数量 
hincrby:filed的值加上指定的增量 
hsetnx:当filed不存在的时候,设置filed的值 
2.5.3、数据结构 
2.6、redis有序集合zset(sorted set)
2.6.1、简介 
2.6.2、常用命令 
zadd:添加元素 
zrange:score升序,获取指定索引范围的元素 
zrevrange:score降序,获取指定索引范围的元素 
zrangebyscore:按照score升序,返回指定score范围内的数据     zrevrangebyscore:按照score降序,返回指定score范围内的数据     zincrby:为指定元素的score加上指定的增量 
zrem:删除集合中多个元素 
zremrangebyrank:根据索引范围删除元素 
zremrangebyscore:根据score的范围删除元素 
zcount:统计指定score范围内元素的个数 
zrank:按照score升序,返回某个元素在集合中的排名 
zrevrank:按照score降序,返回某个元素在集合中的排名 
zscore:返回集合中指定元素的score 
2.6.3、数据结构 

3、redis的发布和订阅
3.1、什么是发布和订阅
3.2、redis的发布和订阅
3.3、发布和订阅的命令行实现
3.4、发布和订阅常用命令
3.4.1、subscribe:订阅一个或者多个频道
3.4.2、publish:发布消息到指定的频道
3.4.2、psubscribe:订阅一个或多个符合给定模式的频道
4、redis新的3种数据类型
4.1、Bitmaps:位操作字符串
4.1.1、简介
4.1.2、常用命令
setbit:设置某个偏移量的值(0或1)
getbit:获取某个偏移位的值
bitcount:统计bit位都为1的数量
bittop:对一个多个bitmaps执行位操作
4.1.3、bitmaps与set比较
4.2、HyperLoglog

4.2.1、简介 
4.2.2、命令 
pfadd:添加多个元素 
pfcount:获取多个HLL合并后元素的个数 
pfmerge:将多个HLL合并后元素放入另外一个HLL 
4.3、Geographic 
4.3.1、简介 
4.3.2、命令 
geoadd:添加多个位置的经纬度 
geopos:获取多个位置的坐标值 
geodist:获取两个位置的直线距离 
georadius:以给定的经纬度为中心,找出某一半径内的元素 5、Jedis操作Redis6 
5.1、介绍 
5.2、Jedis的用法 
5.2.1、引入maven依赖 
5.2.2、使用redis的api操作redis 

6、SpringBoot整合Redis
6.1、引入redis的maven配置
6.2、application.properties中配置redis信息
6.3、使用RedisTemplate工具类操作redis
6.4、RedisTemplate示例代码
7、redis事务操作
7.1、redis事务定义
7.2、Multi、Exec、discard
7.2.1、相关的几个命令
multi:标记一个事务块的开始
exec:执行所有事务块内的命令
discard:取消事务
7.3、事务的错误处理
7.3.1、情况1:组队中命令有误,导致所有命令取消执行
7.3.2、情况2:组队中没有问题,执行中部分成功部分失败 7.4、事务冲突的问题
7.4.1、例子
7.4.2、悲观锁
7.4.3、乐观锁
7.4.4、watch key [key …]
7.4.5、unwatch:取消监视
7.5、redis事务三特性
(1)单独的隔离操作
(2)没有隔离级别的概念
(3)不能保证原子性
8、redis持久化之RDB(Redis DataBase)
8.1、总体介绍
8.2、RDB(Redis DataBase)
8.2.1、RDB是什么?
8.2.2、备份是如何执行的
8.2.3、Fork
8.2.4、RDB持久化流程
8.2.5、指定备份文件的名称
8.2.6、指定备份文件存放的目录
8.2.7、触发RDB备份
方式1:自动备份,需配置备份规则
方式2:手动执行命令备份(save | bgsave)
方式3:flushall命令
8.2.8、redis.conf 其他一些配置
stop-writes-on-bgsave-error:当磁盘满时,是否关闭redis的写操作 rdbcompression:rdb备份是否开启压缩

rdbchecksum:是否检查rdb备份文件的完整性
8.2.9、rdb的备份和恢复
8.2.10、优势
8.2.10、劣势
8.2.11、如何停止RDB?
9、redis持久化之AOF(Append Only File)
9.1、AOF(Append Only File)
9.1.1、是什么
9.1.2、AOF持久化流程
9.1.3、AOF默认不开启
9.1.4、AOF和RDB同时开启,redis听谁的?
9.1.5、AOF启动/修复/恢复
9.1.6、AOF同步频率设置
appendfsync always:每次写入立即同步
appendfsync everysec:每秒同步
appendfsync no:不主动同步
9.1.7、rewrite压缩(AOF文件压缩)
rewrite压缩是什么?
重写原理,如何实现重写?
触发机制,何时重写?
bgrewriteaof:手动触发重写
auto-aof-rewrite-percentage:设置重写基准值
auto-aof-rewrite-min-size:设置重写基准值
举个例子
重写流程
no-appendfsync-on-rewrite:重写时,不会执行appendfsync操作 9.1.8、AOF优势
9.1.9、劣势
9.1.10、小总结
9.2、总结
9.2.1、用哪个好?
9.2.2、官网建议
10、redis主从复制
10.1、是什么?
10.2、能干嘛?
10.3、主从复制:怎么玩?
10.3.1、配置1主2从
10.3.2、配置主从
1)创建案例工作目录:master-slave
2)将redis.conf复制到master-slave目录
3)创建master的配置文件:redis-6379.conf
4)创建slave1的配置文件:redis-6380.conf
5)创建slave2的配置文件:redis-6381.conf
6)启动master
7)启动slave1
8)启动slave2
9)查看主机的信息
10)查看slave1的信息
11)同样查看slave2的信息
12)验证主从同步效果
10.3.3、主从复制原理
10.3.4、小结
主redis挂掉以后情况会如何?从机是上位还是原地待命?
从挂掉后又恢复了,会继续从主同步数据么?
info Replication:查看主从复制信息
10.2、常用的主从结构
10.2.1、一主二从
1)创建案例工作目录:master-slave

2)将redis.conf复制到master-slave目录 
3)创建master的配置文件:redis-6379.conf 
4)创建slave1的配置文件:redis-6380.conf 
5)创建slave2的配置文件:redis-6381.conf 
6)启动master 
7)启动slave1 
8)启动slave2 
9)分别登陆3台机器,查看各自主从信息 
10)配置slave1为master的从库 
11)配置slave2为master的从库 
12)再来看看master的主从信息 
10.2.2、薪火相传 
10.2.3、反客为主 

10.3、哨兵(Sentinel)模式
10.3.1、什么是哨兵模式?
10.3.2、原理
10.3.3、怎么玩?
1)需求:配置1主2从3个哨兵
2)创建案例工作目录:sentinel
3)将redis.conf复制到sentinel目录
4)创建master的配置文件:redis-6379.conf
5)创建slave1的配置文件:redis-6380.conf
6)创建slave2的配置文件:redis-6381.conf
7)启动master、slave1、slave2
8)配置slave1为master的从库
11)配置slave2为master的从库
12)验证主从复制是否正常
13)创建sentinel1的配置文件:sentinel-26379.conf
14)创建sentinel2的配置文件:sentinel-26380.conf
15)创建sentinel3的配置文件:sentinel-26381.conf
16)启动3个sentinel
17)分别查看3个sentinel的信息
18)验证故障自动转移是否成功
19)恢复旧的master自动俯首称臣
10.3.4、更多Sentinel介绍
10.3.5、SpringBoot整合Sentinel模式
1)引入redis的maven配置
2)application.properties中配置redis sentinel信息
3)使用RedisTemplate工具类操作redis
2)RedisTemplate示例代码
11、redis集群(Cluster)
11.1、存在的问题
11.2、什么是集群
11.3、集群如何配置?
1)需求:配置3主3从集群
2)创建案例工作目录:cluster
3)将redis.conf复制到cluster目录
4)创建master1的配置文件:redis-6379.conf
5)创建master2的配置文件:redis-6380.conf
6)创建master3的配置文件:redis-6381.conf
4)创建slave1的配置文件:redis-6389.conf
5)创建slave2的配置文件:redis-6390.conf
6)创建slave3的配置文件:redis-6391.conf
7)启动master、slave1、slave2
8)查看6个redis的启动情况
9)确保node-xxxx.conf文件已正常生成
10)将6个节点合成一个集群
11)连接集群节点,查看集群信息:cluster nodes

12)验证集群数据的读写操作
11.4、redis集群如何分配这6个节点?
11.5、什么是slots(槽)
11.6、在集群中录入值
11.7、slot相关的一些命令
11.8、故障恢复
11.0、SpringBoot整合redis集群
1)引入redis的maven配置
2)application.properties中配置redis cluster信息
3)使用RedisTemplate工具类操作redis
2)RedisTemplate示例代码
12、redis应用问题解决
12.1、缓存穿透
12.1.1、问题描述
12.1.2、解决方案
(1)对空值缓存
(2)设置可访问的名单(白名单)
(3)采用布隆过滤器
(4)进行实时监控
12.2、缓存击穿
12.2.1、问题描述
12.2.2、解决方案
(1)预先设置热门数据,适时调整过期时间
(2)使用锁
12.3、缓存雪崩
12.3.1、问题描述
12.3.2、解决方案
(1)构建多级缓存
(2)使用锁或队列
(3)监控缓存过期,提前更新
(4)将缓存失效时间分散开
12.4、分布式锁
12.4.1、问题描述
12.4.2、分布式锁主流的实现方案
12.4.3、解决方案:使用redis实现分布式锁
(1)上锁的过程
(2)为什么要设置过期时间?
(3)如果设置的有效期太短怎么办?
(4)解决锁误删的问题
(5)还是存在误删的可能(原子操作问题)
(6)终极方案:Lua脚本来释放锁
(7)分布式锁总结


文章作者: Suixin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Suixin !
  目录