全内存的redis用习惯了?使用基于硬盘存储类似redis的nosql产品ssdb呢?
首先说一下背景,在双十一的时候,我们系统接受X宝的订单推送,同事原先的实现方式是使用redis的List作为推送数据的承载,在非大促的场景下,
一切运行正常,内存占用大概3-4G,机器是16G内存。由于提前预计不足,在双十一来临的时候,订单瞬时量达到了平时的10X倍,内存非常吃紧,情况算
是非常紧急了,采取的临时解决方案就是再开一个redis,将程序中的redis地址指向这台新的,重启一下程序,把数据暂时引导过去。
一:分析
redis确实是一个好东西,一个如此强大的内存数据结构服务器,全内存存储,有些场景,恰恰你会死在全内存上,而且相对ssd硬盘来说,内存还是
太小了。内存很便宜,但是内存和ssd比起来很贵,况且有些场景你可能根本不需要使用全内存,使用硬盘也许会更能帮助我们节省成本,你可能会说,现
在业界标准已经差不多是kafka了,有时候我们还需要redis里面的hash,也就是说我现在需要kafka + redis 的一个综合体的产品,这就是本篇和大家说到的
ssdb,当然ssdb和kafka还是不能相提并论的哈,毕竟我是在选择一个轻量级的解决方案。
二:ssdb说明
ssdb是一个使用leveldb做为底层存储的nosql数据库,好处就是可以利用redis中的所有数据结构,而且数据还是基于硬盘的,所以可以存储的数据比
redis大的不要太多,官方文档的说法就是用来替代redis的,而且让你眼前一亮的就是,它对.net还是比较友好的,一个很不错的解决方案,不过成熟度不
如redis,大家前期可以当缓存用用,或者存储一些非关键性数据,节省节省内存空间。目前我在项目中用起来了。
1. 使用hash来存customerID 和customerNick的映射关系。
2. 使用List来承载X宝的订单推送。
三:快速搭建
官方下载:http://ssdb.io, 有一点要注意的就是官方文档明确表示,CentOS7的文件句柄设置问题,建议不要在centos7上进行搭建,具体的说明
可以看看这个:http://ssdb.io/docs/zh_cn/config.html ,大家可以用用centos6.5或者ubantu吧。
1. wget下载和unzip解压。
[root@localhost apps]# wget https://codeload.github.com/ideawu/ssdb/zip/master ---- ::-- https://codeload.github.com/ideawu/ssdb/zip/master Resolving codeload.github.com (codeload.github.com)... 192.30.255.120, 192.30.255.121 Connecting to codeload.github.com (codeload.github.com)|192.30.255.120|:... connected. HTTP request sent, awaiting response... OK Length: (1.5M) [application/zip] Saving to: ‘master’ %[==================================================================>] ,, .3KB/s in 36s -- :: (43.7 KB/s) - ‘master’ saved [/] [root@localhost apps]#unzip master [root@localhost apps]# ls master ssdb-master
2. 使用make对C++代码进行编译
[root@localhost ssdb-master]# make
3. 编译完之后,一泡尿的功夫,这个ssdb-server可执行文件就出来了。
[root@localhost ssdb-master]# ls
api ChangeLog Dockerfile Makefile ssdb.conf tools version
build_config.mk data docs README.md ssdb-server var
build.sh deps LICENSE src ssdb_slave.conf var_slave
4.然后我们把ssdb.conf配置一下
这里面有三个配置要注意下:
<1> work_dir: 存放data和meta的目录,可以在ssdb-master文件夹下mkdir data文件夹。
<2> ip:设为0.0.0.0,让所有的主机都能够连接上来。
<3> port 8888 :这个是默认的ssdbserver端口号,大家可以看情况修改。
完整配置如下:
# ssdb-server config
# MUST indent by TAB! # absolute path, or relative to path of this file, directory must exists
work_dir = /usr/apps/ssdb-master/data
pidfile = ./var/ssdb.pid server:
ip: 0.0.0.0
port:
# bind to public ip
#ip: 0.0.0.0
# format: allow|deny: all|ip_prefix
# multiple allows or denys is supported
#deny: all
#allow: 127.0.0.1
#allow: 192.168
# auth password must be at least characters
#auth: very-strong-password
#readonly: yes
# in ms, to log slowlog with WARN level
#slowlog_timeout: replication:
binlog: yes
# Limit sync speed to *MB/s, -: no limit
sync_speed: -
slaveof:
# to identify a master even if it moved(ip, port changed)
# if set to empty or not defined, ip:port will be used.
#id: svc_2
# sync|mirror, default is sync
#type: sync
#host: localhost
#port: logger:
level: debug
output: log.txt
rotate:
size: leveldb:
# in MB
cache_size:
# in MB
write_buffer_size:
# in MB/s
compaction_speed:
# yes|no
compression: yes
5. 启动ssdb-server,指定一下配置文件,采取静默启动
[root@localhost ssdb-master]# ./ssdb-server ./ssdb.conf -d
ssdb-server 1.9.
Copyright (c) - ssdb.io [root@localhost ssdb-master]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 192.168.122.1: 0.0.0.0:* LISTEN /dnsmasq
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /cupsd
tcp 0.0.0.0:8888 0.0.0.0:* LISTEN /./ssdb-server
tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
tcp6 ::: :::* LISTEN /sshd
tcp6 ::: :::* LISTEN /cupsd
tcp6 ::: :::* LISTEN /master
[root@localhost ssdb-master]#
可以看到,上面的8888端口已经成功开启,没毛病。
四:使用C#客户端
在http://ssdb.io/docs/zh_cn/clients.html上面列出了各个语言的客户端SDK,这里我就选择C#的SDK:https://github.com/ssdb/dotnetssdb。
可以看到,里面没啥东西,就三个破文件,里面并没有实现ssdb应该有的所有功能,所以大家可以根据自己的需要进行封装,连接池啥的都要
你自己根据需要实现吧,好了,接下来我用hash简单的测试一下:
class Program
{
static void Main(string[] args)
{
Client client = new Client("192.168.23.153", ); client.hset("customerHash", "customerID", ""); string val = string.Empty; client.hget("customerHash", "customerID", out val); Debug.WriteLine("customerID= " + val); client.close();
}
}
好了,本篇先就说到这里,希望对你有帮助。
全内存的redis用习惯了?使用基于硬盘存储类似redis的nosql产品ssdb呢?的更多相关文章
- redis使用日志(二) 数据存储到redis
一段简短的代码,来展示如何把爬取内容写到redis里面: #! /usr/bin/env python # -*- coding=utf-8 -*- import requests import js ...
- 发布一个参考ssdb,用go实现的类似redis的高性能nosql:ledisdb
起因 ledisdb是一个参考ssdb,采用go实现,底层基于leveldb,类似redis的高性能nosql数据库,提供了kv,list,hash以及zset数据结构的支持. 我们现在的应用极大的依 ...
- 全内存的redis用习惯了?那能突破内存限制类redis产品ssdb呢?
首先说一下背景,在双十一的时候,我们系统接受X宝的订单推送,同事原先的实现方式是使用redis的List作为推送数据的承载,在非大促的场景下, 一切运行正常,内存占用大概3-4G,机器是16G内存.由 ...
- 基于Python项目的Redis缓存消耗内存数据简单分析(附详细操作步骤)
目录 1 准备工作 2 具体实施 1 准备工作 什么是Redis? Redis:一个高性能的key-value数据库.支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使 ...
- 曹工说Redis源码(8)--面试时,redis 内存淘汰总被问,但是总答不好
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
- zw版_Halcon图像交换、数据格式、以及超级简单实用的DIY全内存计算.TXT
zw版_Halcon图像交换.数据格式.以及超级简单实用的DIY全内存计算.TXT Halcon由于效率和其他原因,内部图像采用了很多自有格式,提高运行速度,但在数据交换方面非常麻烦. 特别是基于co ...
- zw·10倍速大数据与全内存计算
zw·10倍速大数据与全内存计算 zw全内存10倍速计算blog,早就在博客园机器视觉栏目发过,大数据版的一直挂着,今天抽空补上. 在<零起点,python大数据与量化交易>目录中 htt ...
- Redis内存使用达到maxmemory设定值后玩家数据无法写入解决 Redis数据“丢失”问题
Redis数据“丢失”问题 - CSDN博客 https://blog.csdn.net/real_myth/article/details/52582739 Redis内存使用达到maxmemory ...
- Redis(十二)flush误操作、Redis安全、处理bigkey和寻找热点key
一.flushall/flushdb误操作的处理 假设进行flush操作的Redis是一对主从结构的主节点,其中键值对的个数是100万,每秒写入量是1000. 1.缓存与存储 被误操作flush后,根 ...
随机推荐
- inotify-tools + php脚本实现Linux服务器文件监控并邮件提醒
需求简介: 由于服务器被挂马,经常被写入涉敏感的html网页,领导时常被网监请去喝茶,呵呵你懂的.所以有两个需求,一是找出服务器的木马后门和修复代码漏洞,二是监控服务器涉及增删改查的文件. 第一个 ...
- zookeeper 笔记-小结
1.zookeeper为分布式应用设计的分布式开源协调服务 2.分布式应用可以建立在同步配置管理,选举,分布式锁,分组和命名等服务的更高级别的实现基础上 3.znode维护数据,ACL时间戳等交换版本 ...
- [Linux 使用(2)] 64位Linux下安装jboss-as-7.1 以及jdk1.7
一.软件的下载 jdk下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.h ...
- [ACdream] 女神教你字符串——三个气球
Problem Description 女神邀请众ACdream开联欢会,显然作为ACM的佼佼者,气球是不能少的~.女神准备了三种颜色的气球,红色,黄色,绿色(交通信号灯?) 有气球还不能满足女神,女 ...
- Google Guava
公司用到了 Joiner HashMultimap 等 都是属于Google Guava包中的东西 官方文档 http://ifeve.com/google-guava/ 有时间了整理一下
- 写出易于调试的SQL
1.前言 相比高级语言的调试如C# , 调试SQL是件痛苦的事 . 特别是那些上千行的存储过程, 更是我等码农的噩梦. 在将上千行存储过程的SQL 分解到 C# 管理后, 也存在调试的不通畅, 如何让 ...
- QT生成PDF文件
QString temp=""; //m_File_Content_Text_Edit->selectAll(); QString t_File_Content = m_Fi ...
- Winsock网络编程笔记(3)----基于UDP的server和client
在上一篇随笔中,对Winsock中基于tcp面向连接的Server和Client通信进行了说明,但是,Winsock中,Server和Client间还可以通过无连接通信,也就是采用UDP协议.. 因此 ...
- poj 1759 Garland
Garland Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2365 Accepted: 1007 Descripti ...
- WebGL学习(1) - 三角形
原文地址:WebGL学习(1) - 三角形 还记得第一次看到canvas的粒子特效的时候,真的把我给惊艳到了,原来在浏览器也能做出这么棒的效果.结合<HTML5 Canvas核心技术>和网 ...