redis脚本实现分布式锁

redis被大量用在分布式的环境中,自然而然分布式环境下的锁如何解决,立马成为一个问题。例如我们当前的手游项目,服务器端是按业务模块划分服务器的,有应用服,战斗服等,但是这两个vm都有可能同时改变玩家的属性,这如果在同一个vm下面,就很容易加锁,但如果在分布式环境下就没那么容易了,当然利用redis现有的功能也有解决办法,比如redis的脚本。 redis在2.6以后的版本中增加了Lua脚本的功能,可以通过eval命令,直接在RedisServer环境中执行Lua脚本,并且可以在Lua脚本中调用Redis命令。 使用脚本的好处: 1.减少网络开销:可以把一些要批量处理的功能,发在一个脚本里面执…

阅读全文 »

Redis有多耐久还看fsync

redis提供了2中持久化方式,分别是: RDB方式:可以在指定的时间间隔内,生成数据集的时间点快照(point-in-time snapshot) AOF方式:全称(append-only file)AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。Redis 还 可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。 由于rdb方式是时间间隔内生成一次快照,所有它的耐久度是很低的; aof方式的耐久度得看redis多久将数据fsync到磁盘一次,有三种选项: 选项一:每次有新命令追加到 AOF…

阅读全文 »

程序员都应该有一台自己的服务器

我相信很多程序员都和我一样,经常需要和google的一些服务打交道,特别是google的搜索引擎,但是由于国内无法访问,这时候大多数情况下我们都会考虑vpn,通过vpn去浏览国外的网站。这时候我们大多会选择免费的vpn或者收费的vpn; 免费的vpn: 1.可能会面临一些不稳定的因素,可能你刚好要查一个很重要的资料,但是这时候确连接不上 2.不安全,毕竟你的数据是经过别人的服务器 收费的vpn: 1.每个月大概支付20元左右 2.也同样存在不安全的问题 我相信很多程序员也经常有这样的需求,出于爱好做一些简单的app或者游戏,又或者搭建一个自己的个人博客网站,这时候我们需要一台外网服务器,你可能…

阅读全文 »

redis存储对象

redis已经应用相当广泛了,但redis本身并没有直接存储对象的方法,我们可以通过转换对象的方式来存储对象。 大致总结了以下几种方案来存储对象: 方案一:序列化对象为二进制 使用redis的接口: 至于序列化方式,我们有很多种选择,比如:Java serialize,Protobuf,或者自己手动序列化都行 方案二:序列化对象为字符串 使用redis的接口: 序列化为字符串,我们也有很多选择:Json(Jackson,FastJson),Xml等方式 方案三:转换对象为Map 使用redis的接口: 将对象转成一个map: 将map转成java对象: 这种方式有一个优势:在更新对象的时候不需…

阅读全文 »

redis集群方案

单机 redis最主要的适用场景:少量数据存储,高速读写访问,数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能。 分布式 随着用户量的增长,数据量随之增长,大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,这时候我们需要横向扩展,多台主机共同提供服务,既分布多个redis协同工作。大致有如下几种集群方案: 方案一:Redis官方集群方案Redis Cluster Redis Cluster由3.0版本正式推出,是一种服务器sharding技术,对客户端来说是完全透明的。 Redis Cluster中,Sharding采用slot(槽)的概念,一共分成1638…

阅读全文 »

Excel2DB

这是一款将excel转成二进制文件的软件,excel对非技术人员来说很容易填写数据,但是excel对程序来说并不是很友好; 一个常用的环境是在游戏开发中,经常有大量的原型数据,而原型数据经常都是通过excel进行编写,此项目将excel转成ndb文件(二进制文件),然后客户端和服务器可以按照指定的格式读取,极大的减少了客户端包体的大小。 源码地址:https://github.com/ksfzhaohui/excel2db

阅读全文 »

netty自定义协议

java越来越多的用于服务器端的开发,少不了的要与客户端,服务器内部其他模块进行通信,netty帮我们实现了底层的通信,也实现了对一些常用协议的支持,比如http等,但有时候我们需要保证数据的及时性,安全性,比如游戏开发,及时性我们可能需要尽可能的控制协议包的大小,这时候我们可以自定义协议。 总体将一个协议分为:协议头和协议数据 协议头: 协议数据:就是我们需要的业务对象,后面写的编解码器就是帮助我们 业务对象->二进制数据 编码 二进制对象-> 业务对象 解码 header对象 消息对象: header解码器: header编码器: 抽象解码器: 抽象编码器: 抽象方法中提供的transfo…

阅读全文 »