redis知识回顾

Redis

1、redis是什么

Redis(远程字典服务)是一个键值类型的内存数据库,支持多种数据结构、因为redis时单线程,所以线程安全,数据都是缓存在内存中

内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间

2、redis为什么单线程还那么快

redis是将所有的数据放在内存中,所以说单线程操作效率是最高的,多线程(cup上下文会切换,耗时的操作),对于内存系统来说没有上下文切换效率是块的。

3、五大数据类型及使用场景

String 计数器 粉丝数 统计多单位的数量
List 消息队列 消息排队
Set 共同好友 共同关注 通过集合的并集差集合集
Hash 用户的信息 或者一个网站的信息 适用于对象的存储
Zset 排行榜 成绩表 工资表

4、三种特殊类型

Geospatial 附近的人功能
Hyperloglog 网页的访问量
BigMaps(位存储)员工打卡

5、事务

Redis的单条命令是保证原子性的,但是redis事务不能保证原子性。
Redis事务的本质,一组命令的集合。事务中每条命令执行都会被序列化,执行过程按顺序执行,不允许其他命令的干扰。

一次性
顺序性
排他性

redis事务没有隔离级别的概念。
multi 开启事务
exec 执行事务

事务错误
代码语法错误(编译时异常)所有的命令不执行
代码逻辑错误(运行时异常) 其他命令可以正常运行,所以不保证事务的原子性

监控

悲观锁:很悲观,认为什么时候都会出现问题,无论做什么都会加锁。
乐观锁:认为什么时候都不会出现问题,所以不会上锁!更新数据的时候去不判断一下,在此期间是否有人修改过数据。
获取version
更新时比较version
redis 执行时可以通过watch来监视key

内存达到限制值的处理策略

volatile-lru 对设置了过期时间的key进行lru
allkeys-lru 删除lru算法的key
volatile-random 随机删除即将过期的key
allkey-random 随机删除
volatile-ttl 删除即将过期的
noeviction 永不过期 返回错误

持久化RDB

在指定的时间间隔,将内存的数据集快照写入数据库,在恢复的时候,直接读取快照文件,进行数据的回复,默认放在dump.rdb二进制文件中

save 900 1 如果900秒内至少一个key进行修改,进行持久化
save 300 10
save 60 10000
redis知识回顾_第1张图片

工作原理

在进行RDB时,redis主线程不会做io操作的,主线程会fork一个子线程来完成操作。
1、redis调用forks,同时拥有父进程和子进程
2、子进程将数据集写到一个临时的RDB文件冲
3、当子进程完成对RDB文件的写入时,redis用新的rdb文件代替原来的rdb文件,并删除旧的rdb文件

触发机制
save满足的情况下
执行flushall
退出redis

优点

1适合大规模数据的回复,对数据的完整性要求不高

缺点

需要一定的时间间隔,如果redis发生宕机,最后一次修改的数据就没有了
fork进程时,会占用一定的内容空间

持久化AOF

快照功能并不是非常耐久,如果redis发生宕机,最后一次修改的数据就没有了

优点

每次修改都会同步,文件完整性号
每秒同步一次 可能会丢失一秒的数据

缺点

aof文件大于rdb,修复速度满 运行效率慢。
redis知识回顾_第2张图片

发布与订阅

subscribe 订阅频道
publish 发布消息到频道

主从复制

是指将一台redis服务器的数据,复制到其他redis服务器,前者称为主节点master 后者成为从节点slave (主节点以写为主,从节点以读为主)
作用
数据冗余
故障恢复
负载均衡
高可用

为什么使用集群
单台服务器难以负载大量请求
单台服务器故障率高
单台服务器内存有限

你可能感兴趣的:(笔记,redis,java)