设为首页 收藏本站
查看: 587|回复: 0

[经验分享] 全内存的redis用习惯了?那能突破内存限制类redis产品ssdb呢?

[复制链接]

尚未签到

发表于 2017-12-20 20:37:52 | 显示全部楼层 |阅读模式
  首先说一下背景,在双十一的时候,我们系统接受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解压。
  

[iyunv@localhost apps]# wget https://codeload.github.com/ideawu/ssdb/zip/master  

  
--2017-12-02 03: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,060 69.3KB/s in 36s
  

  

  
2017-12-02 03:02:57 (43.7 KB/s) - ‘master’ saved [1595060/1595060]
  

  
[iyunv@localhost apps]#unzip master
  

  
[iyunv@localhost apps]# ls
  

  
master ssdb-master
  

  2. 使用make对C++代码进行编译
  

[iyunv@localhost ssdb-master]# make  

  3. 编译完之后,一泡尿的功夫,这个ssdb-server可执行文件就出来了。
  

[iyunv@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>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>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:
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,指定一下配置文件,采取静默启动
  

[iyunv@localhost ssdb-master]# ./ssdb-server ./ssdb.conf -d  
ssdb
-server 1.9.6  
Copyright (c)
2012-2015 ssdb.io  

  
[iyunv@localhost ssdb
-master]# netstat -tlnp  
Active Internet connections (only servers)
  
Proto Recv
-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
tcp        
0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1869/dnsmasq  
tcp        
0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1115/sshd  
tcp        
0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1117/cupsd  
tcp        
0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      12994/./ssdb-server  
tcp        
0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1627/master  
tcp6      
0      0 :::22                   :::*                    LISTEN      1115/sshd  
tcp6      
0      0 ::1:631                 :::*                    LISTEN      1117/cupsd  
tcp6      
0      0 ::1:25                  :::*                    LISTEN      1627/master  
[iyunv@localhost ssdb
-master]#   

  可以看到,上面的8888端口已经成功开启,没毛病。
  四:使用C#客户端
  在http://ssdb.io/docs/zh_cn/clients.html上面列出了各个语言的客户端SDK,这里我就选择C#的SDK:https://github.com/ssdb/dotnetssdb。

  可以看到,里面没啥东西,就三个破文件,里面并没有实现ssdb应该有的所有功能,所以大家可以根据自己的需要进行封装,连接池啥的都要
  你自己根据需要实现吧,好了,接下来我用hash简单的测试一下:
  

   >
{
  

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();
  
}
  
}
  


  好了,本篇先就说到这里,希望对你有帮助。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426201-1-1.html 上篇帖子: redis哨兵配置 下篇帖子: Linux下Redis集群环境的搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表