redis缓存

缓存的用法:2种
方法1:查询时,先查询缓存,没有了查询数据库,查询到以后,放入缓存。在增删改时,删除缓存;
方法2:查询时,只查询缓存。在增删改时,直接更新缓存;
作用:数据库和应用程序之间的中间层使用,缓解数据库压力,存放不经常改变,但经常查询的数据

几种缓存对比

在这里插入图片描述
1、页面缓存-浏览器
2、ehcache(hibernate、mybatis)单机版缓存-内存
3、分布式缓存:memcached、redis
4、spring提供1中缓存框架,可以集成各种缓存,使我们更方便的应用缓存;
一般都是通过注解的方式:
@ablecache;先去缓存查找,找不到了去数据库,查到后放入缓存;key默认以方法名和参数列表;
@cacheEvent;加在修改和删除,修改和删除后会删除缓存

Spring-data-redis缓存

  1. Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问 redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate 提供了redis各种操作。
  2. 是一个是一种内存型、非关系型数据库,不过与传统数据库不同的是 它的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。
  3. redis支持持久化,一种持久化方式叫快照(snapshotting,RDB),另一种方式是只追加文件(append-only file,AOF)
  4. 经常用来做分布式锁。
  5. 提供了多种数据类型来支持不同的业务场景。
  6. 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

redis是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库.
redis优势:
1.性能极高,读取速度是110000次/s,写的速度是81000次/s
2.丰富的数据类型,字符串类型String,列表类型List,集合Set,有序集合Sorted Set,哈希 Hash
3.原子性(一个操作的不可再分,要么执行,要么不执行),redis的所有操作都是原子性的,同时redis还支持几个操作全并后的原子性执行
4.丰富的特性,支持publish/subscribe(发布/订阅),通知,key过期时间等等特性

安装:

使用:
①. 先要引入依赖


<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐data‐redis</artifactId</dependency> 

②. 修改application.yml配置文件

spring:
  redis: 
    host: 127.0.0.1 

持久化:两种模式(RDB和AOF)

RBD:默认是开启的
在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复.
优点:使用单独子进程来持久化,主进程不会进行任何IO操作,保证了redis的高性能
缺点:RDB是间隔一段时间进行持久化,如果持久化之间redis故障,会数据丢失.这种方式更适合数据不严谨的时候
在这里插入图片描述

AOF:默认是关闭的,可以修改配置文件redis.config:appendonly yes开启
优点:可以保持更高的数据完整性,如果设定追加file的时间是1s,那么丢失的数据最多就是1s内的数据
缺点:日志文件大,恢复速度慢
AOF提供了3种记录同步选项:
1.always:每一条AOF纪录都立即同步到文件,最安全的方式,也会增加磁盘操作和阻塞延迟,IO开支较大
2.everysec:每秒同步一次,性能和安全都比较中庸的方法,官方推荐的.如果服务器故障,可能回导致最后一秒内AOF记录丢失
3.no:redis并不直接调用文件同步,交给操作系统,操作系统可以根据 buffer 填充情况/通道空闲时间等机制触发同步.性能较好,服务器故障,数据丢失量会因OS配置有关.
一般使用everysec,如果每个数据都及其可靠,建议使用 关系型数据库.
AOF文件会不断增大,它的大小直接影响"故障恢复:时间,而且AOF文件中历史操作是不可以丢弃的.AOF rewrite操作就是"压缩"AOF文件的过程,它能够正确反应当前内存数据的状态,rewriter过程中,对于新的变更操作仍会写入到原AOF文件中.

	触发reriter的时机可以通过文件来声明,同时redis中可以通过bgrewriteaof指令人工干预
	命令格式:

redis-cli -h ip -p port bgrewriteaof
redis-cli -h localhost -p 6380 info
因为rewrite操作/aof记录同步 /snapshot都消耗磁盘IO,redis采取了"schedule"策略:无论是:人工干预"还是系统触发,snapshot和rewrite需要逐个执行.
AOF rewriter过程并不阻塞客户端请求,系统会开启一个子线程来完成.

AOF与RDB两者区别:
1. Rdb---->备份数据
Aof----->备份指令
2.AOF更加安全,数据同步更加及时
RBD安全性相对较差
3.AOF文件大,文件内容恢复相对较慢.
RDB文件尺寸小,恢复速度快

redis的主从复制:
redis的复制功能是支持多个数据库之间的数据同步.
一类是主数据库(master),一类是从数据库(slave).主数据库可以进行读写操作,当发生写操作时,自动将数据同步到从服务器;而从服务器一般时只读的,并接收主数据库同步过来的数据;一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库.
通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力,主数据库主要进行写操作,而从数据库扶着负责读操作.

数据持久化时,可以通过配置文件来指定使用RDB和AOF中的一种,或者同时使用他们(不建议同时使用),或者全部禁用.
在架构良好的环境中,主数据库master一般使用AOF,从数据库slave使用snapshot,主要原因是master需要首先确保数据完整性,他作为数据备份的第一选择;slave提供只读服务,它的主要目的就是快速响应客户端read请求;
如果redis运行在网络稳定性差/物理环境糟糕情况下,建议mater和slave均采用AOF,这个在master和slave角色切换时,可以减少"人工数据备份/人工引导数据恢复"的时间成本;
如果环境一切非常良好,,且服务需要接收密集性的writer操作,master采取snapshot,slave采用AOF.

主从复制过程:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190727210646422.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzExNDQ4NQ==,size_16,color_FFFFFF,t_70)

1.当一个从数据库启动时,会向主服务器发送sync命令
2.主数据库接收到sync命令后,会开始在后台保存快照(执行RDB操作),并将保存期间接收到的命令缓存起来
3.当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库
4.从数据库收到后,会载入快照文件并执行收到的缓存的命令

配置:

修改 redis.conf
修改从 redis 中的 redis.conf 文件
slaveof 192.168.33.130 6379
masterauth 123456--- 主 redis 服务器配置了密码,则需要配置

事物:
redis事物可以一次执行多个命令,并且保证原子性和隔离性;
隔离性:事物中的所有命令都会序列化,按顺序执行.事物在执行的过程中,不会被其他客户端发送来的命令打断.
原子性:事务中的命令要么全部执行,要么全部都不执行.
一个事物一般会经历三个阶段:
开始事物;以 MULTI 开始一个事物.
命令入队; 多个命令加入事物.
执行事物;由 EXEC 命令触发事物,一并执行事物中的所有命令.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值