本文目录:

  • 一、10步xshell快速搭建服务器Redis环境
  • -------------------------以下扩展-----------------
  • 二、测试服务器Redis并发能力
  • 三、了解Redis基本命令
  • 四、项目Jedis连接远程Redis
  • 五、 SpringBoot整合Redis
  •  六、 从Redis配置文件了解持久化rdb、aof
  • 七、Redis实现发布订阅(作MQ)
  • 八、Redis缓存穿透、缓存击穿、缓存雪崩(实现高可用)

一、10步xshell快速搭建服务器Redis环境

  1. 去官网reids.io下载Redis的tar包:redis-6.2.6.tar.gz
  2. 在服务器打开6379安全组,在宝塔面板设置放行6379(也宝塔安装Redis,这里仅展示手动安装)
  3. 用Xftp上传,然后进入该jar目录,输入命令:tar -zxvf redis-6.2.6.tar.gz 
  4. 成功进入
  5. 输入命令检查gcc环境是否存在(redis依赖gcc环境):gcc -v  。存在则显示Using built-in specs.
    COLLECT_GCC=gcc
    若不存在,输入命令安装:yum install gcc -c++ 
  6. 输入命令下载其它环境:make   ,等待下载,下载完成。输入命令检查全部环境是否完善:make install 。发现重要的三个文件已经下载好
  7. 输入命令进入到redis默认安装完成后的路径:cd /usr/local/bin
  8. 将最重要的redisconfig拷贝来这个文件夹中,输入命令:mkdir myredisconfig (建新文件夹)、cp /opt/redis-6.2.6/redis.conf myredisconfig (将文件拷贝过来,可以用Tab补全文件名字)
  9. 输入命令:vim redis.conf  ,按住i,下拉将文件中的 daemonize no改成daemonize yes ,然后按esc退出,再输入:wq回车便完成全部下载!启动Redis服务:
  10. 重新打开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自动补全以下命令)

  1. select 2                #切换到第2个数据库,默认是第0个,redis共有16个数据库
  2. dbsize                  #查看数据库已有key数量
  3. keys *                   #查看所有的key
  4. flushdb                 #清空本数据库所有的key(谨慎用!)
  5. flushall                 #清空全部数据库的key(谨慎用!)
  6. reboot                  #linux重开机,redis卡顿无法进入使用
  7. ------常用-----------
  8. set、get               #设置和获取
  9. mset、msetnx      #批量设置值和综合不存在则设置操作
  10. expire name 10   #设置key到期时间为10秒
  11. ttl name               #time to live设置key到期时间为10秒
  12. exists name        #查看name是否存在(exi t为离开,exi sts为存在)
  13. type name          #查看name的类型
  14. setex  name  30  litao            #set with expire,设置过期时间30秒
  15. setnx  name litao           #set if no exist,不存在则设置(分布式锁刚刚使用)
  16. -------点赞、浏览量常用----“自增自减”-------
  17. incr goods            #goods自增1步长
  18. decr goods           #goods自减1步长
  19. incrby goods  5        #goods自增5步长
  20. decrby goods   5      #goods自减5步长
  21. -------截取、拼接、替换------
  22. getrange name 0 2   #截取name字符串的0-2的字符
  23. append name hello  #将hello拼接到name字符串上
  24. setrange name 5 aa  #将aa替换到name字符串的偏移量5位置上
  25. -------事务TX---------
  26. multi      #开始开启事务
  27. exec      #执行全部事务
  28. discard  #取消、放弃事务
  29. watch   #开启监视,比对变化,若别线程在本事务中改变value,则会导致本线程事务失败
  30. unwatch  #取消监视(乐观锁:如果修改失败,获取最新值就好,使用watch实现)

四、项目Jedis连接远程Redis

  1. 远程连接需要关闭防火墙(开启端口也可),修改配置文件(如下)。进入:vim redis.cofig
  2. 用 / 来搜索关键字:/ bind  、/protected,用n、N来查看前后一个。按住 i 修改文件。
  3. 注释:#bind 127.0.0.1, 还有配置文件设置 :protected-mode no
  4. esc退出编辑,安全退出vim::wq
  5. 在项目中添加Jedis、fastjson依赖,连接即可:Jedis jedis=new Jedis(127.xx.xx.xx,6379);

五、 SpringBoot整合Redis

  1. 首先了解一下Redis在SpringBoot是怎么自动配置的。答:通过自动配置类与properties配置文件进行自动配置。即在配置文件输入相应的代码如spring.redis.host=127.0.0.1即可配置本地redis地址。那么我们要找到自动配置类。
  2. 源码:在IDEA右侧External Libraries查找自动配置类springboot.autocofigure,点击元空间文件Meta-INF,点击工厂spring-factoris,用Ctrl+f快速查找redis,便可找到RedisAutoConfiguration配置类,点击进入看到RedisTemplate。在注解可以看到RedisProperties.class,这就是配置类,可以看到Profiex,就是配置文件可以配置的内容!
  3. 有了这个配置内容,便可以在properties配置文件中输入自己需要配置的内容,如host、port、连接池pool(用lettuce类,因为原Jedis很多类不存在)等
  4. 这时便可以操作数据:redisTemplate.opsFor(Zet).常用命令操作。还可以操作redis数据库:RedisConnection connect=redisTemplate.getconnectFactory().getConnection();#设计模式:工厂模式中获取       connect.fiushDB();
  5. -------------常见问题---序列化------------
  6. (序列化:通俗来说给每个对象添加一个顺序号
  7. 在Redis中可能会出现乱码的情况,这是因为没有序列化。这时候我们需要自己编写配置类覆盖原来的RedisAutoConfiguration配置类,编写自己的模板类MyRedisTemplate。
  8. 在自定义的配置类中设置序列化(本图来源网络),应用于所有场景
  9. -------------常见问题---Redis工具类------------
  10. (自己写MyRedisTemplate会麻烦,所以使用工具类更方便)
  11. 在实际开发中,更多地使用Redis工具类。工具类可以在网上很方便就找到,这里不再赘述。

六、从Redis配置文件了解持久化rdb快照、aof

-----------------------------------------rdb快照(更好,一般在从机上)-------------------------------

  1. 首先了解rdb生成dump.rdb文件的触发条件:配置文件save规则、执行flushall命令、退出redis
  2. 如何恢复数据:首先使用命令查看我们的dump.rdb要放到那里,在redis下执行命令:config get dir。返回/usr/local/bin。然后将rdb放入显示的目录下即可,下次redis启动时,会自动恢复rdb中的数据库。
  3. 优点:大规模数据恢复、对数据完整性要求不高。缺点:fork子进程需要一定的时间间隔,中途宕机会丢掉时间间隔的数据

---------------------------------------aof(几乎不使用)-----------------------------------------

  1. 首先了解aof工作原理:可以记录每一条命令的操作,生成在默认本路径下的appendonly.aof
  2. 在配置文件中开启aof:

    appendonly no(关闭aof) --> appendonly yes (开启aof)

    appendfsync always : 每1次操作都持久化

    appendfsync everysec : 每隔1秒进行1次持久化

    appendfsync no : 不进行持久化

  3. 重启redis,生效!
  4. 若appendonly.aof文件损坏,可以用命令来修复:redis-check-aof --fix appendonly.aof
  5. 缺点:aof文件大,运行效率慢,所以redis默认用rdb持久化

七、Redis实现发布订阅功能(作MQ)

1、概念:基于哈希链表的。

2、进入Redis

 3、Redis的发布订阅常用命令:subscribe订阅、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宕机或者断网(最主要原因)

解决方案:

总结:

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐