Redis6重点总结

要先在linux中装一个C语言的编译环境

redis默认安装路径: usr/local/bin

然后把里面的配置文件复制一份出来(下面是复制到etc文件夹下) 做如下修改(设置成可以后台启动)

redis启动:

redis-server+配置文件路径

通过客户端 连接redis(usr/local/bin/redis-cli

关闭redis:

第一种:直接 shutdown

第二种:先exit退出 再找到redis的进程号 杀死进程。

 

九宫格 打 merz

 

Redis常用五大数据类型:

首先先来说说 redis中的key的操作。

 

 

 

 

 Redis新数据类型

如果活跃用户量很大 用Bitmaps可以 如果用户量很小 那用它并不合适。

jedis连接redis:

如果连接time out 超时, 一、检查配置文件那两处地方是否做了修改 二、检查linux防火墙是否关闭。

 关闭linux防火墙:

 在maven中导入jedis的依赖后,

 

 可以通过jedis对象调用方法来操作redis数据库。

 模拟手机验证码发送功能

1.一个手机号一天只能发三次

2.验证码有效时间两分钟

 

 

 

 

multi:开启事务 然后放数据 开始组队 exec:执行 当执行完之后 表示事务就结束了。

discard:表示放弃组队

失败的情况:

若组队过程中,某个命令出错了 若再执行 则都不会执行

若组队的时候没有失败 在执行的时候 有一个命令失败了 则只是这个命令不会执行 其余的命令正常执行。

 

第一种情况示例:

 

 第二种情况示例:

 事务冲突的解决机制:

 

 

 

 

 

 

 

RDB:

 

 

写时复制技术:同步之前,要先把数据放到一个临时数据文件中去,以防万一宕机,造成数据丢失。(也就是用临时数据文件 代替这个rdb文件。)建完之后 往里面放数据 数据放完之后 再替换这个内容。这个过程 就叫写时复制技术。 RDB底层就是这么做的。

 

 

在redis.conf配置文件中设置 

 RDB可能在最后一次造成数据丢失: 因为在你指定的一段时间内,要求有几个key更新了 它就做持久化。假如在最后一次 你的key更新的个数没有到你指定的那个个数 或者指定的这一段时间没有到 这时机器宕机了 而此时还没有进行持久化吧 所以就会造成这些数据的丢失。

 AOF:

 

 

 

 

重写机制跟RDB底层实现原理差不多。

 

 

 

 

 

 

搭建最基本的一主两从:

新建目录 myredis 将 usr/bin/redis.conf拷贝到myredis中,然后在该文件夹中 分别建三个配置文件。

 

include:引用redis.conf中的内容。

照此,创建另外两个6380 6387配置文件 然后分别启动三个redis

例如: redis-server redis6379.conf

 然后开启三个端口,后台连接。 redis -cli -p 6379

 

主从复制原理:

 

 主从复制:常用三招(三种方式):

一主二仆:1.当从服务器挂掉了之后 再启动之后 从服务器并不能加到主机中来 需要从新给他加入才可以。2.而你在加入的时候 它会把主机中的数据从头开始复制。

当一个从机重启之后 它就自动变成主机了

当从机重新连上主机之后 从机是从头开始复制主机的数据。全复制完。

当主服务器挂掉之后 从服务器还是服务器 并不会上位,而主服务器重启之后,还是主服务器。

薪火相传:主从复制原理和一主二仆一样。

 

 反客为主:当主服务器挂掉了 一台从服务器可以晋升为主服务器。

 缺点:手动完成。

 

 

 哨兵启动!:

告诉我们 如果主机挂掉了 会在下面的从机里面选一个作为主机

如果旧主机再次启动 则只能作为新主机的从机。

 

 

 选举从机作为主机的规则:

新版本叫这个不叫slave-priority

 如果在java中 怎么识别主 从?

 

new的时候 就指定这个名字

 26379:就是这个 哨兵启动后 哨兵的这个端口号。

 

 

 

做好一份后,复制五个 做出六个配置文件 然后启动redis  连接客户端。

把六个redis合成一个集群。

生成集群环境,先进入src目录(必须在src目录下操作才行):

创建集群:

 过程:

 问你是否接受这种分配方式

这里 16384 是 16384个插槽 在后面会有解释。

集群方式连接:加上一个-c  端口号的话 用任何一个主服务器端口都是可以的。

 分配基本原则(当然我们这里是模拟的 所以都用的一个IP):

 

针对于上面的 16384 的解释:

插槽就是为了把我们的数据 平均的分担到集群中的每个主机中区去。

 举个例子:

这里我们添加了一个k1,k1根据计算 得到插槽的位置是12706。12706插槽在6381这个主机中 所以redis自动给我们切换到6381这个主机中去。

加多个值是不行的。
如果要加多个值 就是用分组的形式:


user就是组的名字 然后它在计算插槽的话 就是根据user这个组的名字去计算。 然后做添加

我们这里12706插槽中是有key的,但这里的12706不在6380这个主机下 所以返回没有



故障恢复:(就是如果集群中一个主机挂掉了 此时这个主机的从机会变为主机 而主机再次启动后 会变成从机。)

在java中 通过jedis操作redis集群:


注意:这里的端口号填集群中的哪一个主机都行 毕竟他会自动切换。

 也可以写个set集合 里面放多个ip 和端口号 但因为我们集群是无中心化的 所以也无所谓。

 

redis的应用问题:

缓存穿透:


出现这个问题的原因(上述三点也算是原因 也是一个过程。):


缓存击穿:



雪崩问题:

数据库压力变大了 所以我们的应用程序它的响应时间就会变慢 应用访问就会变慢 所以造成redis里面会有大量的访问等待 最后造成数据库崩溃了 应用崩溃了 redis也崩溃了。

 

 

分布式锁:

 可以利用setnx xxx  值 上锁     del xxx释放锁

还可以设置锁的过期时间 等锁过期了 再设置就可以了


在代码中 设置锁的过期时间:


解决方案:(加个UUID进行判断)

 

用LUA脚本解决。
Redis6新功能:

 

使用acl cat命令:
查看添加权限指令类别

加参数类型名可以查看类型下具体命令 

使用acl whoami命令查看当前用户 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值