深圳网站制作排行榜,wordpress保护后台登录,网站建设和网站设计的区别,dchaser wordpress首先说一下背景#xff0c;在双十一的时候#xff0c;我们系统接受X宝的订单推送#xff0c;原先的实现方式是使用 redis 的 List 作为推送数据的承载#xff0c;在非大促的场景下#xff0c;一切运行正常#xff0c;内存占用大概3-4G#xff0c;机器是16G内存。由于提前… 首先说一下背景在双十一的时候我们系统接受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大家前期可以当缓存用用或者存储一些非关键性数据节省节省内存空间。目前我在项目中用起来了。使用hash来存customerID 和customerNick的映射关系。使用List来承载X宝的订单推送。三快速搭建官方下载http://ssdb.io 有一点要注意的就是官方文档明确表示CentOS7的文件句柄设置问题建议不要在centos7上进行搭建具体的说明可以看看这个http://ssdb.io/docs/zh_cn/config.html 大家可以用用 centos6.5 或者 ubantu 吧。1. wget下载和unzip解压。
[rootlocalhost apps]# wget https://codeload.github.com/ideawu/ssdb/zip/master--2017-12-02 03:02:18-- https://codeload.github.com/ideawu/ssdb/zip/masterResolving codeload.github.com (codeload.github.com)... 192.30.255.120, 192.30.255.121Connecting to codeload.github.com (codeload.github.com)|192.30.255.120|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 1595060 (1.5M) [application/zip]Saving to: ‘master’100%[] 1,595,060 69.3KB/s in 36s2017-12-02 03:02:57 (43.7 KB/s) - ‘master’ saved [1595060/1595060][rootlocalhost apps]#unzip master[rootlocalhost apps]# lsmaster ssdb-master
2. 使用make对C代码进行编译
[rootlocalhost ssdb-master]# make
3. 编译完之后一泡尿的功夫这个ssdb-server可执行文件就出来了。
[rootlocalhost 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配置一下这里面有三个配置要注意下work_dir存放data和meta的目录可以在ssdb-master文件夹下mkdir data文件夹。ip设为0.0.0.0让所有的主机都能够连接上来。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.pidserver:ip: 0.0.0.0port: 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: 5replication:binlog: yes# Limit sync speed to *MB/s, -1: no limitsync_speed: -1slaveof:# 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: 8889logger:level: debugoutput: log.txtrotate:size: 1000000000leveldb:# in MBcache_size: 500# in MBwrite_buffer_size: 64# in MB/scompaction_speed: 1000# yes|nocompression: yes
5. 启动ssdb-server,指定一下配置文件采取静默启动
[rootlocalhost ssdb-master]# ./ssdb-server ./ssdb.conf -d
ssdb-server 1.9.6
Copyright (c) 2012-2015 ssdb.io[rootlocalhost 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
[rootlocalhost ssdb-master]#
可以看到上面的8888端口已经成功开启没毛病。四使用C#客户端在 http://ssdb.io/docs/zh_cn/clients.html 上面列出了各个语言的客户端SDK这里我就选择C#的SDKhttps://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();}}
好了本篇先就说到这里希望对你有帮助。