redis-persist上线
九月份惨不忍睹,因为代码质量不够高,直接被Boss喷成了筛子。被反复教育说要高质量的代码,要可维护、高性能……
幸而,最后一周终于在紧张的加班中,灰度上线redis-land-go了,项目也改名为redis-persist,github在此。
之前实现的,是redis到leveldb,以及skynet从leveldb中读取数据的接口。最后一周添加的,是SA同事可能会用到的功能。主要是:
- dump
- restore_one
- restore_all
- sync
- sync_all
- count
- diff
- keys
- check_all
- fast_check
这些指令可以分成三类,一类是从redis拷贝到leveldb的,比如sync开头的指令;一类是从leveldb拷贝到redis中的,典型如restore开头的指令;剩下的是用来检验两侧数据的,比如检查一个玩家数据的diff,检查数量的count,还有列出leveldb部分玩家uid的keys
这里的fast_check是针对当前玩家存储做的一个特殊优化,在leveldb中用前缀分出了一个特殊的key表,里面是玩家uid-玩家数据version的key-value对。这个表足够小,可以整个放进内存里,所以对于只需比对数据版本号的情况,能够在极短时间完成。redis和leveldb通过网络连接,不在一台机器上时,12w数据不超过1分钟。
同时,折腾这套工具的时候,还顺便看了一下leveldb的结构。leveldb有个sstable的概念,sstable就是内存里一块按key有序排列好的表,可以改动的时候叫memtable,准备写入磁盘的是另一个表,叫sstable。当数据比较少的时候,层级也比较少,具体哪个ldb文件对应哪一段key范围,是记录在MANIFEST里面的。写入的记录,首先记入log里,这是顺序写,所以极快。然后是定期后台整理,将sstable和磁盘上已有的ldb文件合并,使得磁盘的数据越来越有序。
redis-persist上线的更多相关文章
- Redis 数据库入门指南
Redis 是一个开源数据库,它使用内存数据结构存储,可作为数据库.缓存和消息代理使用.Redis 支持丰富的数据结构,有:字符串(Strings).哈希(Hashs).列表(Lists).集合(Se ...
- Redis 学习笔记续
Redis - 数据类型 Redis支持5种类型的数据类型,它描述如下的: 字符串 Redis字符串是字节序列.Redis字符串是二进制安全的,这意味着他们有一个已知的长度没有任何特殊字符终止,所以你 ...
- redis linux 安装及jedis连接测试
一.安装配置 1:下载redis下载地址 http://code.google.com/p/redis/downloads/list推荐下载redis-1.2.6.tar.gz,之前这个版本同事已经有 ...
- Redis附加功能之键过期功能
一.键过期功能的相关命令 二.设置生存时间 Redis 提供了两个命令来设置键的生存时间(TTL,time to live),它们分别是: 如果给定的键不存在,那么 EXPIRE 和 PEXPIRE ...
- java下的redis操作
Java操作redis(增删改查) Java代码 package sgh.main.powersite; import java.util.ArrayList; import java.util.Ha ...
- Redis学习笔记(十)——过期时间、访问限制与缓存
http://irfen.me/redis-learn-10-time-expire-limit-cache/ 过期时间 之前应该提到过 redis 的特性之一是可以设置键的超时时间.命令是expir ...
- "Redis客户端连接数一直降不下来"的有关问题解决
[线上问题] "Redis客户端连接数一直降不下来"的问题解决 前段时间,上线了新的 Redis缓存(Cache)服务,准备替换掉 Memcached. 为什么要将 Memcach ...
- Jedis操作redis(转)
package org.jzkangta.jedis; import java.util.ArrayList; import java.util.HashMap; import java.util.I ...
- Redis实战 - 4.Key
Redis 键(key) Redis 键命令用于管理 redis 的键. DEL key 该命令用于在 key 存在时删除 key. 127.0.0.1:6379> set w3ckey red ...
- redis对键进行的相关操作
redis对键操作的相关命令以及如何在python使用这些命令 redis对键操作的命令: 命令 语法 概述 返回值 Redis DEL 命令 del key [key ...] 该命令用于在 key ...
随机推荐
- Http 状态码对照表
1xx 消息 1. 100 Continue 2. 101 Switching Protocol 3. 102 Processing 2xx 成功 1. 200 OK ...
- Shiro Security
手动创建shiro Filter的java代码 // Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecu ...
- zoj3228Searching the String(ac自动机)
链接 这个题把病毒分为了两种,一种包含可以覆盖,另一种不可以,需要分别求出包含他们的个数,可以把两种都建在一颗tire树上,在最后求得时候判断一下当前节点是属于哪种字符串,如果是不包含的需要判断一下p ...
- JQuery_进阶选择器
在简单选择器外,还有一些进阶的选择器方便我们更精准的选择元素. 1.群组选择器 可以将相同的样式合并 <script type="text/javascript" src=& ...
- [Java基础]循环结构3
[Java基础]循环结构3 break 与 continue 中断循环... /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:BreakTest.java 编写时间:2016/6 ...
- Eclipse 最全快捷键
英文的
- break和continue的区别
break是结束整个循环体,continue是结束单次循环
- jquery打字机效果
html代码 <div id="box"> <div id="content"> <div id="code" ...
- tiny_cnn 阅读(1)
从今天起, 我会每天把阅读tiny_cnn的阅读心得提交到博客园中希望大家在这个平台上可以多多交流: 关于如果阅读代码? 抓住重点,忽略细节 首先打开从github上下载的文件: 通过csdn和网上搜 ...
- 读javascript高级程序设计15-Ajax,CORS,JSONP,Img Ping
平时用惯了jQuery.ajax之类的方法,却时常忽略了它背后的实现,本文是学习了AJAX基础及几种跨域解决方案之后的一些收获. 一.AJAX——XMLHttpRequest 谈起Ajax我们都很熟悉 ...