感叹自己拿来这么大的激情呀,前段时间对分布式的raft感兴趣,这两天又着迷于golang。 听起来是不是有装逼的成分?  勿喷 …


该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。

http://xiaorui.cc/?p=2990

今天一直在封闭式开发,针对电商接入SuperSpide适配兼容性进行调整。 中间跟同事杨博探讨了一个问题,原由是因为我们现在的服务对于redis特别的依赖,所以从单机的redis迁入到redis cluster集群中。

这redis集群属于基础组件,很多项目都在使用者集群,如果不进行合理的约束很好可能造成key的重复覆盖。 

那么如何不让这些key重复?

我们可以这样操作,在每个key前面加入前缀。 伪代码: redis_client.set(key + prefix_str, value)

但是这有一个问题,你要把你用的那些redis命令都封装一下? 这是个方法,但其实有更漂亮的实现方式,就是利用python的魔法函数、自省模式解决这类问题。 


只要理解了python的那几个魔法函数( __getattr__ 、__call__),就可以明白上面的python代码了。


1.    当访问不存在的函数时会访问__getattr__ ,他就好像是一个异常处理函数. 
2.    每次通过实例访问属性时,都会经过__getattribute__函数。而当属性不存在时,仍然会触发__getattribute__函数.

我们可以基于这方式实现一致性哈希负载均衡。现在市面上比较出名的redis一致性hash代理是redis twemproxy,但对于redis client来说多了一层的proxy,相当于多了两次网络io消耗。

说实话我不是很喜欢这样的运作方式,更倾向于把一致性哈希放到客户端搞,像redis cluster client那样自己做路由选择,另外还会缓存cache key与主机的关系。


暂时没有时间,等过段时间把代码整理下放到github上。http://github.com/rfyiamcool



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

使用redis-py的两个类Redis和StrictRedis时遇到的坑

前言:       今天产品经理说,有几个队列排序的功能不能用了。对比了下以前的代码查到了一个原因,这个比较的坑,总结起来也是自己没好...

阅读全文

Python项目中用到的redis经验及数据类型

先感叹下,学东西一定要活学活用!   我用redis也有几年的历史了,今个才想到把集合可以当python list用。  最近做了几个项目都掺杂了re...

阅读全文

使用Tornado-Redis 让你的redis访问非堵塞

Tornado-Redis vs Redis-py 一个配合tornado后,可以做非堵塞模块,另一个是python官方推荐的redis模块。 tornado-redis官方的例子 ...

阅读全文