新浪微博开放平台中的 redis 实践
- 格式:pdf
- 大小:1.20 MB
- 文档页数:55
redis核心原理和应用实践pdfRedis是一款高性能的键值存储系统,它采用了内存数据库的方式,数据存储在内存中,具备快速读写的特点。
下面是Redis 的核心原理和应用实践的介绍:1.数据结构:Redis支持多种数据结构,包括字符串、列表、哈希、集合、有序集合等。
这些数据结构都经过优化,以提供高效的操作和查询。
2.内存存储:Redis的数据存储在内存中,这使得它能够快速读写数据。
同时,为了保证数据的持久性,Redis还支持将数据定期或者在特定条件下写入磁盘。
3.单线程模型:Redis采用单线程模型,所有的请求都由一个线程处理。
这样可以避免多线程带来的锁竞争和上下文切换开销,提高了系统的性能。
4.持久化:Redis支持两种持久化方式,分别是RDB(Redis Database)和AOF(Append Only File)。
RDB方式是将数据库的快照保存到磁盘上,AOF方式是将每条写命令追加到文件末尾。
通过这两种方式,可以在系统重启后恢复数据。
5.发布订阅:Redis支持发布订阅模式,可以将消息发布到指定的频道,然后订阅该频道的客户端可以接收到消息。
这种模式在实现消息队列、实时通知等功能时非常有用。
6.缓存应用:Redis的高性能和丰富的数据结构使其成为一个优秀的缓存解决方案。
通过将热点数据存储在Redis中,可以大大提高系统的性能和响应速度。
7.分布式锁:Redis提供了分布式锁的实现,可以避免多个客户端同时对同一资源进行操作。
通过使用Redis的原子操作,可以实现可靠的分布式锁。
8.计数器和排行榜:Redis支持自增和自减操作,可以用来实现计数器和排行榜等功能。
这在统计和排名相关的场景中非常有用。
总之,Redis作为一个高性能的键值存储系统,具备了很多强大的特性和应用场景。
它不仅可以用作缓存解决方案,还可以实现发布订阅、分布式锁、计数器等功能。
对于需要快速读写和高并发的场景,Redis是一个非常好的选择。
redis⾼并发处理例⼦发帖、发微博、点赞、评论等这些操作很频繁的动作如果并发量⼩,直接⼊库是最简单的但是并发量⼀⼤,数据库肯定扛不住,这时可采取延迟发布:先将发布动作保存在队列⾥,后台进程循环获取再⼊库模拟发布微博先进⼊redis队列weibo_redis.php<?php//此处需要安装phpredis扩展$redis = new Redis();$redis->connect('127.0.0.1', 6379);$redis->auth("php001");//连接redis$web_info= array('uid' => $_REQUEST[uid], //发布者id'username' => $_REQUEST[username],//发布者⽤户名'content' =>$_REQUEST[content],//微博内容);//将数组转成json来存储$list = json_encode($web_info);//lpush向KEY对应的头部添加⼀个字符串元素$redis->lpush('weibo_lists',$list);$redis->close();var_dump($list);>模拟后台进程从redis队列获取微博Pdodb.class.php<?phpclass Pdodb{public function post($uid='',$username='',$content=''){try{$dsn = "mysql:localhost;dbname=localhost;dbname=big";$db = new PDO($dsn,'big','123456');$db->exec("SET NAMES UTF8");$sql ="insert into ih_weibo(uid,username,content)values('$uid','$username','$content')";//echo $sql;$db->exec($sql);}catch(PDOException $e){echo $e->getMessage();}}}weibo_mysql.php<?phprequire_once 'Pdodb.class.php';set_time_limit(0); // 取消脚本运⾏时间的超时上限$pdo = new Pdodb();$redis = new Redis();$redis->connect('127.0.0.1', 6379);while (true) {//返回的列表的⼤⼩。
全⾯解读NoSQL数据库Redis的核⼼技术与应⽤实践互联⽹和Web的蓬勃发展正在改变着我们的世界,随着互联⽹的不断发展和壮⼤,企业数据规模越来越⼤,并发量越来越⾼,关系数据库⽆法应对新的负载压⼒,随着Hadoop,Cassandra,MongoDB,Redis等NoSQL数据库的兴起,因其良好的可扩展性,弱化数据库的设计范式,弱化⼀致性要求,在解决海量数据和⾼并发的问题上明显优于关系型数据库。
因⽽很快⼴泛应⽤于互联⽹业务中。
Redis作为基于K-V的NoSQL数据库,具有⾼性能、丰富的数据结构、持久化、⾼可⽤、分布式、⽀持复制等特性。
从09年⾄今,经历8年多的锤炼,已经⾮常稳定,并且得到业界的⼴泛认可和使⽤,同时社区⾮常活跃。
团队⼯作重⼼微博研发中⼼数据库部门主要负责全微博平台的后端资源的托管和运维,涉及的资源种类⽐较多,数据量⽐较⼤,业务线和资源实例数⽬也是⾮常之多,并发量巨⼤。
⽽这些正是微博这种体量的公司应该具有的,微博作为当今中⽂社交媒体的第⼀品牌,拥有超过3.76亿的⽉活⽤户,也是当前社会热点事件传播的最主要平台,其中包括但不限制于⼤型活动(如:⾥约奥运会、朱⽇和沙场⼤点兵等),春晚,明星动态(如:王宝强离婚事件、⼥排夺冠、乔任梁去世、⽩百合出轨、T FBOYS⽣⽇、⿅晗关晓彤CP等)。
⽽热点事件往往具有不可预见性和突发性,并且伴随着极短时间内流量的数倍增长,甚⾄更多,有时持续时间较长。
如何快速应对突发流量的冲击,确保线上服务的稳定性,是⼀个⾮常巨⼤的挑战和有意义的事情。
为了达到这⼀⽬标,需要有⼀个完善的,稳定可靠的,健壮的数据库运维体系来提供⽀撑和管理,所以我们团队也是在领导的指导下,有⽬标、有计划的开展⼀些数据库⾃动化运维平台的建设⼯作。
重⼤的变化与核⼼变化Redis的版本号命名规则借鉴了Linux的⽅式,版本号第⼆位如果是奇数,则为⾮稳定版本,如果为偶数,则为稳定版本。
稳定版本的⼀些主要改进吧:Redis2.61)键的过期时间⽀持毫秒2)从节点提供只读功能3)服务端⽀持Lua脚本4)放开客户端连接数的硬编码限制5)去掉虚拟内存相关功能等Redis2.81)完善主从复制功能,实现增量复制2)Redis设置明显的进程名,在系统中ps命令即可查看3)发布/订阅添加pub/sub命令4)Redis Sentinel第⼆版发布,较Redis 2.6更加完善,可以线上使⽤5)可以通过config set命令设置maxclients等Redis3.01)推出Redis的分布式集群 Redis Cluster2)全新的embedded string对象编码结果,优化⼩对象的内存访问,在特定的⼯作负载下能⼤幅度提升性能3)LRU算法提升4)config set 设置maxmemory的时候可以设置不⽤的单位5)新的Client pause命令,在指定时间内停⽌处理客户端请求等Redis3.21)添加GEO功能2)新的List编码类型quicklist3)SDS在速度和节省空间上都做了优化4)Lua脚本功能增强5)新的RDB格式,仍兼容旧版RDB,同时加载速度上也有提升6)Cluster nodes命令加速等在Redis4.0版本上,我认为最核⼼的功能应该是⽀持了module,这极⼤的丰富的Redis的功能,使得许多Redis本⾝不具有的,第三⽅开发者拓展的功能也能加载到Redis中当⼀个功能进⾏使⽤,⽐如RediSearch、ReJSON、Redis-ML等。