永发信息网

怎样用 Redis 缓存微博的评论列表

答案:3  悬赏:50  手机版
解决时间 2021-02-09 04:07
怎样用 Redis 缓存微博的评论列表
最佳答案
Redis 在新浪微博中的应用
Redis简介
1. 支持5种数据结构
支持strings, hashes, lists, sets, sorted sets
string是很好的存储方式,用来做计数存储。sets用于建立索引库非常棒;
2. K-V 存储 vs K-V 缓存
新浪微博目前使用的98%都是持久化的应用,2%的是缓存,用到了600+服务器
Redis中持久化的应用和非持久化的方式不会差别很大:
非持久化的为8-9万tps,那么持久化在7-8万tps左右;
当使用持久化时,需要考虑到持久化和写性能的配比,也就是要考虑redis使用的内存大小和硬盘写的速率的比例计算;
3. 社区活跃
Redis目前有3万多行代码, 代码写的精简,有很多巧妙的实现,作者有技术洁癖
Redis的社区活跃度很高,这是衡量开源软件质量的重要指标,开源软件的初期一般都没有商业技术服务支持,如果没有活跃社区做支撑,一旦发生问题都无处求救;
Redis基本原理
redis持久化(aof) append online file:
写log(aof), 到一定程度再和内存合并. 追加再追加, 顺序写磁盘, 对性能影响非常小
1. 单实例单进程
Redis使用的是单进程,所以在配置时,一个实例只会用到一个CPU;
在配置时,如果需要让CPU使用率最大化,可以配置Redis实例数对应CPU数, Redis实例数对应端口数(8核Cpu, 8个实例, 8个端口), 以提高并发:
单机测试时, 单条数据在200字节, 测试的结果为8~9万tps;
2. Replication
过程: 数据写到master–>master存储到slave的rdb中–>slave加载rdb到内存。
存储点(save point): 当网络中断了, 连上之后, 继续传.
Master-slave下第一次同步是全传,后面是增量同步;、
3. 数据一致性
长期运行后多个结点之间存在不一致的可能性;
开发两个工具程序:
1.对于数据量大的数据,会周期性的全量检查;
2.实时的检查增量数据,是否具有一致性;
对于主库未及时同步从库导致的不一致,称之为延时问题;
对于一致性要求不是那么严格的场景,我们只需要要保证最终一致性即可;
对于延时问题,需要根据业务场景特点分析,从应用层面增加策略来解决这个问题;
例如:
1.新注册的用户,必须先查询主库;
2.注册成功之后,需要等待3s之后跳转,后台此时就是在做数据同步。

第四:分布式缓存的架构设计
1.架构设计
由于redis是单点,项目中需要使用,必须自己实现分布式。基本架构图如下所示:

2.分布式实现
通过key做一致性哈希,实现key对应redis结点的分布。
一致性哈希的实现:
l hash值计算:通过支持MD5与MurmurHash两种计算方式,默认是采用MurmurHash,高效的hash计算。
l 一致性的实现:通过java的TreeMap来模拟环状结构,实现均匀分布
3.client的选择
对于jedis修改的主要是分区模块的修改,使其支持了跟据BufferKey进行分区,跟据不同的redis结点信息,可以初始化不同的ShardInfo,同时也修改了JedisPool的底层实现,使其连接pool池支持跟据key,value的构造方法,跟据不同ShardInfos,创建不同的jedis连接客户端,达到分区的效果,供应用层调用
4.模块的说明
l 脏数据处理模块,处理失败执行的缓存操作。
l 屏蔽监控模块,对于jedis操作的异常监控,当某结点出现异常可控制redis结点的切除等操作。
整个分布式模块通过hornetq,来切除异常redis结点。对于新结点的增加,也可以通过reload方法实现增加。(此模块对于新增结点也可以很方便实现)
对于以上分布式架构的实现满足了项目的需求。另外使用中对于一些比较重要用途的缓存数据可以单独设置一些redis结点,设定特定的优先级。另外对于缓存接口的设计,也可以跟据需求,实现基本接口与一些特殊逻辑接口。对于cas相关操作,以及一些事物操作可以通过其watch机制来实现。(参考我以前写的redis事物介绍)
全部回答
直接用hash存,id content根据需求,自己控制缓存的field,评论时写redis缓存,修改、删除先操作缓存,将数据库修改、删除丢给消息队列处理。实现了异步。
可以使用两个集合分别保存关注我(gzw)的,和我关注(wgz)的人的id。 如下,张三zs 李四ls关注我: 127.0.0.1:6379[1]> sadd gzw zs ls (integer) 2 查看下关注我的人都有谁: 127.0.0.1:6379[1]> smembers gzw 1) "ls" 2) "zs" 我关注了韩梅梅hanmeimei,杨幂yangmi 和张三: 127.0.0.1:6379[1]> sadd wgz hanmeimei yangmi zs (integer) 3 查看下我关注的人都有谁: 127.0.0.1:6379[1]> smembers wgz 1) "zs" 2) "yangmi" 3) "hanmeimei"这样就可以保存关注我和我关注的人了。 而且还可以做一些其他的集合计算,比如 还可以查看和我相互关注的人: 127.0.0.1:6379[1]> sinter gzw wgz 1) "zs"不幸啊,韩梅梅和杨幂都没有关注你,只有张三和您互相关注。 当然这两个集合都要加上你的id,这样还可以和指定用户比较下看共同关注的人,很多可以使用redis的集合做的操作。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
谶纬
新帕萨特多少公里清理油路
iPhone4s是iOS6好还是iOS8好?
2017年河北购房商业贷款利率是多少
珍萃坊养生馆地址好找么,我有些事要过去
门禁磁卡打不开手动能打开是什么
花时光地址在哪,我要去那里办事
网上信贷合法吗,合法程序是什么
如何把杨氏之子仿半截蜡烛改写成剧本
兰州银行临夏分行在什么地方啊,我要过去处理
在农行卡对卡转存后,卡上钱不见了怎么办
vm虚拟机要怎样设置才能和主机在同一局域网内
旅游管理专业和导游专业有什么区别?
霸道车门钣金喷漆修复多少钱
发酵后的猪粪可以浇映山红吗
推荐资讯
山背后地址有知道的么?有点事想过去
富景金属有限公司在哪里啊,我有事要去这个地
云梦豫云大酒店地址好找么,我有些事要过去
不发酵的牛粪载草莓好吗
百世汇通从泉州分拨中心到昆明分拔中心要几天
真正的麻辣味怎么调
我男友前段时间由于碰伤了头部,现在已愈合,
明珠旅社这个地址在什么地方,我要处理点事
阜新市医院口腔科怎么样 我要矫正牙 是不是得
石英砂水锈影响沙滤效果吗怎么形成的
方向盘助力球放在什么位置
支付宝交话费未到帐退款成功什么时候到帐
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?