Redis入门详细篇

Redis快速入门

1,首先来讲述一下Nosql
首先这是Nosql的全称:SQL(Not Only SQL)不仅是sql,很多人理解为no sql不是sql。Nosql是针对于一些大数据,在存储在mysql的时候一个数据表你可能要建立很多的字段,一旦数据很多的时候,就是以及那很痛苦的事情的,这时候Nosql就是一个解决方法,Nosql是非关系型数据库,我们可以不用关心里面的数据结构和关系,比如你可以不关心字段之间的关系和建什么字段等等这些,比如在Redis就是一个基于key-value存储型,MongoDB是一个文档型数据库,当然还有其他的列存储、图型数据库、xml数据库等

2,五大数据类型,和三大特殊数据烈类型(总得来说一些基本命令忘记了可以查官方文档)
1,String(字符串):字符串类型是Redis最基本的数据类型,他可以存储Json,XML和二进制的图片数据,他的最大值不可超过512M,缓存的使用场景就是使用String类型,通过一个key去存储value的Json数据,通过key查出Json数据,命令是set,和get,(getset有就查询出来没有就创建,后面用于分布式的乐观锁)
在这里插入图片描述

2,List(列表)(可以当作一个队列用):就是相当于在一个list集合里面存放数据,查询的时候是通过查询这个list的索引而不是通过key,value去查询例如如下
在这里插入图片描述
各个命令:lpush是指的从头部插入,第二种rpush是从尾部插入,lpop是删除头部的第一个指,从头开始,rpop是删除尾部的值,llen查询list的长度,lrem通过索引移除数据,ltirm截取指定的长度(不是字符串的长度),rpoplpush移除最后一个元素到新的列表中,linsert可以往指定的value前后插值,

3,Set(集合):也是存储的是一个list相当于,但是set存储的是无序不可重复的数据,基本命令有sadd表示向集合里面存储一个值,smembers 集合表示查询出来集合的所有值,sismember查询指定的值,scard获取长度,srem移除集合的数据,sandmember可以随机查询出以一个值,spop随机移除元素,smove移除指定的元素,sdiff差集,sunion并集,sintref交集

4,Hash(哈希):是一个key-map集合,map里面又存有key-value就是相当于是key-(key-value)的一个集合,,常用命令:hset存储一个或者多个key-value,hsetall查询集合里面的所有key-value,hget是去一个key对应的value,hdel删除一个key对应的value,hexist判断是否存在,hkeys查询所有的key,hvalue查询所有的value,hincrby在某个key对应的value上加上数值,hdecrby减去,hsetnx判断是否存在,存在就查询出来,没有就创建跟setget一样可以用去分布式锁的乐观锁

5,Zset(有序集合):就是在set的基础之上多了有序和可以重复的数据。常用命令:zadd存储一个或者多个值,zrange遍历跟上面一杨,zrangebysorce给集合排序,-inf +inf从小到大(反之就大到小),zrange查询所有,zrem移除数据,zcard查询个数

6,三大特殊数据类型之geospatial:该特殊数据类型是获取地理位置,存储地理位置的经纬度可以计算出两者间的距离,里面参杂着什么地理位置,但是这些都是要求在你的集合里面有的,不然是差不多出来的,应用场景有:朋友的定位,附近的人,打车的距离等等常用命令:geoadd向一个集合里面存储地理位置(要存入经纬度)有效的经度值在-180–180,有效的纬度值在-85–85,geopos获取地理位置的经纬度,geodist计算两者的距离,georaduis根据半径查找附近的人,georadiusbymember找出周围的人,

7,三大特殊数据类型之Hyperloglog:基数统计算法,指的是算出一个不重复的元素,就是相当于set里面的交集,应用场景:网页的UV(一个人访问多次但是还是算作一个人访问)常用命令:PFadd象一个集合里面存入数据,pfcount算出数量,pfmerge相当于算出两只的交集要有一个新的key去存储重复的值,

8,三大特殊数据类型之BitMaps:位存储,一般用于只有两个状态的都是操作二进制位来记录,就是只有0和1,配合例子来理解
在这里插入图片描述

3,redis的事务
Redis的事务不同于mysql的事务,第一Redis事务是没有隔离性的,所有就没有什么隔离级别之类的,第二Redis没有事务的原子性,但是每一条命令是保证了原子性的,所以综合来说Redis的事务的特性包括:一次性(一次执行完全部命令有错又不会回滚,只是答案个命令有错),顺序性(安装命令的顺序去执行),排他性(外部不可以干扰),,,常用命令:multi开启命令,exec执行事务,discard放弃事务,wacth监控对象,可以当作redis的乐观锁(监控对象key一旦监控了,在执行事务的时候,对象被异步修改了数据,则事务就会执行失败)
在这里插入图片描述

4,springboot于redis的整合
注意一下的是springboot2.x版本之后用的不是jedis用的是lettuce只是换了个类用法一样
spring集成redis也就是导jar包,配置连接,然后通过注解去获取缓存的步骤可以参考下面这一篇文章(用java代码写其实就是里面封装的方法跟命令敲的一样方法)
https://blog.csdn.net/qq_36792120/article/details/114005540

5,Redis的配置文件Redis.conf讲解
redis的配置文件里面有很多配置redis的地方,例如集群,主从复制,持久化,端口,等等之类的
在这里插入图片描述
默认数据库的数量
在这里插入图片描述
这是设置rdb持久化的快照速率,就是每900秒要是有一次更改就会进行一次快照,也就是持久化
在这里插入图片描述
进行redis的密码设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6,Redis的持久化
Redis的持久化分为两种:
1,rdb持久化:首先我们不用去特意去配置这样的rdb持久化,因为redis默认的持久化机制就是使用rdb去做持久化,rdb保存的文件名称是dump.rdb,反正rdb都是默认的配置,redis已经帮我们做好了
三种触发rdb规则:1save,2flush命令,3推出redis
2,aof持久化:aof持久化意思就是每次操作数据库的时候都要记录下来,这样就会很耗性能和内存,所以这个配置默认是关闭的,当要开启的时候就要在conf文件上开启aof的配置即可,开启了保存的文件是appendonly.aof

7,Redis的发布订阅
redis也可以做发布与订阅:只要发布者一发布消息,订阅者就可以即刻受到消息
pulish name “maseege”
在这里插入图片描述

subscribe name
在这里插入图片描述

8,redis的主从复制
主从复制的主要作用是:达到高可用,为了避免单点Redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的(一个master可以拥有多个slave,一个slave只对应一个master)
职责:
master:写数据,执行写操作时,将出现变化的数据自动同步到slave读数据(可忽略)
slave:读数据,写数据(禁止)

主从复制的作用:
读写分离:主节点写,从节点读,提高服务器的读写负载能力

数据冗余︰主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

故障恢复︰当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复 ; 实际上是一种服务的冗余。

负载均衡︰在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载 ; 尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

高可用(集群)基石︰除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

**配置主从复制:**只要配从机就行了,主机不用配(默认),主机断了,从机可以读但是没有写的工作,要是向从机顶上主机的话就要配置哨兵模式,真实的主从配置是通过conf文件去修改才是永久生效,linux命令只是暂时生效
1,可以通过info replication命令查看当前库的信息
在这里插入图片描述
2,通过修改从机的配置文件去认master(以下是通过linux开启一主多从的例子)通过命令slaveof +主机名+端口
在这里插入图片描述
如果主机断开,想让从机当成主机,就要手动开启从机当主机的命令:slaveof no one,其他的就要重新配置当成从机主机是升级得哪个

在这里插入图片描述
9.哨兵模式(自动选主机)
就是在主从复制的情况下,解决当主机宕机的时候,从机不能写入的问题就是将从机升级为主机,而哨兵模式是通过哨兵之间选举出当主机的哪个从机,以下是哨兵模式得监控情况(哨兵之间也要监控)
在这里插入图片描述
**哨兵模式的原理:**就是当主机宕机了,哨兵1会检测到主机宕机了,这时候主机不会立马下线,然后等到后面监控的哨兵也检测到了主机确实下线了,达到一定数量的时候就断定主机确实下线了,然后哨兵之间就会通过选举的方式,选出一个从机当作主机,这时候就会进行failover(故障转移),从机升级为主机,各自的哨兵又开始监控各自的服务
配置哨兵模式:
通过配置sentienl.conf文件
语法:sentienl monitor 被监控的名称 host port 1
然后启动该配置文件,要是多哨兵就要进行哨兵的集群

Redis缓存穿透,缓存击穿,缓存雪崩

==缓存穿透(查不到):==就是当查询一个数据key的时候在缓存里面没有找到,就没缓存没命中,于是想数据库里面查询也没有查询到,然后就会有大量的请求到数据库,这样就会造成数据库的压力过大造成宕机现象,

解决方法:
1,使用布隆过滤器
2,就是对请求的对象(请求不到的对象)设置一个返回值为空的key存储缓存,当下次再查找这个key的时候就会返回空就不会造成数据库压力

==缓存击穿(查太多在一瞬间):==就是当一个高并发的请求访问时,在访问缓存的时候,突然缓存的key在那一瞬间失效了,那些高并发的请求就会顺便去访问数据库服务器造成数据库压力过大

解决方法:

  1. 通过synchronized+双重检查机制:某个key只让一个线程查询,阻塞其它线程
  2. 设置value永不过期
  3. 使用互斥锁(setnx没有就创建)

==缓存雪崩:==雪崩指的是多个查询的 key同时失效并且出现高并发,或者redis本身就崩溃了,然后都去db查询,从而导致db压力突然飙升,从而崩溃。

解决方法:
1,就是尽可能的去让一个线程去查询,其他线程阻塞,(跟击穿的方法一样)
2,可以通过缓存reload机制,预先去更新缓存,再即将发生大并发访问前手动触发加载缓存
3,不同的key,设置不同的过期时间,具体值可以根据业务决定,让缓存失效的时间点尽量均匀
4,做二级缓存,或者双缓存策略。A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。(这种方式复杂点)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值