Redis —> Remote Dictionary Server
单机数据库
数据库的常用指令
Redis服务器默认会创建16个数据库,序号为0-15,切换数据库的命令“ select 0”即切换到0号数据库,其他同理.
Redis使用对象来表示数据库中的键和值,当我们每次在数据库中创建一个键值对时都会创建两个对象,一个是键对象,一个值对象。键对象的类型有以下几个:
-
字符串对象
添加: SET KEY VALUE
获取: GET KEY -
列表对象
添加: LPUSH KEY VALUE 、 RPUSH KEY VALUE
获取并删除: RPOP/LPOP KEY -
哈希对象
添加: HSET KEY VALUE
获取: HGET KEY
删除: HDEL KEY -
集合对象
添加: SADD K V
获取集合对象数量: SCARD K
删除: SPOP K -
有序集合对象
添加: ZADD K V
获取集合对象数量: ZCARD K
删除: ZREM K
指定索引范围内所有元素: ZRANGE K 0 -1 获取所有
RDB持久化
利用 SAVE 命令主动对 Redis 服务器缓存里面的数据进行 RDB 持久化保存,生成一个RDB 文件,服务器下次启动时扫描是否有RDB 文件,有则自动加载。
值得注意的是 save 命令一旦实施,Redis服务器进程将会被阻塞,即不能进行任何操作,直到持久化完成。
BGSAVE 即“background save” 与save 命令不同,他不会阻塞服务器进程,而是会重生一个子进程,由子进程创建RDB 文件,服务器进程也就是主进程继续执行自己的操作。
自动间隔性保存 可以设置满足什么条件时服务器自动进行保存,如:
SAVE 900 1 // 900秒内,服务器修改至少1次
SAVE 300 10 // 300秒内,服务器修改至少10次
SAVE 60 10000 // 60秒内,服务器修改至少10000次
那么只要满足上面条件其中任意一个,BGSAVE 命令自动执行,服务器自动保存数据。
AOF持久化
不同于RDB 持久化,通过保存数据库的键值对来保存数据库的状态,ADF 持久化是通过保存Redis服务器所执行的的写命令来保存数据库的状态。
多机数据库
主从复制
命令: SLAVAOF <master_ip> <master_port>
Sentinel
sentinal (哨兵,岗哨)是Redis 高可用性的解决方案,一个或多个Sentinal实例组成的Sentinal系统可以监视任意多个主服务器以及这些主服务器下的从服务器,在被监视的一个主服务器进去下线状态时(或者说宕机了),自动的将主服务器的某一个从服务器升级成为新主服务器,然后由新主服务器代替旧主服务器继续命令请求,旧主服务器在合适的时候重启,成为新主服务器的从服务器。
集群
一个Redis集群是由多个节点(Node)组成,开始时,每个节点都分别在只包含自己的集群中相互独立地工作,如果使用 CLUSTER MEET 命令;如向一个Node 发送CLUSTER MEET 命令,可以让Node节点与ip 和port 指定的节点进行握手,当握手成功时,Node节点就会将那个指定的节点添加到Node节点当前所在的集群中。
Redis为什么会这么快
- 基于内存操作,绝大部分的请求是纯粹的内存操作,避免了硬盘I /O 速度慢的限制;
- 数据结构简单,不用像关系型数据库那样设计表,一个对象想要存储必须按照表的格式传入数据;
- 采用了单线程模式,避免了 CPU 执行多线程时进行的上下文切换所花费的时间(上下文切换:某个线程执行完 cpu 分配的时间片,就轮到下一个享用 cpu 分配的时间片,但在切换前要保存上一个任务的运行状态,以便下一次轮到这个任务执行时,可以再加载到上次结束时的状态,这种任务从保存到再加载的过程就是一次上下文切换。)
- 使用多路 I/O 复用模型。