神奇的Redis

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis按照官方的定义是一个开源的,高级的键值存储。本文就想扩展开介绍,高级和存储两点。 为什么高级,咱们列一下它的基本特性: 每秒10万+的读,8万+的写(是不是有点吹?) 操作原子性(还支持把一组命令合并为一个原子操作) 多种基元数据类型的支持(hash/list/(sorted)s...

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作为中数据量的业务热点的存储确实是不错的方案。

作者: lovecindywang
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
NoSQL Redis
Redis系列
(1)完全基于内存操作,数据都存在内存中 (2)采用单线程,避免了不必要的上下文切换带来的性能问题,也不用考虑锁的问题 (3)基于非阻塞的io多路复用机制 (4)数据结构简单,对数据操作简单
|
8月前
|
存储 缓存 NoSQL
|
3月前
|
存储 NoSQL Redis
Redis
Redis
|
7月前
|
SQL NoSQL Redis
|
8月前
|
存储 NoSQL Redis
Redis介绍以及日常使用
​ 介绍 Redis(REmote DIctionary Server)是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、非关系类型的Key-Value数据库。它提供了多种语言的API,如Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等,使得在各种语言环境下使用Redis都变得非常方便。 Redis是一个高性能的Key-Value数据库,其性能在很大程度上补偿了如Memcached这类Key-Value存储的不足,并且在某些场景下,它还可以作为关系数据库的良好补充。它支持的数据结构类型
199 1
|
8月前
|
存储 人工智能 NoSQL
Redis的未来
【翻译】来自redis官网对未来的规划
261 0
|
8月前
|
缓存 NoSQL 数据库
Redis的三剑客
Redis的三剑客
|
存储 NoSQL 中间件
redis
redis
58 0
|
NoSQL Redis
|
NoSQL Java Redis
Redis4
Redis4
47 0