DB,Cache和Redis应用场景分析

本文介绍了作者在开发一款微博产品的过程中使用MySQL、Memcached及Redis进行数据存储的经验。重点讲解了不同存储技术在微博场景中的应用,包括持久化存储、缓存及计数器等。

最近做一产品,微博方面的。数据存储同时用到了DB(mysql),Cache(memcache),Redis。其实最开始架构设计的时候是准备用MongoDB的,由于学习成本太高,
最终选择放弃了,采用了比较保守的方案。这款微博产品做了将近一年,涵盖了手机客户端(ios,android),web(刚上线不久),现在差不多有10多W用户,光
DB的写操作也到了几十W每日,前段时间刚刚做了一个读写分离。目前感觉这套系统还比较稳定。下文主要就微博产品的一些数据存储的应用场景做个简要介绍。
    DB
        DB主要用来存储一些不经常修改的数据,比如微博,评论,好友关系,用户信息,和一些微博分类。这里边联表查询比较多,虽然有些地方做了一些视
图。由于业务比较复杂,还是有不少地方超过了3个表的联表查询。随着数据量的逐步增加,下一步要考虑分库分表了。
       Cache
       主要对经常使用的数据做了缓存,比如新发的微博,第一页评论,登录的用户信息,微博分类。目前主要做了细粒度的缓存,下一步针对业务级做一些缓
存。
       Redis
      主要用来做计数器,比如发帖数,评论数,阅读数之类的,比较合适存储经常改变而又需要永久存储的数据,这也是和cache的区别。另外对登录后的好
友关系做了一个redis备份。Redis还做了一些临时存储的数据,比如今日最热微博,本周最热微博ID列表。
    这三个组件相辅相成。其实DB放了一些需要永久存储,而不经常修改的数据。Cache针对单表和业务层分别做了一些细粗粒度的缓存。Redis主要放了一些
不太紧要的而又经常改变的数据。

转载于:https://www.cnblogs.com/kenshinobiy/p/4316297.html

### 对比 - **本质**:Cache 是一种通用的缓存技术,本质上是用于临时存储数据以提高访问速度的机制,有多种实现方式,如内存 Cache、磁盘 Cache 等。Memcached 属于单一 key - value 内存 Cache;而 Redis 是一个数据结构内存数据库,支持五种数据类型,除单纯缓存作用外,还可以处理一些简单的逻辑运算,不仅能作为缓存,还能当作数据库使用 [^1]。 - **数据类型**:Cache 一般仅支持简单的键值对存储,如 Memcached 就是典型的单一 key - value 存储。Redis 支持丰富的数据类型,如 String、Hash、List、Set Sorted Set 等 [^1][^4]。 - **功能**:Cache 主要功能是缓存数据,减少对数据源(如数据库)的访问,提高系统性能。Redis 除了缓存功能外,还具备很多其他特性,如持久化(可通过 RDB 快照或 AOF 日志方式实现数据持久化)、发布订阅、事务等 [^4]。 - **持久化**:普通 Cache 通常不具备持久化功能,数据存储在内存中,一旦服务器重启或出现故障,数据就会丢失。Redis 可以将数据持久化到磁盘,保证数据的安全性可恢复性 [^4]。 ### 使用场景 - **Cache 使用场景**:Cache 主要对经常使用的数据缓存,以减轻数据源的压力,提高系统响应速度。例如在微博系统中,会对新发的微博、第一页评论、登录的用户信息、微博分类等细粒度缓存,后续还可针对业务级一些缓存 [^2]。 - **Redis 使用场景**: - **计数器**:适合存储经常改变而又需要永久存储的数据,如微博系统中的发帖数、评论数、阅读数等 [^2]。 - **临时存储**:可用于存储一些临时数据,如今日最热微博、本周最热微博 ID 列表等 [^2]。 - **分布式锁**:利用 Redis 的原子性操作实现分布式锁,保证在分布式系统中同一时间只有一个客户端可以访问共享资源。 - **消息队列**:借助 Redis 的 List 数据类型实现简单的消息队列。 ### 关系 Cache 是一个广义的概念,Redis 可以看作是 Cache 的一种具体实现,并且是功能更强大的实现。在实际应用中,Cache Redis 可以结合使用。例如,使用普通 Cache 对一些简单、高频访问的数据进行缓存,而对于需要复杂数据结构额外功能的数据,则使用 Redis 进行存储处理。 ```python # 以下是使用 Python 的 redis 库操作 Redis 的简单示例 import redis # 连接到 Redis 服务器 r = redis.Redis(host='localhost', port=6379, db=0) # 设置键值对 r.set('key', 'value') # 获取键对应的值 value = r.get('key') print(value.decode('utf-8')) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值