全内存的redis用习惯了?那能突破内存限制类似redis的nosql产品ssdb呢?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了全内存的redis用习惯了?那能突破内存限制类似redis的nosql产品ssdb呢?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4440字,纯文字阅读大概需要7分钟。
内容图文
首先说一下背景,在双十一的时候,我们系统接受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 --2017-12-0203:02:18-- 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|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1595060 (1.5M) [application/zip] Saving to: ‘master’ 100%[==================================================================>] 1,595,06069.3KB/s in 36s 2017-12-0203:02:57 (43.7 KB/s) - ‘master’ saved [1595060/1595060] [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-servervar 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: 8888 # 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 32 characters #auth: very-strong-password #readonly: yes # in ms, to log slowlog with WARN level #slowlog_timeout: 5 replication: binlog: yes # Limit sync speed to *MB/s, -1: no limit sync_speed: -1 slaveof: # to identify a master even if it moved(ip, port changed) # ifset to empty or not defined, ip:port will be used. #id: svc_2 # sync|mirror, defaultis sync #type: sync #host: localhost #port: 8889 logger: level: debug output: log.txt rotate: size: 1000000000 leveldb: # in MB cache_size: 500 # in MB write_buffer_size: 64 # in MB/s compaction_speed: 1000 # yes|no compression: yes
5. 启动ssdb-server,指定一下配置文件,采取静默启动
[root@localhost ssdb-master]# ./ssdb-server ./ssdb.conf -d ssdb-server 1.9.6 Copyright (c) 2012-2015 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 00192.168.122.1:530.0.0.0:* LISTEN 1869/dnsmasq tcp 000.0.0.0:220.0.0.0:* LISTEN 1115/sshd tcp 00127.0.0.1:6310.0.0.0:* LISTEN 1117/cupsd tcp 000.0.0.0:88880.0.0.0:* LISTEN 12994/./ssdb-server tcp 00127.0.0.1:250.0.0.0:* LISTEN 1627/master tcp6 00 :::22 :::* LISTEN 1115/sshd tcp6 00 ::1:631 :::* LISTEN 1117/cupsd tcp6 00 ::1:25 :::* LISTEN 1627/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", 8888); client.hset("customerHash", "customerID", "1000"); string val = string.Empty; client.hget("customerHash", "customerID", out val); Debug.WriteLine("customerID= " + val); client.close(); } }
好了,本篇先就说到这里,希望对你有帮助。
原文:http://www.cnblogs.com/huangxincheng/p/7955473.html
内容总结
以上是互联网集市为您收集整理的全内存的redis用习惯了?那能突破内存限制类似redis的nosql产品ssdb呢?全部内容,希望文章能够帮你解决全内存的redis用习惯了?那能突破内存限制类似redis的nosql产品ssdb呢?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。