ruby redis的集群管理器
来源:互联网 发布:研究所20升级数据 编辑:程序博客网 时间:2024/06/07 12:16
#==========================================================================================# => redis集群管理器#==========================================================================================class CacheGroupManagerattr_reader :redis_groups# redis 集群attr_reader :redis_group_keys# redis 集群hash组def initialize(cache_addrs)@redis_groups = {}@redis_group_keys = []for addr in cache_addrscreate_cache_node(addr)end@redis_group_keys = @redis_groups.keys.sortend#==========================================================================================# => 创建节点#==========================================================================================def create_cache_node(addr)ip = addr.split(":")[0]port = addr.split(":")[1].to_iredis = Redis.new( :host=> ip, :port => port);# 创建虚拟节点for i in 0..2hash = HashCode.hash(addr + "#{i}")@redis_groups[hash] = redisendend#==========================================================================================# => 找到最近的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.sizeif(@redis_group_keys[i] >= hash)return @redis_groups[@redis_group_keys[i]]endend# 如果找了一轮..都找不到..return @redis_groups[@redis_group_keys.first]end#==========================================================================================# => 折中找到开始搜寻点#==========================================================================================def find(keys, v, start, tail)mid = keys[start + tail / 2]if(tail - start == 1)return startendif(tail - start == 0)return startendif(mid > v)find(keys, v, start, tail / 2)elsif mid < vfind(keys, v, start + tail / 2, tail)else mid == vreturn start + tail / 2endend#==========================================================================================# => 通过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)endend
最近大概的研究了一下一致性hash.
简单点描述就是
key做一次hash
cache也做hash
操作key的时候,根据key的hash找到cache.
以key的hash为起点.找到下一个cache的hash,那个cache就是这个数据要储存的地方
具体参考
http://www.nowamagic.net/librarys/veda/detail/1336
0 0
- ruby redis的集群管理器
- 使用 ruby 搭建带有密码的redis集群
- spark的集群管理器
- redis-ruby集群连接异常错误
- 解决redis集群ruby版本过低
- redis的ruby客户端
- redis集群中的ruby执行文件在哪儿下载
- centos ruby环境安装(redis集群搭建 )
- Redis集群的配置
- 理想的redis集群
- 理想化的Redis 集群
- 理想化的 Redis 集群
- 理想的redis集群
- redis集群的配置
- 理想化的 Redis 集群
- 理想化的 Redis 集群
- 理想化的Redis 集群
- Redis集群的搭建
- vim配置vimrc详解
- LeetCode Distinct Subsequences
- iOS开发——全局响应MotionEvent
- 关于哈希思想的一点简单理解
- 基数排序
- ruby redis的集群管理器
- matlab调用VideoCapture闪退
- 面试笔试整理--------.net方向
- Unix/Linux 那些系统启动后的进程
- make mrproper及mrproper的含义
- android中Camera.PreviewCallback的调用的三个方式
- Python学习(3)有关函数
- Solr 的核心就是搜索
- 7.半虚拟化驱动virtio