神奇的 Redis

红薯 发布于 2011/04/03 15:50
阅读 2K+
收藏 14

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

为什么高级,咱们列一下它的基本特性:

  1. 每秒10万+的读,8万+的写(是不是有点吹?)
  2. 操作原子性(还支持把一组命令合并为一个原子操作)
  3. 多种基元数据类型的支持(hash/list/(sorted)set/string)
  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作为中数据量的业务热点的存储确实是不错的方案。

加载中
0
老盖
老盖

看来要关注一下Redis了,红薯,oschina是不是准备要尝试一下?

0
红薯
红薯

引用来自#2楼“戏水”的帖子

看来要关注一下Redis了,红薯,oschina是不是准备要尝试一下?

想学习一下,至于oschina,目前还没有必要哦

0
钛元素
钛元素

有意思,但是目前大多数企业可能都用不上吧

0
LinkerLin
LinkerLin

我一直在用。蛮好的东西。

0
lazypeople
lazypeople

新浪微博不就是靠着redis吗。

慢慢就走进人们的视线了

返回顶部
顶部