把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
- ds_set name qiye
- ds_get name
- ds_del name
- ds_mset key value age 20
- ds_mget key age
- ds_del key age
复制代码
php code
- include "redis.php";
- $db = new redis("127.0.0.1", 6379);
- $rc = $db->connect();
- if(!$rc)
- {
- echo "can not connect redis server\r\n";
- exit;
- }
- $data = $db->multi(array('DEL test', 'SET test 1', 'GET test'));
- print_r($data);
- echo $db->set("name", "qiye");
- echo $db->get("name");
- $db->ds_set("name", "qiye");
- $db->ds_set("age", "20");
- $data = $db->ds_mget( "name", "age");
- print_r($data);
复制代码
可能很多人都不知道RedisStorage 和redis 之间的区别。
redis的存储是存储在内存里的, RedisStorage可以选择存储在磁盘里.
当redis崩溃的时候。redis 会从rdb或者aof文件重新读取数据到内存里。如果数据量很大的话。这个初始化是相当的慢。(这就是 redis的假数据持久)。
RedisStorage 是直接存储在 磁盘里。所以不存在这个数据重加载问题。
还有redis 存储是受物理内存限制的,比如你有几千万或者几亿的数据。如果存储在redis里。那得需要多巨大的内存了。使用RedisStorage 就没有物理内存限制这个问题。最大可以存储十亿数据。
最后说一下淘宝的Tair ldb项目。同样基于leveldb 存储引擎。 广泛的用在 登录淘宝、查看商品详情页面、在淘江湖和好友“捣浆糊”等。 说明leveldb 数据引擎的可靠性和海量数据存储。 但是开源版的Tair ldb 并不好用。所以自己写了个基于 leveldb的 server端。
把leveldb嵌入到redis.实现真正的数据持久存储的更多相关文章
- Ping CAP CTO、Codis作者谈redis分布式解决方案和分布式KV存储
此文根据[QCON高可用架构群]分享内容,由群内[编辑组]志愿整理,转发请注明出处. 苏东旭,Ping CAP CTO,Codis作者 开源项目Codis的co-author黄东旭,之前在豌豆荚从事i ...
- Redis学习总结(1)——数据持久化
以前研究Redis的时候,很多东西都不太明白,理解得也不太深,现在有时间重新拾起来看看,将一些心得记录下来,希望和大家一起探讨. 一.简介 Redis是一个单线程高可用的Key-Value存储系统,和 ...
- Redis应用场景 及其数据对象 string hash list set sortedset
原文地址:http://www.cnblogs.com/shanyou/archive/2012/09/04/2670972.html Redis开创了一种新的数据存储思路,使用Redis,我们不用在 ...
- Redis持久存储-AOF&RDB
Redis中数据存储模式有2种:cache-only,persistence;cache-only即只做为"缓存"服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在&qu ...
- Redis各种数据结构性能数据对比和性能优化实践
很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. ...
- redis入门(14)redis集群下的数据分区存储
redis入门(10)redis集群下的数据分区存储
- redis增删查改数据Util
目录 (1)需要导入的包 (2)redis配置文件 (3)RedisUtil类 (1)需要导入的包 <dependency> <groupId>org.springframew ...
- [转]在nodejs使用Redis缓存和查询数据及Session持久化(Express)
本文转自:https://blog.csdn.net/wellway/article/details/76176760 在之前的这篇文章 在ExpressJS(NodeJS)中设置二级域名跨域共享Co ...
- redis哈希缓存数据表
redis哈希缓存数据表 REDIS HASH可以用来缓存数据表的数据,以后可以从REDIS内存数据库中读取数据. 从内存中取数,无疑是很快的. var FRedis: IRedisClient; F ...
随机推荐
- Spring boot http, https
1:同时支持http, https配置 参考文献: https://www.cnblogs.com/lianggp/p/8136540.html 2:http 转发到 https配置 @Bean p ...
- Echarts(一)
echarts3.61.<!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="barMain" style="heigh ...
- cordova- cordova-plugin-splashscreen启动页面和图标的设置
https://www.cnblogs.com/a418120186/p/5856371.html
- pandas 笔记
删除: del df["A"] # 原地修改 df.drop("a") # 返回修改后的新对象 df.drop(["a", " ...
- printf 输出% 和 \
在小白第一章后面1.5.3中有仨题: 1 试着把%d中的两个字符(百分号和小写字母d)输出到屏幕. 2 试着把\n中的两个字符(反斜线和小写字母n)输出到屏幕. 3 像 1.2这样需要“特殊方法”才能 ...
- C++复习:函数模板和类模板
前言 C++提供了函数模板(function template).所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表.这个通用函数就称为函数模板.凡是函数体 ...
- RabbitMQ.Net 应用(2)
//生产者 using RabbitMQ.Client; using System; using System.Collections.Generic; using System.Linq; usin ...
- 设置git的http代理
如果git仓库不和本地代码之间不可以直达,这个时候就可以考虑使用git 代理的方式提交代码到git仓库了; git http代理或者https代理,配置在~/.gitconfig 文件下,可以直接编辑 ...
- easyui中的几个问题
easyui中的tree,采用url参数读取json,无法显示.有可能是vs的IIS不支持,$.ajax 原因待测试,有知道的朋友也可以贴代码,我解决的一个办法是 $(function () { $. ...
- SqlServer 中 for xml path 相关
表结构: typename varchar(50) typedesc varchar(50) 示例 SQL 语句: SELECT '{"'+TypeName, '":"' ...