zoukankan      html  css  js  c++  java
  • Redis在系统中的使用

    简介:  

      redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

      redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

    1、排序:例如得到得分最高的8个同学。

    (1)每次考试后,使用ZADD 将每一个学生的考试结果添加到redis有序集合中

      ZADD studenttop 97 jack

      ZADD studenttop 80 张三

    (2)使用ZREVRANGE(指定区间的成员)获得得分最高的前8个同学信息

      ZREVRANGE studenttop 0 8 //值按照从大到小来排列,如果你需要从小到大来排列使用 ZRANGE. 0 -1 是所有

    (3)获得指定同学的排名

      ZRANK studenttop jack

    2、显示最新的项目列表:比如说,我们的一个Web应用想要列出用户贴出的最新20条评论。在最新的评论边上我们有一个“显示全部”的链接,点击后就可以获得更多的评论

    (1)每次新评论发表时,我们会将它的ID添加到一个Redis列表lpush(将一个或多个值 value 插入到列表 key 的表头):

      LPUSH COMMENTS A

      LPUSH COMMENTS B

    (2)我们将列表裁剪为指定长度,因此Redis只需要保存最新的5000条评论:

      LTRIM COMMENTS  0 5000 //它会移除最早加入到redis的数据

    (3)取出最新的20条评论

      LRANGE COMMENTS 0 20

    在Redis中我们的最新ID使用了常驻缓存,这是一直更新的。但是我们做了限制不能超过5000个ID,因此我们的获取ID函数会一直询问Redis。这意味着用户在访问前5000条数据的时候都是在redis中。只有在分页数据超出了这个范围的时候,才需要去访问数据库。我们的系统不会像传统方式那样“刷新”缓存,Redis实例中的信息永远是一致的。SQL数据库(或是硬盘上的其他类型数据库)只是在用户需要获取“很远”的数据时才会被触发,而主页或第一个评论页是不会麻烦到硬盘上的数据库了。

    3、计数

      例如你要在用户登录时记录登录失败的次数,超过3次提示输入验证码,超过10次冻结2个小时

    (1)用户每次登录创建一个登录计数器 

      SET LoginFail 1

    (2) 用户第二次登录 在原有计数器上+1 因为INFRBY是原子递增的,所以加上各种计数。

    INCRBY LoginFail 1 //此时LoginFail的值是2

    (3)当LoginFail超过3此时提醒输入验证码,超过10此时 将此账号移入黑名单。并且移除LoginFail计数器;同时,在此期间如果用户成功登录了,我们也要移除计数器或者重置计数器(可以随便使用Set命令或Get)

    4.Pub/Sub

    Redis的Pub/Sub非常非常简单,运行稳定并且快速。支持模式匹配,能够实时订阅与取消频道。

    5.队列

    你应该已经注意到像list push和list pop这样的Redis命令能够很方便的执行队列操作了,但能做的可不止这些:比如Redis还有list pop的变体命令,能够在列表为空时阻塞队列。

    6.缓存

    Redis的缓存部分值得写一篇新文章,我这里只是简单的说一下。Redis能够替代memcached,让你的缓存从只能存储数据变得能够更新数据,因此你不再需要每次都重新生成数据了。

  • 相关阅读:
    用mvc实现增删查改
    hibernate Annotation版本的helloworld
    hibernate 级联操作
    Hibrenate一对一外键关联
    hibernate主键生成
    Action属性接收参数
    WildCard的使用
    Struts 路径分析以及是否一定要执行excute()方法
    学习Struts2经验总结
    基于Struts分层web框架,研究传值问题
  • 原文地址:https://www.cnblogs.com/shaner/p/4835845.html
Copyright © 2011-2022 走看看