nosql

Memcache

Redis

MongoDB

redis简介

单线程+多路IO复用

应用场景:

缓存、session共享、持久化

image-20220124203929901

五大常用数据类型

String

List

Set

Hash

Zset

三大新数据类型

redis配置文件

网络连接:心跳检测、连接时长

通用:日志级别、库

存储策略

reids的发布和订阅

Bitmaps:统计

HyperLogLog:基数计算:不重复数据个数的计算

Geographic:地理

Jedis、RedisTemplate

事务、锁机制、秒杀

事务:

Multi、Exec、discard

悲观锁、乐观锁

监视key

特点:单独的隔离操作、没有隔离级别的概念、不保证原子性

秒杀:

乐观锁 + 连接池 + LUA脚本(原子化) 解决库存遗留问题

持久化RDB、AOF

RDB:临时文件 –> 覆盖

AOF:只记录写的操作,只能追加,redis读取这些操作重写构建数据

写操作追加到缓存区,根据策略进行持久化同步,根据重写策略进行重写压缩

主从复制

一主二仆

薪火相传:分组传递

宕机上位

连接时:全量复制

同步时:增量复制

image-20220124205643714

主从复制原理

哨兵模式:

Master down ,sentinel自动监控 —> 选举某从机作为主机

Master 再次上线后 变为从机

选举规则:

1、Priority最小

2、偏移量最全

3、Runid最小的(随机生成)

Redis集群

无中心化

集群节点的插槽计算:计算key所属的插槽,平均分摊压力

哈希槽分区

应用问题

缓存穿透

解决方案:

缓存空值(设置过期时间)、设置白名单(bitmaps)

布隆过滤器(底层bitmap)、实时监控redis(设置黑名单)

缓存击穿

解决方案:

预先设置热门key(增加时长)、实时调整(频繁访问key增加时长)

锁(先上锁,查完数据库放锁)

缓存雪崩

构建多层缓存(多级缓存处理)、锁和队列(不适合高并发)

设置过期标志(更新时长)、分散缓存失效时间(过期时间不同)

分布式锁

reids分布式锁:

setnx 同时设置过期时间

Redisson

总结:

Uuid + 过期时间 + 加锁

Lua释放锁(uuid比较)

Redis6新功能

Acl用户权限

Io多线程:网络数据读写和协议解析

工具支持cluster