Redis高级功能整理笔记

一、Redis支持的数据类型redis

String类型:字符串类型是二进制文件,能够将图片和视频存入到string中,string类型支持incr操做,能够用作统计计算算法

List类型:列表是指key对应的value是一个双向链表结构,能够实现消息队列功能,减轻数据库压力数据库

Set类型:是一种无序集合,在redis内部经过hashtable实现,查找和删除元素的复杂度为0(1),优势:快速查找元素是否存在,用于记录一些不能重复的数据缓存

Sort Set类型:是一种有序集合,经过一个double类型的整数score进行排序,内部经过跳跃表和hashtable组合完成,能够实现一个优先级的队列,好比排行榜服务器

Hash类型:哈希类型是每一个key对应一个hashtable,添加、删除和修改操做的时间复杂度0(1),hash类型适合存储对象app

二、Redis排序命令memcached

sort key:不设置任何选项是对集合元素进行简单排序,默认正序性能

sort key [ASC | DESC | ALPHA]:默认排序ASC(从小到大),DESC(从大到小),ALPHA(字母顺序)spa

sort key [by pattern]:按照给你模式(parttern)将集合元素内容自合成新key,并按新key对应的内容排序,完成后返回排好序的集合元素。操作系统

    举例:

        lpush list 1 从list集合头部添加一个值为1的数据

        lpush list 2 从list集合头部再添加一个值为2的数据

        set name1 102 设置一个name1的key,值为102

        set name2 101 设置一个name2的key,值为101

        sort list by name*:name*表示将list里的元素填充到*,按照name*里面的值进行排序,返回的是排序后的list集合中的元素

sort key [limit start count]:limit选项可以限定返回结果的数据。下标从start开始,获取count个元素

sort key [store dstkey]:按照固定模式排序后,将排序后的集合缓存在dstkey中,能够减小cpu的开销 

三、事务处理

原理:redis接收到一个客户端链接发出的multi命令,此链接会进入一个事务上下文,redis把此链接发来的命令存入一个队列中。当此链接发出exec命令,redis便开始按顺序执行队列中的全部命令,并将全部命令执行结果打包一块儿返回给客户端链接,结束事务上下文。

保证一个client发起事务中的命令能够连续执行,而中间不会插入其余client命令,multi:打开一个务  exec:按顺序执行  discard:取消一个事务。

缺点:某个命令不成功,事务中其余命令正常执行,事务不会回滚。

watch命令监视给定的key,至关于给key加一个乐观锁。

四、两种持久化机制:

快照(snapshotting):redis数据是保存在内存中,默认是以快照(RDB)的方式将数据持久化到磁盘上。如下是配置文件中的默认配置

save 900 1:表示900秒内若是至少有一个key的值变化,则保存快照

save 300 10:表示300秒内若是至少10个key的值变化,则保存快照

save 60 1000:表示60秒内若是至少有1000个key的值变化,则保存快照

工做原理:redis会fork一个子进程,子进程会将数据写到磁盘上的一个临时rdb文件中。当子进程完成写临时文件,将原来的rdb替换掉。这样的好处是能够copy-on-write。

缺点:若是遇到redis不正常关机,会致使最近的数据会丢失

Append-only file(AOF): 将redis的配置文件中的appendonly yes开启就可使用aof方式持久化。redis每执行一个修改数据的命令,都会添加到aof文件中,当redis重启后,会读取aof文件进行恢复到redis关闭前的最后时刻。

aof三种刷新方式:appendfsync alaways(每次更新操做后手动调用fsync将数据写到磁盘中)、appendfsync eveysec(表示每秒同步一次,推荐)、appendfsync no(等操做系统进行缓存同步到磁盘中)

工做原理:redis会fork一个子进程,子进程将最新的aof写入到一个临时文件,父进程增量的把内存中最新的执行命令写入到就得aof文件,当子进程完成重写临时文件后,父进程收到一个信号,把以前内存中增量的修改写入到临时文件的末尾,而后将aof文件重命名,临时文件重命名,开始向新的aof中写入。

缺点:因为都会存在aof文件中,会致使aof文件愈来愈大,虽然数据不会丢失redis性能会差些。可是能够经过bgrewriteaof命令将当前内存中最短序列的命令写到磁盘中来缩小aof文件的大小。

五、主从同步

特色:一台主服务器能够有对个从服务器。多个从服务器能够链接同一个主服务器外,还能够链接其余从服务器。主从复制不会阻塞主服务器,再同步数据时,只服务器继续能够处理client请求。

过程:

第一阶段

1)slave服务器主动链接到master服务器

2)slave服务器发送sycn命令到master服务器请求同步

3)master服务器备份数据库到rdb文件中(备份期间,会将接收到的命令缓存起来)

4)master服务器把rdb文件传输给slave服务器

5)slave服务器清空数据库数据,把rdb文件导入到数据库中

第二阶段

6)接下来master服务器把用户全部更改数据的操做,经过命令的形式转发给全部slave服务器

7)salve服务器执行master服务器发送过来的命令,就能够实现同步

六、消息订阅

实现原理:当客户端执行subscribe命令订阅频道时,服务器会将客户端与被订阅频道在pubsub_channels字典中进行关联,若是频道已经有其余的订阅者,那么字典必有相应的订阅者链表。

七、虚拟内存(VM)

redis把数据库中的数据存放在内存中,随着数据的不断增长,会致使内存不足的状况,从而可使用VM功能,将不多访问的value保存到磁盘中。VM系统只能把value对应的object交换在磁盘中,而把全部key的object放在内存中,保证了查询性能

交换过程:

1)计算保存这个对象须要占用的swap文件中的多少页

2)在swap文件中寻找一段连续页空间来保存这个对象

3)把对象写入swap文件

阻塞式VM与非阻塞式VM:将配置文件中vm-max-threads设置为0为阻塞式VM,大于0则采用的I/O线程进行交换,只有内存占用超过vm-max-memory设定值时,才会触发VM交换。阻塞式VM优势是简单,当客户端访问被换出的数据或者redis正在将数据换出时,redis将不能处理其余客户端请求,从而阻塞其余客户端

八、内存淘汰

当数据库内存不足时,redis能够采用启用虚拟内存(vm-enabled设置为yes)或者启用内存淘汰(将maxmemory设置大于0的整数)

redis淘汰算法:

1)随机淘汰算法:从数据库中随机删除一个key

2)LRU淘汰算法:从数据库中删除一个最近最少使用的key(memcached只有此方式)

3)TTL淘汰算法:从数据中删除一个最快过时的key

九、对象引用计数

原理:给对象添加一个引用计数器,每当有地方引用它时,计数值就加1,当引用失效时,计数器值就减1,当计数器为0时,将对象从内存中删除

十、自动关闭超时链接

当有一个客户端链接在必定时间内不进行任何操做时,redis自动关闭它,由于redis只能处理有限的客户端链接,这个功能有效的防止一些用户恶意占用链接。开启:timeout设置为大于0的整数

十一、清除过时数据

redis为每一个存储的数据设定一个过时时间,当到达这个设定的过时时间后,redis便会把过时的数据从内存中删除

redis清除过时数据的两个阶段:

1)在定时器中进行:随机删除一些过时数据

2)用户获取数据是进行

相关文章
相关标签/搜索