Redis的工作原理
Redis 是一个高性能的key-value非关系型数据库。它支持存储的数据类型有string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。
Redis内部实现采用epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成事件。它的I/O多路复用是在单个线程中通过记录跟踪每一个sock(I/O流)的状态来管理多个I/O流。
Redis采用Reactor的方式来实现文件事件处理器(每一个网络连接都对应一个文件描述符)。在main函数初始化之后,就会进行事件驱动循环,在循环中会调用IO复用函数进行监听。
Redis-Client在操作的时候,会产生不同事件类型的socket,I/O多路复用程序将其置入队列之中,然后,IO事件分派器依次去队列中取,转发到不同的事件处理器中。
Redis提供了两种级别的持久化方式:
1.RDB持久化方式能在指定的时间间隔对数据进行快照存储
2.AOF持久化方式记录每次在服务器写的操作,当服务器重启时会重新执行这些命令来恢复原始的数据。AOF命令以redis协议追加保存每次写操作到文件末尾。Redis还能对AOF文件进行后台重写,避免AOF文件的体积过大。
Redis的基础数据结构及使用
1.String 字符串
常用命令:SET key value 设置指定 key 的值
GET key 获取指定 key 的值
GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。
...
2.list 列表
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
常用命令:LPUSH key value1[value2] 将一个或多个值插入到列表头部
LPOP key 移出并获取列表的第一个元素
RPOP key 移除列表的最后一个元素,返回值为移除的元素
RPUSH key value1[value2] 在列表中添加一个或多个值
...
3.set 集合
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
集合对象的编码可以是 intset 或者 hashtable。
常用命令:SADD key member1[member2] 向集合添加一个或多个成员
SCARD key 获取集合的成员数
SPOP key 移除并返回集合中的一个随机元素
...
4.hash 散列
适合用于存储对象
常用命令:HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。
HGET key field 获取存储在哈希表中指定字段的值。
HDEL key field1[field2] 删除一个或多个哈希表字段
...
5.zset 有序集合
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
常用命令:ZADD key score1 member1[score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZREM key member [member...] 移除有序集合中的一个或多个成员
ZCARD key 获取有序集合的成员数
GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
...
Redis的特点
1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
2.Redis不仅支持key-value类型的数据,同时也提供String、list、set、zset、hash等数据结构的存储
3.Redis支持数据的备份,即master-slave模式的数据备份
4.性能极高,Redis能读的速度是110000次/s,写的速度是81000次/s
5.原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。