Redis缓存穿透和雪崩

2023-03-26 | Redis

缓存穿透

缓存穿透的概念:用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透

阅读全文

Redis主从复制与哨兵模式

2023-03-25 | Redis

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点 (master/leader),后者称为从节点(slave/follower)

数据的复制是单向的,只能由主节点到从节点。 Master以写为主,Slave 以读为主

主从复制,读写分离,实际大多数情况都是读取,这样可以缓解服务器压力

主要作用

  • 数据冗余: 主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
  • 故障恢复: 当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余
  • 负载均衡: 在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务 (即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量
  • 高可用(集群)基石: 除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础

阅读全文

Redis订阅发布

2023-03-25 | Redis

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 Redis 客户端可以订阅任意数量的频道。

订阅/发布消息图:

  • 消息发送者
  • 频道
  • 消息订阅者

jBISq.png

阅读全文

Redis持久化

2023-03-24 | Redis

Redis是内存数据库,如果不将内存中的数据进行持久化,一旦服务器进程关闭,其数据库状态也会被刷新,则会丢失相关的数据,所以需要进行持久化对数据做保存

阅读全文

Redis配置详解

2023-03-24 | Redis

获取配置文件

docker配置文件需要下载至对应位置

1
2
3
cd /opt/redis //进入目录 
wget http://download.redis.io/redis-stable/redis.conf //下载redis配置文件
vim redis.conf //修改配置文件

阅读全文

Redis基本使用

2023-03-23 | Redis

一、事务

事务的四个特性(ACID)

  • 原子性(Atomicity): 指事务是一个不可分割的最小工作单位,事务中的操作只有都发生和都不发生两种情况(要么同时成功,要么同时失败)
  • 一致性(Consistency): 事务必须使数据库从一个一致状态变换到另外一个一致状态
  • 隔离性(Isolation): 一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰
  • 持久性(Durability): 一个事务一旦提交成功,它对数据库中数据的改变将是永久性的,接下来的其他操作或故障不应对其有任何影响

Redis事务本质是一组命令的集合,顺序执行

一次性、顺序性、排他性,执行一系列的命令

Redis单条命令是保证原子性,但是其事务不保证原子性,没有隔离级别的概念

阅读全文

Redis数据类型与命令

2023-03-19 | Redis

Redis共有5种基本数据类型与三种特殊类型

Redis是单线程基于内存操作,cpu不是瓶颈,瓶颈是内存与网络带宽;

阅读全文

Nosql简述

2023-03-18 | Redis

在单机Mysql时可能出现:

  • 数据量太大
  • 数据的索引太大
  • 访问量,读写混合量太大

进而出现Memcached(缓存)+ Mysql + 垂直拆分(读写分离)

通过多台数据库服务器分配读写的任务分摊压力,使用缓存来保存以提高效率


分库分表 + 水平拆分 + Mysql集群

早年MyISAM:表锁,高并发下会出现锁问题

现今Innodb:行锁

所以通过分库分表来减少写的压力,将读写统一为一个集群,通过多集群分摊压力提高效率


NoSql的出现

用户的各类信息爆发式增长,数据量过多,Mysql等关系型数据库不够用,为了解决这类情况需要用到NoSql数据库

阅读全文

MP插件的基本使用

2023-03-17 | MybatisPlus

Mybatis插件机制

  • 拦截执行器的方法 Executor
  • 拦截参数的处理 ParameterHandler
  • 拦截结果集的处理 ResultSetHandler
  • 拦截sql语法构建的处理 StatementHandler

    阅读全文

MP实现ActiveRecord

2023-03-16 | MybatisPlus

实体类中继承 Model<T>即可使用

1
public class User extends Model<User> {}

在实现中不需要显性引入Mapper,但是Mapper中仍要继承BaseMapper

1
2
3
4
5
6
public void testSelectById(){  
User user = new User();
user.setId(16L);

User user = user.selectById();
}

阅读全文