目录

大话Redis基础

  • content {:toc}

前期多做功课,摆对正确姿势去使用 redis 可以加快请求数据的响应时间,然而噬无忌惮的使用会让你为内存问题而烦恼,从长远的角度看这个不仅仅是只要加几条内存就能解决的问题

redis:

  • redis 是 Key Value nosql 数据库,数据存储在内存中,单进程,自己实现了一套异步事件处理,虽然单进程但是数据库处理很快,异步持久化;
  • 持久化方式:RDB(数据快照),AOF(日志追加的方式)进行异步持久化
  • 支持集群

radis 有五种的数据类型:

  • string 字符串类型
    • 字符串类型是 redis 中的最基本的数据类型,也是其他 4 种数据类型的基础,它能存储任何形式的字符串,包括二进制数据
  • hash 哈希表类型
    • 哈希类型是一个字符串类型的字段和字段值的映射表。哈希类型适合存储对象。相较于将对象每一个字段存成当个字符串类型,将一个对象存成在 hash 类型会占用更少的内存,并且可以更方便的存取整个对象
  • list 链表类型
    • 链表类型可以存储一个有序的字符串列表,内部是使用双向链表实现的。所以我们通常用链表类型的 LPUSH 和 LPOP 或者 RPUSH 和 RPOP 实现栈的功能,用 LPUSH 和 RPOP 或者 RPUSH 和 LPOP 实现队列的功能
  • set 无序集合类型
    • 集合类型和数学中集合概念相似,比如集合中的元素是唯一的,无序的,集合与集合之间可以进行交并差等操作
  • zset 有序集合类型
    • 有序集合类型和集合类型一样,只不过多了一个“有序”,有序集合中每一个元素都关联了一个分数,虽然集合中每一个元素都不同的,但是他们的分数却可以相同

注意:

  • redis 的数据都是存储在内存里的;
  • 2.0 以上好像是可以开启 VM 虚拟内存(把磁盘分配部分作为虚拟内存)的功能,通过内部机制把冷数据放到虚拟内存里,常用的数据还是在内存中;
  • redis 只能是作为热数据(经常被并发查询的)的缓存,不能把 redis 当成数据库去使用

内存控制与优化:

  • 存储的数据的控制:
    • 控制数据字段(序列化对象的时候不用的字段不要读到 redis,减少存储数据量)
    • 设置过期时间
    • 热数据存储(冷数据过滤移除,或者不存)
    • 不存储长期累加增长的数据,尤其是可能成为大数据的,(可以考虑使用 mongodb)

redis 其他辅助:

  1. 查看配置:config get *

    http://blog.csdn.net/lengzijian/article/details/8593656

  2. 查看信息:info

    http://www.runoob.com/redis/server-info.html

  3. 其他命令:

    http://www.runoob.com/redis/redis-commands.html


.NET 类库:

  1. 正在使用版本:ServiceStack.Redis 3.9.71.0,>=4.0 版本有限制连接池的数量,需要收费
  2. StackExchange.Redis

    下载:http://download.csdn.net/detail/shi1984/8916095#comment
    博客: http://www.cnblogs.com/bnbqian/p/4962855.html
    github: https://github.com/StackExchange/StackExchange.Redis


当前我们的应用场景:

  1. STRING

    存储信息对象序列化 JSON 格式

  2. HASH:

    经常被并发请求的小数据查询,如:最近五日的超高返商品数据,存储在 Hash 中,field=商品 ID,value=商品信息(对象序列化 JSON 格式)

  3. LIST:

    作为信息队列使用,不断的 Lpush 数据到 List 中,rpop 数据出来入库,或者处理。

  4. ZSET:

    排序列表,如搜索关键字排名

  5. SET 相对比较少去使用

总结:

  • 前期多做功课,摆对正确姿势去使用 redis 可以加快请求数据的响应时间,然而噬无忌惮的使用会让你为内存问题而烦恼,从长远的角度看这个不仅仅是只要加几条内存就能解决的问题