首页 / RUBY / ruby redis的集群管理器
ruby redis的集群管理器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ruby redis的集群管理器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3323字,纯文字阅读大概需要5分钟。
内容图文
#========================================================================================== # => redis集群管理器 #========================================================================================== class CacheGroupManager attr_reader :redis_groups # redis 集群 attr_reader :redis_group_keys # redis 集群hash组 def initialize(cache_addrs) @redis_groups = {} @redis_group_keys = [] for addr in cache_addrs create_cache_node(addr) end @redis_group_keys = @redis_groups.keys.sort end #========================================================================================== # => 创建节点 #========================================================================================== def create_cache_node(addr) ip = addr.split(":")[0] port = addr.split(":")[1].to_i redis = Redis.new( :host=> ip, :port => port); # 创建虚拟节点 for i in 0..2 hash = HashCode.hash(addr + "#{i}") @redis_groups[hash] = redis end end #========================================================================================== # => 找到最近的cache点 #========================================================================================== def find_near_cache(hash) start = find(@redis_group_keys, hash, 0, @redis_group_keys.size - 1) for i in start...@redis_group_keys.size if(@redis_group_keys[i] >= hash) return @redis_groups[@redis_group_keys[i]] end end # 如果找了一轮..都找不到.. return @redis_groups[@redis_group_keys.first] end #========================================================================================== # => 折中找到开始搜寻点 #========================================================================================== def find(keys, v, start, tail) mid = keys[start + tail / 2] if(tail - start == 1) return start end if(tail - start == 0) return start end if(mid > v) find(keys, v, start, tail / 2) elsif mid < v find(keys, v, start + tail / 2, tail) else mid == v return start + tail / 2 end end #========================================================================================== # => 通过key找到cache点 #========================================================================================== def get_cache_from_key(key) hash = HashCode.hash(key) cache = find_near_cache(hash) return cache; end #========================================================================================== # => 自增一个key #========================================================================================== def incr(key) cache = get_cache_from_key(key) return cache.incr(key) end #========================================================================================== # => 设置一个value #========================================================================================== def set(key, value) cache = get_cache_from_key(key) return cache.set(key, value) end #========================================================================================== # => 获取一个vaue #========================================================================================== def get(key) cache = get_cache_from_key(key) return cache.get(key) end end
最近大概的研究了一下一致性hash.
简单点描述就是
key做一次hash
cache也做hash
操作key的时候,根据key的hash找到cache.
以key的hash为起点.找到下一个cache的hash,那个cache就是这个数据要储存的地方
具体参考
http://www.nowamagic.net/librarys/veda/detail/1336
原文:http://blog.csdn.net/frodo_sens/article/details/34899203
内容总结
以上是互联网集市为您收集整理的ruby redis的集群管理器全部内容,希望文章能够帮你解决ruby redis的集群管理器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。