神奇的Redis

Redis按照官方的定义是一个开源的,高级的键值存储。本文就想扩展开介绍,高级和存储两点。html

为何高级,我们列一下它的基本特性:git

  1. 每秒10万+的读,8万+的写(是否是有点吹?)github

  2. 操做原子性(还支持把一组命令合并为一个原子操做)redis

  3. 多种基元数据类型的支持(hash/list/(sorted)set/string)mongodb

  4. 支持过时(能够用做缓存)数据库

  5. 支持主从架构(多级层次)缓存

  6. 支持管道(一次性发送多个命令执行)安全

以及丰富的API:架构

  1. 提供丰富有关key的操做命令并发

    1. 移动/排序/删除/重命名/获取类型/是否存在

    2. 得到符合某个表达式的全部键

    3. 设置和删除过时时间

    4. 随机得到一个

  2. 提供丰富的list结构操做命令

    1. 获取列表长度

    2. 获取列表中一段元素

    3. 移除一个或若干项

    4. 从最后开始移除若干项

    5. 追加一个项

    6. 为列表最前加入一项

    7. 移除并获取第一项

    8. 移除并获取最后一项

    9. 按照索引号获取或设置项

    10. 移除A列表最后一项追加到B列表

    11. 在列表中某个项(根据值)前或后加入项

    12. 获取项的索引号

  3. 提供丰富的string操做命令

    1. 设置(容许有过时)和追加值

    2. 获取值的一段

    3. 递减和递增

    4. 减小和增长

    5. 设置新值而且返回老的值

    6. 一次获取和设置多个键的值

    7. 获取值的长度

  4. 提供丰富的set结构操做命令

    1. 增长

    2. 批量增长

    3. 交集(而且保存到另一个集合)

    4. 并集(而且保存到另一个集合)

    5. 从一个移除加入另外一个

    6. 获取长度

    7. 随机获取(并移除)

    8. 是否存在

    9. 获取全部

  5. 提供丰富的hash结构操做命令

  6. 提供丰富的sorted set操做命令

  7. 支持主从(而且支持多层)

  8. 提供发布订阅功能

    1. 监听某个信道(符合某个表达式)的消息

    2. 向某个信道发布消息

  9. 提供事务功能

    1. 开始事务块

    2. 抛弃以前的全部命令

    3. 执行事务块中的全部命令

    4. 监视某个键的事务执行

  10. 其它

    1. 受权

    2. 改变数据库

    3. 在线配置

    4. 异步刷新数据到磁盘

    5. 同步刷新数据到磁盘

    6. 获取状态信息

    7. 得到调试信息

    8. 删除全部数据

    9. 关闭

  11. 支持SET if Not eXists(能够用做分布式锁)

这么多API总结起来:

  1. 如此多的基于服务端的命令能够实现各类各样的逻辑(这里重点突出服务端这个词,虽然咱们知道不少状况下能够get后再set,或是getall后再setall,可是这效率没法和服务端直接操做相比)

  2. 不少命令都组合成了原子命令(这是很重要的,使得咱们不须要在客户端作分布式锁)

  3. 创新的list/set/sorted set存储结构,比单纯的key/value丰富多了

 

接下来讲说存储这个词,不少人把它和memcached来比较,其实Redis的配置和架构是如此灵活,咱们想怎么用就怎么用,想怎么调优就怎么调,能够为咱们的应用来定制存储架构:

  1. 设置数据刷新到磁盘的条件(几秒内几回改动)

  2. 设置数据刷新到磁盘的方式(老是/每秒/不刷新)

  3. 设置虚拟内存(最大内存/页大小/页数量)

  4. 设置限制(内存占用/并发数/端口/是否后台)

对于用做缓存仍是存储,数据的安全性等咱们均可以根据不一样的应用来调整。那么Redis能够用做哪些应用呢?

  1. 分布式缓存

  2. 分布式锁

  3. 消息队列

  4. 全文索引

  5. 和业务逻辑绑定的存储

对于.NET客户端来讲,目前ServiceStack.Redis是不错的选择,其中也有一些不错的例子:

  1. 发布订阅

  2. 分布式锁

  3. 博客的例子

更多信息,参阅:

  1. http://blog.mjrusso.com/2010/10/17/redis-from-the-ground-up.html

  2. http://simonwillison.net/static/2010/redis-tutorial/

  3. http://antirez.com/

Mongodb做为大数据量的存储,把Redis做为中数据量的业务热点的存储确实是不错的方案。

相关文章
相关标签/搜索