zoukankan      html  css  js  c++  java
  • 把leveldb嵌入到redis.实现真正的数据持久存储

    目前最新版RedisStorage 是基于 redis 2.6.2基础上,加上 leveldb存储引擎。 这个项目是源于 公司项目的passport 用户认证改造。公司一个项目运行了N年。积累了几千万用户,并且每天不断的高速增长中。原有的mysql分表模式已经不适合。所以寻找nosql的解决方案。经过测试目前流行的NOSQL。 最终选中了leveldb. Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持十亿级别的数据量了。 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。特别是LSM算法。LevelDB 是单进程的服务,性能非常之高,在一台4个Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。.(leveldb也应用在淘宝上).可惜leveldb只是个存储引擎,没有一个好的服务端。经过几天折腾。我把leveldb加到redis里去。 这样既可以依托redis的高效稳定,又可以不用另起炉灶。一举两得。 现在redis 也有真正的持久存储功能。


    现在RedisStorage 已经应用在用户库的存储,和用户签到功能上。

    项目地址: https://github.com/qiye/redis-storage

    作者: 七夜
    QQ:    531020471
    QQ群: 62116204(已满)
    QQ群: 154249567 (未满)
    email: lijinxing@gmail.com
    blog:  www.cellphp.com 

    redis new cmd

    1. ds_set name qiye
    2. ds_get name
    3. ds_del name 
    4. ds_mset key value age 20
    5. ds_mget key age
    6. ds_del key age
    复制代码

    php code

    1. include "redis.php";
    2. $db = new redis("127.0.0.1", 6379);
    3. $rc = $db->connect();
    4. if(!$rc)
    5. {
    6.    echo "can not connect redis server ";
    7.    exit;
    8. }  
    9. $data = $db->multi(array('DEL test', 'SET test 1', 'GET test'));
    10. print_r($data);
    11. echo $db->set("name", "qiye");
    12. echo $db->get("name");
    13. $db->ds_set("name", "qiye");
    14. $db->ds_set("age", "20");
    15. $data = $db->ds_mget( "name", "age");
    16. print_r($data);
    复制代码

    可能很多人都不知道RedisStorage 和redis 之间的区别。

    redis的存储是存储在内存里的,  RedisStorage可以选择存储在磁盘里. 
    当redis崩溃的时候。redis 会从rdb或者aof文件重新读取数据到内存里。如果数据量很大的话。这个初始化是相当的慢。(这就是 redis的假数据持久)。 
    RedisStorage 是直接存储在 磁盘里。所以不存在这个数据重加载问题。

    还有redis 存储是受物理内存限制的,比如你有几千万或者几亿的数据。如果存储在redis里。那得需要多巨大的内存了。使用RedisStorage 就没有物理内存限制这个问题。最大可以存储十亿数据。

    最后说一下淘宝的Tair ldb项目。同样基于leveldb 存储引擎。 广泛的用在 登录淘宝、查看商品详情页面、在淘江湖和好友“捣浆糊”等。 说明leveldb 数据引擎的可靠性和海量数据存储。 但是开源版的Tair ldb 并不好用。所以自己写了个基于 leveldb的 server端。

  • 相关阅读:
    [No000037]操作系统Operating Systems操作系统历史与硬件概况History of OS & Summaries!
    [No000036]操作系统Operating Systems系统调用的实现System_Call
    [No000035]操作系统Operating System之OS Interface操作系统接口
    [No000034]知乎-长期接收碎片化知识有什么弊端?
    [No000033]码农网-如何锻炼出最牛程序员的编码套路
    [No000032]程序员的年龄天花板
    [No000031]操作系统 Operating Systems 之Open the OS!
    [No000030]程序员节发点别的:中国教育整个把人脑子搞坏了-易中天
    [No00002F]3步,教你如何分解需求
    [No00002E]关于大数据,你不知道的6个迷思
  • 原文地址:https://www.cnblogs.com/qqflying/p/9190922.html
Copyright © 2011-2022 走看看