NoSQL简介
NoSQL最常见的解释是”non-relational”,”Not Only SQL”也被很多人接受,泛指非关系型数据库,NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题,它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。
注意:我使用的版本是6.0.10,不同版本可能略有差别
redis事务就是一组命令的集合,一个事务中所有命令都会序列化,按顺序的串行化执行而不会被其他命令插入
Redis的事务仅仅是保证事务里的操作会被连续独占的执行,因为是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的
Redis的事务没有隔离级别的概念,因为事务提交前任何指令都不会被实际执行,也就不存在事务内的查询要看到事务里的更新,在事务外查询不能看到这种问题了
Redis的事务不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力
redis全名(Remote Dictionary Server),即远程字典服务
redis的值的数据结构类型有String、List、Set、Hash、zset(sorted set,有序集合)、Bitmaps(位图)、HyperLogLogs
注意:我使用的版本是6.0.10,不同版本可能略有差别
redis中key的最大长度为512M
server.h
任何value对象都会被包装成一个redisObject,redisObject能指定value类型,编码方式等数据属性
1 | typedef struct redisObject { |
注意:我使用的版本是6.0.10,不同版本可能略有差别
虽然redis有持久化的功能可以保证redis服务重启不会丢失数据,但是如果redis服务器的硬盘损坏就会导致数据丢失,使用主从复制来避免这种单点故障。
主机数据更新后根据配置和策略自动同步到备机的master/slave机制,master以写为主,slave以读为主
主要是使用PSYNC命令来实现
PSYNC命令具有全同步和部分同步两种模式
redis会首先尝试部分同步,如果失败才会尝试全同步。slave连接master后,会主动发起psync命令,slave会提供master_runid和offset,master验证maste_runid和offset是否有效,master_runid相当于master的身份验证码,用来验证slave上一次连接的master,offset是全局积压空间数据的偏移量。如果验证未通过,则进行全同步