redis总结

redis的特性

  1. 单线程,避免线程切换和锁操作
  2. 高性能,单机并发量达到万级
  3. 支持集群模式

redis单线程高性能的原因

  1. 纯内存访问,内存的响应时间是100ns,redis并发达到每秒w级
  2. 非阻塞io,redis使用epoll作为多路复用的实现,redis基于epoll实现了自己的事件处理模型。将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间。
  3. 单线程避免了锁竞争和线程切换,以及线程创建。
  4. 单线程有利于高性能数据结构的实现。

redis单线程的问题

对于每个命令都是有执行时间的,如果某个命令执行时间过长,会造成其它命令阻塞,对高性能来说是致命的。

redis应用场景

  1. 消息队列系统,利用redis的发布订阅和阻塞功能
  2. 分布式锁,利用setnx或者lua脚本实现原子操作
  3. 缓存,分布式缓存,提高系统的响应速度
  4. 排行榜系统,使用redis的列表和有序集合
  5. 计数器应用

redis不适合的场景

  1. 从数据规模,过大的数据不适合放在redis中
  2. 从数据类型,分为冷数据和热数据(频繁操作的),reids存冷数据有些浪费资源

redis的基本数据类型

1. string

数据结构:自定义SDS,不是c语言字符串

用途:1.字符串存储,数字,二进制数据也可以,大小(512m以内)

2. hash表

数据结构:hash表,hash节点,字典

特性:

用途:存储对象,类似与一个map,

3. list

数据结构:自定义的双向链表,listNode,list

特性:元素是有序的,元素可以重复

用途:

4. set

数据结构:set

特性:元素是无序的,元素不可以重复

用途:

5. sortedset

数据结构:ziplist,skiplist,intset

特性:元素是有序的,元素不可以重复

用途:

redis事务处理

  1. watch

redis持久化策略

1. rdb

定时刷新内存,进行持久化。可以手动触发命令

2. aof,实时持久化,性能会降低一些。

aof持久化功能实现上分为追加,文件写入,文件同步三个步骤

redis使用lua脚本的优势?

redis的多路复用机制

快照的实现原理

redis内存优化策略

redis的集群模式

1. master-slave

主从复制的原理:

2. master-slave-sentinel

哨兵的原理:

3. redis-cluster

redis集群的原理:

增加节点:

删除节点:

其它集群方案

redis shardding

codis

twemproxy

参考《redis开发与运维》,《redis设计与实现》,两本书。

results matching ""

    No results matching ""