• 除了用作缓存数据,Redis还可以做这些


    Redis应该说是目前最受欢迎的NoSQL数据库之一了。Redis通常被作为缓存组件,用作缓存数据。不过,除了可以缓存数据,其实Redis可以做的事还有很多。下面列举几例,供大家参考。

    了解这些没有多大的实际意义,只是让我们在学习redis的时候有个宏观的认识。全局的去学习redis。学习的过程中能够考虑到应用场景才能深刻理解学以致用。

    1、最新列表

    例如新闻列表页面最新的新闻列表,如果总数量很大的情况下,尽量不要使用select a from A limit 10,尝试redis的 LPUSH命令构建List,一个个顺序都塞进去就可以啦。不过万一内存清掉了咋办?也简单,查询不到存储key的话,用mysql查询并且初始化一个List到redis中就好了。

    2、排行榜应用

    实现这个功能主要用到的redis数据类型是redis的有序集合zset。zset 是set 类型的一个扩展,比原有的类型多了一个顺序属性,此属性在每次插入数据时会自动调整顺序值,保证value值按照一定顺序连续排列。

    我们假设是一个游戏经验值排行榜,那主要的实现思路是:

    • 1、在一个新的玩家参与到游戏中时,在redis中的zset中新增一条记录(记录内容看具体的需求)score为0

    • 2、当玩家的经验值发生变化时,修改该玩家的score值

    • 3、使用redis的ZREVRANGE方法获取排行榜

    3、计数器应用

    Redis的命令都是原子性的,你可以轻松地利用INCR、DECR命令进行原子性操作,来构建计数系统。由于单线程,可以避免并发问题,保证不会出错,而且100%毫秒级性能。

    比如在一个 web 应用程序中,如果想知道用户在一年中每天的点击量,那么只要将用户 ID 以及相关的日期信息作为键,并在每次用户点击页面时,执行一次自增操作即可。

    4、数据排重

    Redis set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口。

    实现方案:

    set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

    5、实时的反垃圾系统

    反垃圾系统通常都是基于关键词的,使用Redis储存关系词,能够利用Redis的高性能,为监控系统提供稳定及精确的实时监控功能,典型的案例如,邮件系统、评论系统等。

    6、可以发布、订阅的实时消息系统

    Redis中Pub/Sub系统可以构建实时的消息系统,比如,很多使用Pub/Sub构建的实时聊天应用。

    设计思路:

    1. 服务端发送消息(含标题,内容),标题按照一定规则存入redis,同时标题(以最少的信息量)推送到客户端,客户点击标题时,获取相应的内容阅读.

    2. 如果未读取,可以提示多少条未读,redis能够很快记数

    3. 根据一定时间清理缓存

    技术实现:

    • 需要redis数据库,客户端websocket,服务器端websocket

    7、队列应用

    队列在现在程序中应用十分广泛,比如日志推送、任务处理等等。以往通常使用http sqs实现队列,其实,使用redis的list类型,也可以实现队列。

  • 相关阅读:
    lucene索引合并与增量索引
    Lucene全文搜索 分组,精确查找,模糊查找
    lucene3.6.1 经典案例 入门教程 (包含从文件中读取content)
    lucene特殊字符处理
    http://www.iteye.com/job/topic/1133159
    org.apache.lucene.queryParser.ParseException: Encountered "<EOF>" at line 1, column 0.
    浏览器查看和手动设置cookie的值
    HttpWebRequest 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系
    SqlServer 行转一列逗号隔开
    大批量delete 优化方案
  • 原文地址:https://www.cnblogs.com/cuiqq/p/11174047.html
Copyright © 2020-2023  润新知