本文目录:
- 一、10步xshell快速搭建服务器Redis环境
- -------------------------以下扩展-----------------
- 二、测试服务器Redis并发能力
- 三、了解Redis基本命令
- 四、项目Jedis连接远程Redis
- 五、 SpringBoot整合Redis
- 六、 从Redis配置文件了解持久化rdb、aof
- 七、Redis实现发布订阅(作MQ)
- 八、Redis缓存穿透、缓存击穿、缓存雪崩(实现高可用)
一、10步xshell快速搭建服务器Redis环境
- 去官网reids.io下载Redis的tar包:redis-6.2.6.tar.gz
- 在服务器打开6379安全组,在宝塔面板设置放行6379(也宝塔安装Redis,这里仅展示手动安装)
- 用Xftp上传,然后进入该jar目录,输入命令:tar -zxvf redis-6.2.6.tar.gz
- 成功进入
- 输入命令检查gcc环境是否存在(redis依赖gcc环境):gcc -v 。存在则显示Using built-in specs.
COLLECT_GCC=gcc
若不存在,输入命令安装:yum install gcc -c++ - 输入命令下载其它环境:make ,等待下载,下载完成。输入命令检查全部环境是否完善:make install 。发现重要的三个文件已经下载好
- 输入命令进入到redis默认安装完成后的路径:cd /usr/local/bin
- 将最重要的redisconfig拷贝来这个文件夹中,输入命令:mkdir myredisconfig (建新文件夹)、cp /opt/redis-6.2.6/redis.conf myredisconfig (将文件拷贝过来,可以用Tab补全文件名字)
- 输入命令:vim redis.conf ,按住i,下拉将文件中的 daemonize no改成daemonize yes ,然后按esc退出,再输入:wq ,回车便完成全部下载!启动Redis服务:
- 重新打开Xshell新窗口,输入命令查看进程:在原窗口输入命令退出redis进程:127.0.0.1:6379> shundown 、not connected> exit
扩展:关于Redis集群搭建,后续再补充
其它扩展:
二、测试服务器Redis并发能力
1、输入命令:[root@litao bin]# redis-benchmark -h localhost -p 6379 -c 100 -n 10000
2、结果分析
====== HSET ======
100000 requests completed in 2.16 seconds #100000个请求用时2.1秒
100 parallel clients #100个并发客户端
3 bytes payload #每次写入三个字节
keep alive: 1 #只有一台服务器来处理请求
三、了解Redis基本命令(可去www.redis.cn查看更多,且可用Tab自动补全以下命令)
- select 2 #切换到第2个数据库,默认是第0个,redis共有16个数据库
- dbsize #查看数据库已有key数量
- keys * #查看所有的key
- flushdb #清空本数据库所有的key(谨慎用!)
- flushall #清空全部数据库的key(谨慎用!)
- reboot #linux重开机,redis卡顿无法进入使用
- ------常用-----------
- set、get #设置和获取
- mset、msetnx #批量设置值和综合不存在则设置操作
- expire name 10 #设置key到期时间为10秒
- ttl name #time to live设置key到期时间为10秒
- exists name #查看name是否存在(exi t为离开,exi sts为存在)
- type name #查看name的类型
- setex name 30 litao #set with expire,设置过期时间30秒
- setnx name litao #set if no exist,不存在则设置(分布式锁刚刚使用)
- -------点赞、浏览量常用----“自增自减”-------
- incr goods #goods自增1步长
- decr goods #goods自减1步长
- incrby goods 5 #goods自增5步长
- decrby goods 5 #goods自减5步长
- -------截取、拼接、替换------
- getrange name 0 2 #截取name字符串的0-2的字符
- append name hello #将hello拼接到name字符串上
- setrange name 5 aa #将aa替换到name字符串的偏移量5位置上
- -------事务TX---------
- multi #开始开启事务
- exec #执行全部事务
- discard #取消、放弃事务
- watch #开启监视,比对变化,若别线程在本事务中改变value,则会导致本线程事务失败
- unwatch #取消监视(乐观锁:如果修改失败,获取最新值就好,使用watch实现)
四、项目Jedis连接远程Redis
- 远程连接需要关闭防火墙(开启端口也可),修改配置文件(如下)。进入:vim redis.cofig
- 用 / 来搜索关键字:/ bind 、/protected,用n、N来查看前后一个。按住 i 修改文件。
- 注释:#bind 127.0.0.1, 还有配置文件设置 :protected-mode no
- 再esc退出编辑,安全退出vim::wq
- 在项目中添加Jedis、fastjson依赖,连接即可:Jedis jedis=new Jedis(127.xx.xx.xx,6379);
五、 SpringBoot整合Redis
- 首先了解一下Redis在SpringBoot是怎么自动配置的。答:通过自动配置类与properties配置文件进行自动配置。即在配置文件输入相应的代码如spring.redis.host=127.0.0.1即可配置本地redis地址。那么我们要找到自动配置类。
- 源码:在IDEA右侧External Libraries查找自动配置类springboot.autocofigure,点击元空间文件Meta-INF,点击工厂spring-factoris,用Ctrl+f快速查找redis,便可找到RedisAutoConfiguration配置类,点击进入看到RedisTemplate。在注解可以看到RedisProperties.class,这就是配置类,可以看到Profiex,就是配置文件可以配置的内容!
- 有了这个配置内容,便可以在properties配置文件中输入自己需要配置的内容,如host、port、连接池pool(用lettuce类,因为原Jedis很多类不存在)等
- 这时便可以操作数据:redisTemplate.opsFor(Zet).常用命令操作。还可以操作redis数据库:RedisConnection connect=redisTemplate.getconnectFactory().getConnection();#设计模式:工厂模式中获取 connect.fiushDB();
- -------------常见问题---序列化------------
- (序列化:通俗来说给每个对象添加一个顺序号)
- 在Redis中可能会出现乱码的情况,这是因为没有序列化。这时候我们需要自己编写配置类覆盖原来的RedisAutoConfiguration配置类,编写自己的模板类MyRedisTemplate。
- 在自定义的配置类中设置序列化(本图来源网络),应用于所有场景
- -------------常见问题---Redis工具类------------
- (自己写MyRedisTemplate会麻烦,所以使用工具类更方便)
- 在实际开发中,更多地使用Redis工具类。工具类可以在网上很方便就找到,这里不再赘述。
六、从Redis配置文件了解持久化rdb快照、aof
-----------------------------------------rdb快照(更好,一般在从机上)-------------------------------
- 首先了解rdb生成dump.rdb文件的触发条件:配置文件save规则、执行flushall命令、退出redis
- 如何恢复数据:首先使用命令查看我们的dump.rdb要放到那里,在redis下执行命令:config get dir。返回/usr/local/bin。然后将rdb放入显示的目录下即可,下次redis启动时,会自动恢复rdb中的数据库。
- 优点:大规模数据恢复、对数据完整性要求不高。缺点:fork子进程需要一定的时间间隔,中途宕机会丢掉时间间隔的数据
---------------------------------------aof(几乎不使用)-----------------------------------------
- 首先了解aof工作原理:可以记录每一条命令的操作,生成在默认本路径下的appendonly.aof
- 在配置文件中开启aof: appendonly no(关闭aof) --> appendonly yes
appendfsync always : 每1次操作都持久化
appendfsync everysec
appendfsync no : 不进行持久化 - 重启redis,生效!
- 若appendonly.aof文件损坏,可以用命令来修复:redis-check-aof --fix appendonly.aof
- 缺点:aof文件大,运行效率慢,所以redis默认用rdb持久化
七、Redis实现发布订阅功能(作MQ)
1、概念:基于哈希链表的。
2、进入Redis
psubscribe订阅、unsbscribe退订、punsubscribe退订、publish发布、pubsub查看状态。
详细可查看:psubscribe 命令 -- Redis中国用户组(CRUG)
4、执行命令即可实现,不再阐述,可自行尝试!完成:实时消息系统、实时聊天系统、订阅、关注。如果遇到更复杂的场景,可使用消息中间件来做,如rocketMQ等。
八、Redis缓存穿透、缓存击穿、缓存雪崩(实现高可用)
-------------------------------------------------缓存穿透--------------------------------------------------------------------
缓存穿透概念:访问的key很多,量太大了,当缓存同时过期。
解决方案:
(1)缓存空对象:在redis增加key value=null的数据,避免查询不到key直接打到数据库
(2)布隆过滤器:
-------------------------------------------------缓存击穿--------------------------------------------------------------------
缓存击穿概念:一个key非常热点,并发集中访问同一个点,当这个key失效的瞬间,持续的大并发,就会导致缓存穿透,全部请求都落在数据库。
解决方案:(1)设置热点数据永不过期 (2)在mysql数据库加互斥锁
---------------------------------------------------缓存雪崩------------------------------------------------------------------
缓存雪崩概念:在某个时间段,缓存集中过期(不是主要原因)。或者redis宕机或者断网(最主要原因)
解决方案:
总结: