本文来自网易云社区 作者:李勇 背景 网易美学首页除了banner和四个固定位,大部分都是通过算法推荐获取的内容,其中的内容包括心得.合辑.视频及问答等.现在需要实现的是当推荐内容在用户屏幕曝光后(即用户一个屏幕内的内容),那么这些内容在一定时间内,如两周内都不能再出现,因此需要对这些已经曝光过的内容进行过滤.首页内容如下图所示: 实现方案 目前的实现方案是客户端对用户曝光的内容进行采集,然后通过DA的SDK将这些数据发送到Kafka Broker,然后再通过Kafka消费者去消费并解析这些数据…
分布式锁是在分布式环境下(多个JVM进程)控制多个客户端对某一资源的同步访问的一种实现,与之相对应的是线程锁,线程锁控制的是同一个JVM进程内多个线程之间的同步.分布式锁的一般实现方法是在应用服务器之外通过一个共享的存储服务器存储锁资源,同一时刻只有一个客户端能占有锁资源来完成.通常有基于Zookeeper,Redis,或数据库三种实现形式.本文介绍基于Redis的实现方案. 要求 基于Redis实现分布式锁需要满足如下几点要求: 在分布式集群中,被分布式锁控制的方法或代码段同一时刻只能被一个客…
实例代码地址,请前往:https://gitee.com/GuoqingLee/distributed-seckill redis官方文档地址,请前往:http://www.redis.cn/topics/distlock.html 前言 关于分布式锁的实现,目前主流方案有以下三类: 1.基于数据库的乐观锁: 2.基于redis实现的锁服务: 3.基于zookeeper的实现: 网上关于怎么实现redis的分布式锁,一搜一大把的文章,有写的比较好的,也有明显存在缺陷的,非常容易误导初入这一块的初…
在电商项目中,经常有秒杀这样的活动促销,在并发访问下,很容易出现上述问题.如果在库存操作上,加锁就可以避免库存卖超的问题.分布式锁使分布式系统之间同步访问共享资源的一种方式 基于redis实现分布式锁的原理: redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系.其次Redis提供一些命令SETNX,GETSET,这些命令是原子操作,利用这些特性, 可以很充分的实现分布式锁.SETNX,GETSET 命令如下: SETNX key val…
目前,比较火的nosql数据库,如MongoDB,Redis,Riak都提供了类似incr原子行操作. 下面是PHP版的一种实现方式: <?php /** * 基于Redis的全局订单号id * * @author liujingyu * @copyright liujingyu, 11 八月, 2014 **/ class OrdersnumAction { private $_r; private $_host; private $_port; private $_passwd; priva…
0背景介绍 随着机器个数的增加.各种服务.各种组件的扩容.开发人员的递增,日志的运维问题是日渐尖锐.通常,日志都是存储在服务运行的本地机器上,使用脚本来管理,一般非压缩日志保留最近三天,压缩保留最近1个月,其它直接删除或迁移到日志服务器上. 运维会将这些日志mount到远程的日志服务器上,然后开发人员使用运维分配的账号登陆堡垒机器跳转到日志服务器上查看不同项目不同机器的日志. 下图是日志服务器某一个项目的所有ip日志目录截图,相信大家传统的查看日志类似这样. 如果你要查阅不同的项目,项目机器数十…
公众号链接 最高级的红酒,一定要掺上雪碧才好喝. 基于这样的品味,我设计出了一套在经典nosql数据库redis上实现SQL引擎的方法.既然redis号称nosql,而我偏要把SQL加到redis上,于是这个技术方案取名为[YesSql]. 1.在redis上实现SQL查询的技术基础 redis上可以执行lua.整个SQL引擎就是在lua上解析SQL语句,执行,并返回结果. lua有很好的正则表达式引擎,因此解析SQL语法变得简单. redis提供map, zset这样的数据结构,很容易实现列存…
目前,为了使web能适应大规模的访问,需要实现应用的集群部署.集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解决session的统一来保证无论用户的请求被转发到哪个服务器上都能保证用户的正常使用,即需要实现session的共享机制. 在集群系统下实现session统一的有如下几种方案:(1) 应用服务器间的session复制共享(如tomcat自带session共享)(2) 基于cache DB缓存的session共享 一.应用服务器间…
什么是锁 今天要谈的是如何在分布式环境下实现一个全局锁,在开始之前先说说非分布式下的锁: 单机 – 单进程程序使用互斥锁mutex,解决多个线程之间的同步问题 单机 – 多进程程序使用信号量sem,解决多个进程之间的同步问题 这里同步的意思很简单:某个运行者,用某个工具,保障某段代码,独占的运行,直到释放. 分布式锁解决的是 多台机器 – 多个进程 之间的同步问题,因为不同的机器之间mutex/sem无法使用.不过要注意:即便如此,一个进程内多个线程之间仍旧建议使用mutex同步,尽量减少对分布…
前言: 之前写过排行榜的设计和实现, 不同需求其背后的架构和设计模型也不一样. 平台差异, 有的立足于游戏平台, 为多个应用提供服务, 有的仅限于单个游戏.排名范围差异, 有的面向全局排名, 有的只做朋友圈排名. 实时性差异, 离线统计有之, 实时排名更常见. 不管如何, 本文将结合之前写的网页闯关游戏, 来具体阐述基于redis排行榜的实战过程. 相关文章系列: 之前写过两篇关于排行榜的文章, 不过那是针对游戏平台(类似微信, 手Q等)而言的. 每个用户都有自己的排行榜, 不是全局性的. •…