简介
redis是一个非关系型数据库,他是通过key-value进行存储的,有五种常见操作类型,分别是:string,set,list,hash,zset,为了保证效率,数据都是缓存在内存中,所以读写快。 默认是单线程操作
2. 安装以及启动
默认安装在linux系统上
必要条件是必须要有c语言的编译环境
gcc --version #监测是否有c语言的编译环境,如果没有就直接安装
#编译环境
yum install centos-release-scl scl-utils-build
yum install -y devtoolset-8-toolchain
scl enable devtoolset-8 bash
当环境没有问题的时候就可以下载redis的安装包了,我是直接放进去的,测试版本用的6.2.1
链接:https://pan.baidu.com/s/1kBeqz0SR5ZZqJEQrgWqHYA
提取码:gata
我直接放入到了/usr/local中
之后直接解压
tar -zxvf redis-6.2.1.tar.gz #解压当前文件夹
解压出来的名称是redis-6.2.1,然后直接改名字
mv redis-6.2.1 redis
#进入到redis当中,进行编译
cd /usr/local/redis
make
#如果没有编译好c语言的环境就会报错,然后直接执行
make distclean # 如果没有报错不用执行这部操作
#make没有问题之后直接进行安装
make install #此命令会默认给你安装到/usr/local/bin的目录中去
#执行完毕之后我们先进行备份conf文件,先进入到/usr/local/redis中,然后进行备份
cd /usr/local/redis
cp redis.conf redis.conf.bk
#备份完成之后直接进入redis.conf进行一个小改动
vim redis.conf
#通过命令::set nu 打开行数,然后找到
![](https://i-blog.csdnimg.cn/blog_migrate/97b98e03a46428f367924d0acc411e65.png)
#然后将no改为yes,意思就是可以通过后台命令进行启动
#之后直接:wq退出即可
#直接执行命令进行启动
redis-server /usr/local/redis/redis.conf
#redis-server 是启动命令,后边的是指定路径的配置文件
redis-cli
#执行完毕后我们成功的进入到了我们的redis中,至此redis安装完毕并且启动成功
#查看redis
ps -ef | grep redis
#杀死进程
kill -9 你的进程号
3. 常见的五种操作类型String Lsit Set Hash Zset
具题的操作太多了,而且网上很多就不一一 列举了,
http://www.17bigdata.com/book/redis/REDISMingLing/REDISZiFuChuanSTRING.html
这个网址就基本够用了
#以下所讲完成一个就关闭redis,然后配置完成了再重新启动
#退出命令 shutdown
# exit
#或者直接杀进程
![](https://i-blog.csdnimg.cn/blog_migrate/1325068a78cf21857c69e08b3b35040b.png)
4. 发布订阅
SUBSCRIBE zhangsan #发布 关键字SUBSCRIBE,
publish zhangsan 1111 #订阅 关键字publish
#这时zhangsan这个发布者就能看到你发送的111
![](https://i-blog.csdnimg.cn/blog_migrate/a91ac5ca014e99ea79cc7b42aa21e34b.png)
#红色涂掉的就是发布者的名称
5. 持久化 RDB AOF
RDB
#redis自带持久化功能,RDB。比如说我自身的目录/usr/local/bin 中
![](https://i-blog.csdnimg.cn/blog_migrate/e470d49dbfff301897f155ba7a6ac678.png)
#这个文件就类似于数据库的备份文件,他的备份条件可以根据自己的需求进行改变
#首先进入redis.conf
vim /usr/local/redis/redis.conf
#然后我们找到dbfilename这个字段,可以通过/dbfilename进行查找
![](https://i-blog.csdnimg.cn/blog_migrate/91174bc24d598158f479ddd9aa39c7a0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bfd00ba84af894754c782acb5e7f22fd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6b26569064cf9dd2edc4613225099951.png)
#最后那个代表20秒内有3个key的值被修改,这个作为持久化的条件,也就是说满足了其中一个就会 执行,例如以20秒为周期,如果改动的超过三个了就执行,如果20秒内没有超过那就不进行备份
AOF
#aof是默认不开启的,需要我们自己主动开启,当AOF与rdb同时开启时,redis会默认执行aof!
![](https://i-blog.csdnimg.cn/blog_migrate/99e38abbfaf439e67a31455c7b53f8a6.png)
6. 主从复制
#读写分离:规则,一主多从,也就是一个爹多个孩;只有主可以进行写,从只能进行读。通俗点就是大人跟小孩:我是父亲,我可以有很多孩子,但是这些孩子只能有我一个爹,而且我负责赚钱,孩子没有赚钱的能力,只能从我这拿了去花。
#第一步先创建几个redis.conf文件这样我们可以做个伪主从,因为真正的必须至少也是两台服务器以上
#创建一个文件夹
mkdir /usr/local/myRedis
#第二步将创建不同的redis.conf
vim redis6379.conf
#直接添加配置信息即可
include /myredis/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
#然后直接:wq保存退出即可,同时复制出6380/6381 文件
cp redis6379.conf redis6380.conf
cp redis6379.conf redis6381.conf
#进入6380/6381中修改信息
vim redis6380.conf
:%s/6379/6380 #替换的意思,将所有的6379转换为6380;6381同理!
#直接启动是这三个
redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf
#进入三个不同的redis
redis-cli -p 6379 #-p代表进入那个端口的redis
info replication #输入命令可以查看主从信息,三个都是master,都是主,因为还没有配置从
#进入6380/6381配置从
slaveof 127.0.0.1 6379 #配置从,主是6379 的端口
#此时在输入info replication会发现6380显示的是slaveof 他的主就是6379
#6381一样的配置就行,需要注意的是当从挂掉之后再连接上来会变成主,需要手动变为从,
#如果主挂掉之后从还是从,不会变成主,因为还没有建立哨兵以及配置
#可以手动完成 使用命令
slaveof no one
#会使当前服务器变成主
7. 哨兵机制
#自动监听,如果主机完蛋了就从从机中选择有一个自动变成主机
#需要添加一个配置文件,名称为sentinel.conf
vim sentinel.conf
#里边的内容为
sentinel monitor mymaster 127.0.0.1 6379 1
#其中mymaster为监控对象起的服务器名称, 1 为至少有多少个哨兵同意迁移的数量
#启动sentinel
redis-sentinel sentinel.conf
#然后再次启动redis,设置主从,之后将主挂掉,等着一会就会发现sentinel中弹出消息提示,你的6379挂掉了,6380或者6381其中的一个变成了主机
#当你的6379再次上线,他会变成从机,不会变成主机
8. 集群
#集群相当于是整合了所有的服务器,你可以从6379进入到6399,也可以返回来,相当与是一个连起来的屋子,你进门在客厅,但是你的充钱器在你们物理,你可以直接从客厅进去,然后你想吃东西,可以从你的屋子进入到厨房,意思就是东西是分屋放的,但是房屋是打通的,需要什么你就去哪个屋里
#配置集群需要先关闭你的aof持久化,然后删除掉之前的aof以及rdb的记录文件,还要删除你的所有的redis63**.conf,因为接下来我们需要重新配置,也可以留下来一个6379,我们修改这个,然后再进行复制。
rm -rf redis638* #删除以redis638开头的所有文件,其他文件也是,到最后你的文件夹中只剩下了redis6379.conf
#打开你的redis6379.conf
vim redis6379.conf
#只保留之前的配置的
include /home/bigdata/redis.conf
port 6379
pidfile "/var/run/redis_6379.pid"
dbfilename "dump6379.rdb"
#其他的都删除,之后在添加
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
#然后:wq进行退出
#同理复制出80 81 89 90 91 五个端口,加上79正好六个
#要想启动集群模式需要进入到redis的src目录当中
cd /usr/local/redis/src
ls #查看里边都有什么
![](https://i-blog.csdnimg.cn/blog_migrate/72dfff1c67d257f5c2823b00fefc3f30.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e6c07e688ab4fa945ef22edd33ad159c.png)
#执行此命令
redis-cli --cluster create --cluster-replicas 1 192.168.52.129:6379
192.168.52.129:6380 192.168.52.129:6381
192.168.52.129:6389 192.168.52.129:6390 192.168.52.129:6391
#--replicas 1 采用最简单的方式配置集群,一台主机,一台从机,正好三组。
#进入到集群中
redis-cli -c -p 6379 #–c 参数实现自动重定向,-p是端口,其实那个端口都无所谓
#通过 cluster nodes 命令查看集群信息
#一个Redis 集群包含 16384 个插槽(hash slot数据库中的每个键都属于这16384 个插槽的其中一个
集群使用公式CRC16(key) % 16384 来计算键 key 属于哪个槽,其中CRC16(key) 语句用于计算键key 的CRC16 校验和。
集群中的每个节点负责处理一部分插槽。举个例子,如果一个集群可以有主节点,其中:
节点A 负责处理 0 号至5460 号插槽。
节点B 负责处理 5461 号至10922 号插槽。
节点C 负责处理 10923 号至16383 号插槽。
![](https://i-blog.csdnimg.cn/blog_migrate/f3acba629255a01dad65d3659e49c0ac.png)
#可以直接进行写的操作,但是不能批量写入
![](https://i-blog.csdnimg.cn/blog_migrate/3331066fd59212531bbe2039118c505e.png)
#可以通过这种方式进行批量的写
9. 整个springBoot
通过jedis进行的整合,直接参考jdeis引入依赖配置redis,添加conf即可使用!
10. redis常见的三种问题解决方式
缓存穿透:原因大量的无效url或者参数进行访问
问题解决:即使是空值也进行缓存,设置访问白名单,实时监控设置黑名单,布隆过滤器
缓存击穿:极短的时间内,大量数据访问同一个数据,或者url时会发生缓存击穿
解决方式:提前设置redis中的热门数据,或者添加锁,也可以进行限流
缓存雪崩:同一时间内大量的redis数据过期,而且这个时候大量的数据去访问这个过期数据
解决方式:添加锁、队列,或者使用多层缓存redis+nginx,设置过期标志进行更新、将缓存过期时间分散开