• 2013-01-11

    SSDB(LevelDB 服务器) PPT

    Views: 38945 | No Comments

    Posted by ideawu at 2013-01-11 23:34:44 Tags: , , ,
  • 2013-01-10

    SSDB与Redis命令对比

    Views: 45822 | 9 Comments
    Redis SSDB
    kv get get
    set set
    del del
    incr/incrBy incr
    decr/decrBy decr
    getMultiple multi_get
    setMultiple multi_set
    del(multiple) multi_del
    keys scan(for kv type only)


    Redis SSDB
    hashmap hget hget
    hset hset
    hdel hdel
    hIncrBy hincr
    hDecrBy hdecr
    hKeys hkeys
    hVals hscan
    hMGet multi_hget
    hMSet multi_hset
    hLen hsize


    Redis SSDB
    zset zScore zget
    zAdd zset
    zRem zdel
    zRange zrange/zscan
    zRangeByScore zscan
    zIncrBy zincr
    zDecrBy zdecr
    zCount
    zCard zsize
    Posted by ideawu at 2013-01-10 18:41:49 Tags: , , ,
  • 2012-10-30

    基于Redis构建系统的经验和教训

    Views: 42678 | 1 Comment

    Redis 是一个非常快速和强大的 Key-Value 存储(持久化)系统, 相对于一般的 NoSQL 存储系统, 它最大的特点是支持丰富的数据结构. 特别是其 zset(sorted set)数据结构, 堪称表达能力最强的结构之一(其它强大的数据结构如 sorted hashmap), 可以直接地表达业务逻辑.

    拿一个 Messaging(消息传递)系统来举例, 收件箱发件箱这样的业务逻辑直接用 zset 存储即可, 因为 zset 的每一个元素都有一个用于排序的权重值, 可以非常方便快速地地进行插入和删除操作. 如果使用纯粹的 KV 系统, 存储列表等非字符串结构的数据将是无尽的痛苦.

    由于 Redis 本身的限制, 它所能处理的数据必须完全放在内存中, 而硬盘上的数据是内存数据的一个镜像, 所以, 限制了它的容量不能超过内存的容量(VM 模式无实际意义, 已在新版本中去除). 当前, 服务器的内存以 32G 为普遍情况, 96G 算较好, 如果一个系统要存储 1T 的数据, 那么必须用上 10 台服务器, 硬件成本非常高 -- 且先不谈由此面临的软件的架构改动. 当前, 1T 的数据只能算零头, 对于一个100万活跃用户的系统, 平均每人每天产生 1K 数据, 便需要 1G 的存储空间, 这仅相当于每个用户每天只发10条微博或者10条聊天信息, 真正流行的系统将远远超过这个数据规模.
    Continue reading »

    Posted by ideawu at 2012-10-30 00:59:04 Tags: , ,
  • 2012-07-17

    Redis 导数据的 PHP 脚本

    Views: 18950 | 2 Comments

    Redis 本身没提供方便的导数据工具, 比如从某个 db 导数据到另一个 db, 只能自己写脚本了. redis copy.

    <?php
    
    $from = '127.0.0.1:6200/6';
    $to = '127.0.0.1:6200/8';
    
    $from_redis = redis_init($from);
    $to_redis = redis_init($to);
    
    
    $keys = $from_redis->keys('*');
    $count = 0;
    $total = count($keys);
    foreach($keys as $key){
        if(++$count % 100 == 1){
            echo "$count/$total\n";
        }
        $type = $from_redis->type($key);
        switch($type){
            case Redis::REDIS_STRING:
                $val = $from_redis->get($key);
                $to_redis->set($key, $val);
                break;
            case Redis::REDIS_LIST:
                $list = $from_redis->lRange($key, 0, -1);
                foreach($list as $val){
                    $to_redis->rPush($key, $val);
                }
                break;
            case Redis::REDIS_HASH:
                $hash = $from_redis->hGetAll($key);
                $to_redis->hMSet($key, $hash);
                break;
            case Redis::REDIS_ZSET:
                $zset = $from_redis->zRange($key, 0, -1, true);
                foreach($zset as $val=>$score){
                    $to_redis->zAdd($key, $score, $val);
                }
                break;
        }
    }
    
    
    function redis_init($conf){
        $redis = new Redis();
        preg_match('/^([^:]+)(:[0-9]+)?\\/(.+)?/', $conf, $ms);
        $host = $ms[1];
        $port = trim($ms[2], ':');
        $db = $ms[3];
        $redis->connect($host, $port, 1000);
        $redis->select($db);
        return $redis;
    }
    
    Posted by ideawu at 2012-07-17 12:10:52 Tags:
  • 2012-03-23

    Redis被bgsave和bgrewriteaof阻塞的解决方法

    Views: 63767 | No Comments

    Redis 是一个性能非常高效的内存 Key-Value 存储服务, 同时它还具有两个非常重要的特性: 1. 持久化; 2. Value 数据结构. 这两个特性让它在不少场景轻松击败了 Memcached 和 Casandra 等.

    Redis 的持久化在两种方式: Snapshotting(快照) 和 Append-only file(aof). 在一个采用了 aof 模式的 Redis 服务器上, 当执行 bgrewriteaof 对 aof 进行归并优化时, 出现了 Redis 被阻塞的问题, 此时, Redis 无法提供任何读取和写入操作.

    按字面理解, bgrewriteaof 是在后台进行操作, 不应该影响 Redis 的正常服务. 原理也确实是这样的, Redis 首先 fork 一个子进程, 并在该子进程里进行归并和写持久化存储设备(如硬盘)的. 按照正常逻辑, 在一台多核的机器上, 即使子进程占满 CPU 和硬盘, 也不应该导致 Redis 服务阻塞啊!

    其实, 问题就出在硬盘上.

    Continue reading »

    Posted by ideawu at 2012-03-23 13:50:34 Tags: , , , , , , ,
|<<<123>>>| 3/3 Pages, 17 Results.