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 ...
随机推荐
- Populating Tree Item With Record Group In Oracle Forms
The below plsql program unit could be used in a WHEN-NEW-FORM-INSTANCE trigger to initially populate ...
- z-index 应用简单总结
做过页面布局的同学对z-index属性应该是很熟悉了,z-index是针对网页显示中的一个特殊属性.因为显示器是显示的图案是一个二维平面,拥有x轴和y轴来表示位置属性.为了表示三维立体的概念如显示元素 ...
- implicit operator
class Digit { public Digit(double d) { val = d; } public double val; // ...other members // User-def ...
- equals
package abstractClasses; import java.time.LocalDate; /** * Created by xkfx on 2016/12/20. */ public ...
- python中的浅拷贝与赋值不同
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...
- 与SQL注入第一次相遇
sql注入的含义sql注入是将代码插入(拼接)到应用(用户)的输入参数中, 之后再将这些参数传递给后台的SQL服务器加以解析并执行的攻击, 总结起来就是攻击者将恶意代码拼接到sql语句并加以执行从而得 ...
- oracle PROCEDURE AS IS区别
在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别,在视图(VIEW)中只能用 ,在游标(CURSOR)中只能用IS不能用AS.
- 深入了解css的行高Line Height属性
什么是行间距? 古时候我们使用印刷机来出来文字.印刷出来的每个字,都位于独立的一个块中. 行间距,即传说中控制两行文字垂直距离的东东.在CSS中,line-height被用来控制行与行之间垂直距离. ...
- hdu 5877/ 2016 ACM/ICPC Dalian Online 1010 Weak Pair
题目链接 分析:树上的节点祖先与儿子的关系,一般就会想到dfs序.正解就是对树先进行dfs序排列,再将问题转化到树状数组统计个数.应该把节点按照权值从大到小排序,这样对于,就是从小到大的顺序.这样更新 ...
- MongoDB整库备份与还原以及单个collection备份、恢复方法
mongodb数据库维护离不开必要的备份.恢复操作,而且一般不会出错,所以我们在使用的时候大部分时候使用备份和恢复操作就可以了 mongodump.exe备份的原理是通过一次查询获取当前服务器快照 ...