Redis知识点
1、Redis官方只有linux版本,没有windows版本的;
Reids是单线程,采用Nio多路IO复用机制,一个线程维护多个没客户端IO操作;这样能够非常友好的支持并发,从而保证线程安全;
但是Nio在不同的操作系统上实现的方式有所不同,在我们windows操作系统使用select实现轮训时间复杂度是为o(n),
而且还存在空轮训的情况,效率非常低, 其次是默认对我们轮训的数据有一定限制,所以支持上万的tcp连接是非常难。
所以在linux操作系统采用epoll实现事件驱动回调,不会存在空轮训的情况,只对活跃的 socket连接实现主动回调这样在性能上有大大的提升,所以时间复杂度是为o(1)
注意:windows操作系统是没有epoll,只有linux系统才有epoll
Redis线程模型:Redis采用Nio多路IO利用机制,也就是一个线程维护多个不同的Redis客户端连接,从而提高处理并发效率和保证线程安全;底层是采用linux的epoll来避免空轮循;
2、Redis应用场景:
- Token令牌的生成
- 短信验证码Code
- 缓存查询数据
- 网页计数器
- 分布式锁
- 延迟操作
redis持久化机制:
全量同步,每天定时全部数据同步,时间要避开高峰期;
增量同步:采用行为操作对数据实例同步;
RDB(默认-全量同步):缺点,redis宕机时可能会丢失数据
Redis默认采用rdb方式实现数据的持久化,以快照的形式将数据持久化到磁盘的是一个二进制的文件dump.rdb, 在redis.conf文件中搜索“dump.rdb “
AOF(增量同步): 修改redis.conf中的appendonly yes开启AOP同步
appendfsync always #每次有数据修改发生时都会写入AOF文件,能够保证数据不丢失,但是效率非常低。
appendfsync everysec #每秒钟同步一次,可能会丢失1s内的数据,但是效率非常高。
appendfsync no #从不同步。高效但是数据不会被持久化。
Redis六种淘汰策略【防止内存撑暴】
noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。
allkeys-lru:在主键空间中,优先移除最近未使用的key。(推荐)
volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。
allkeys-random:在主键空间中,随机移除某个key。
volatile-random:在设置了过期时间的键空间中,随机移除某个key。
volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除
redis存放对像方式:存json对像,存二进度对像;优缺点,json通读性好,跨语言,二进度存的是java对像;转换也只能转换为java对像;不能跨语言;
redis事务:
Multi 开启事务
EXEC 提交事务
WATCH 可以监听一个或者多个key,在提交事务之前是否有发生了变化 如果发生边了变化就不会提交事务,没有发生变化才可以提交事务
redis与mysql事务差别,多个客户端操作同一条数据,关系性数据会产生行锁;
Discard 取消事务提交
浙公网安备 33010602011771号