Redis knowledge points (for review, to be sorted out)

NOSQL(not only sql);


Refers to the non-relational database, which has the advantages of easy expansion, large data volume, high performance, and diverse and flexible data models.

What is the traditional ACID?


Atomicity : 事务里面的操作要么全执行,要么都不执行;
Consistency : 事务开始前和结束时,数据库的完整性约束不被破坏。比如A向B转账,不可能A扣了钱,但是B没有收到;
Isolation : 并发执行的事务对彼此的中间状态不可见;
Durability : 事务一旦提交,对数据库的修改就是永久了;

Four isolation level of the transaction
to read uncommitted (the Read UNCOMMITED): 会脏读、不可重复读、幻读问题;
【脏读:指的是一个事务读取了另一个事务未提交的数据】
【不可重复读:指的是在一个事务内,多次读取某一行数据,结果不一致】
【幻读:指的是一个事务读取了另一个事务插入的数据,导致前后读取不一致】

Read has been submitted (Read Commited): 一个事务当等另一个事务提交后才能读取数据,会出现不可重复读和幻读问题;(Oracle的默认隔离级别)
repeatable read (Repeatable Read): 一个事务开启时,不允许其他事务修改该事务的数据,会出现幻读问题;(MySQL的默认隔离级别)
serialized (serializable) : 最高的隔离级别,事务串行化执行;

CAP theory?


Consistency:一致性
Availability: 高可用
partition tolerance:分区容错

redis guarantees CP

Redis is a single-threaded, non-blocking IO multiplexing model, with 16 libraries by default;

Single thread: avoid unnecessary context switching and race condition consumption CPU;
IO multiplexing: use polling to process prepared streams in sequence, avoiding a lot of useless operations;

Redis commonly used data structure?


1. String: 简单的k-v键值对;
2. Hash:是一个String类型的field和value的映射表,hash特别适合用于存储对象;
3. list:底层实现是双向链表;
4. set:功能与list类似,特殊之处set可以排重;
5. sorted set: 和set相比,增加了一个score参数,使得集合中的元素能够按照score进行有序排列,并且是插入有序的,即自动排序;

Persistence of redis?


1.RDB :
在指定的时间间隔内,把内存中的数据集快照写入磁盘,恢复的时候直接将磁盘的数据集写入内存
默认是15分钟1次,5分钟100次,1分钟10000次写操作触发
保存的是dump.rdb文件
advantages: 适合大规模的数据恢复
disadvantages:
1 会丢失最后一些快照后的所有修改.;
2 fork子线程时,内存中的数据被克隆的一份,2倍空间的膨胀性需要考虑.;
2.AOF (append only file) :
以日志的形式记录每个写操作,只需追加文件不许改写文件,redis启动之初会读取文件来重新执行命令来构建数据
生成是appendonly.aof文件; 默认是关闭的,开启时 appendonly no 改成yes

Rewrite 当aof文件超过某个设定的阀值时,redis就会启动文件的压缩,只保留恢复数据的最小指令集,可以使用命令gbrewirteaof执行mechanism: .
Rewrite fork一个新线程来重写,先写临时文件再rename,重写时不会读取旧的aof文件,而是把内存中的数据用命令的形式重写一个新的aof文件principle: ;
rewrite trigger redis会记录上次重写aof文件的大小,默认配置当aof文件是上次重写的一倍且文件大于64Mconditions: ;

When both rdb and aof are enabled at the same time, redis will first load the aof file to restore the original data.
Comparison:
1 aof文件比red文件更新频繁,优先使用aof还原数据.;
2 aof比rdb更安全,更大.;
3 aof性能比rdb差.;
4.如果两个都配了,优先加载aof

Redis business?


一个队列中一次性、顺序性、排他性的执行一系列命令,不保证原子性,同一个事务内如果有一条命令执行失败,其他的命令仍然会被执行,没有回滚

Transaction related commands:
1.discard : 取消事务,放弃执行事务内的所有命令;
2.exec : 执行事务内的所有命令;
3.mutil : 标记一个事务的开启;
4.watch key [key…] : 监视一个(或多个)key,如果在事务执行之前,这个key被其他命令所改动,那么事务将被打断;
5.unwatch : 取消watch命令对key的监视;

The watch command is similar to optimistic locking, optimistic locking strategy: the submitted version must be greater than the current version of the record to be executed;

redis cluster?


** redis master-slave replication: ** read-write separation, disaster recovery;
one type is the master database (master), one type is the slave server (slave)
1 主数据库可以进行读写操作,当发生写操作的时候自动将数据指令集通道到从数据库.;
2 从服务器一般是只读的,一个主库可以有多个从库,一个从库只能有一个主库.;

Configuration 配从不配主:;
From the library configuration command:slaveof 主库Ip 主库端口,查看命令 info replication

Principle:
1 slave启动成功后会给master发送一个sync命令.;
2 master收到sync命令个启动后台存盘程序,同时收集所有接收到的用于修改数据的指令集,在后台程序执行完成后,传送整个文件给slave完成一次全量同步.;
3 全量复制:slave接收到数据文件时,将其存盘,并加载到内存.;
4 增量复制:master继续将收集到的新指令集发送给slave.;
5 slave只要重连master,一次全量复制自动执行.;

Sentinel mode
后台监控主机是否故障,如果故障根据投票数,将slave转换成master(Sentinel): ;

redis-cluster
redis3.0之后版本支持redis-cluster集群,采用的是无中心结构,每个节点保存数据和整个集群状态,每个节点和其他所有节点连接cluster: .
Structural characteristics:
1 所有的redis彼此互连(ping-pong),内部使用二进制协议优化传输数据和带宽.;
2 节点的fail是通过集群中超过半数的节点检测失效才生效.;
3 客户端与redis节点直连,连接集群中任何一个可用节点即可.;
4 redis集群预分配好16384个slot(槽)所有的节点(不一定平均分配),添加k-v时,对key使用crc16算法得到一个hash,取模16384决定将key放入哪个slot.;

How can multiple commands execute redis concurrently to ensure atomicity?


1.使用redis事务;
2.使用redis+lua脚本;

How to ensure the double-write consistency of cache and database?


1.先更新数据库再更新缓存;
2.如果对数据有强一致性要求,不建议放缓存;

MaxMemory: Maximum cache configuration.

The default is 0, and the maximum cache is not specified. If new data is added and the maximum memory is manipulated, redis will crash, so be sure to set it.
When the redis memory data set rises to a certain level, a data elimination strategy will be implemented.

Redis' expiration strategy and memory elimination strategy:


redis过期策略采用的是定期删除+惰性删除
Periodically clear: redis每隔100ms随机抽样检查,是否有过期的key,有则删除,但是会导致很多过期的key没有删除;
inert Delete: 在获取某个key的时候redis会检查一下key是否过期,过期则删除;

There are six out of memory strategies:
1.volatile the LRU-: 从已设置过期时间的数据集中挑选最近最少使用的数据淘汰;
2.volatile-ttl: 从已设置过期时间的数据集中挑选将要过期的数据淘汰;
3.volatile-Random: 从已设置过期时间的数据集中随机挑选数据淘汰;
4.allkeys the LRU-: 当内存不足以容纳新写入数据时,在键空间中移除最近最少使用的key(这个是最常用的);
5.allkeys-Random: 当内存空间不足以容纳新写入的数据时,随机淘汰数据;
6.No-eviction: 禁止驱逐数据,当内存不足以容纳新写入的数据时报错.

Common performance problems of redis?


  1. master最好不要做任何持久化工作,如rdb内存快照和aof日志文件,如果数据比较重要,某个slave开启aof备份数据,策略设置为每秒同步一次;
  2. master和slave最好在同一个局域网
  3. 尽量避免压力很大的主库上增加从库,不要用图状结构,用单向链表结构更为稳定。即: Master <- Slave1 <- Slave2 <-Slave3…

How to set up spike system? What will happen to high concurrency?


Architectural design:
1. Intercept requests upstream of the system and reduce downstream pressure.
秒杀系统特点是高并发,但实际秒杀成功的请求数量却很少,所以不在前端拦截可能造成数据库读写锁冲突,甚至导致死锁,最终请求超时.
2. take advantage of 利用缓存可以极大的提高系统读写速度caching: .
3. Use the messaging 消息队列可以削峰,拦截大量并发请求middleware: .

Front-end design scheme:
1. Page static : 将活动页面上的所有可静态元素全部静态化;
2. Repeated submission is prohibited : 用户提交之后按钮置灰;
3. User current limit : 在某一时间段内,只允许用户提交一次请求;

Back-end design plan:
1 网关限制uid访问频率.;
2 服务层:采用消息队列缓存请求和利用缓存应对请求.;
3 把减库存和生成订单逻辑使用mysql存储过程实现,减少事务锁持有时间,避免GC和IO的延迟.;

Published 15 original articles · Likes0 · Visits 68

Guess you like

Origin blog.csdn.net/xrzi2015/article/details/105603910