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

[经验分享] 主流NoSQL数据库全方位评测之Redis

[复制链接]

尚未签到

发表于 2018-11-7 11:19:46 | 显示全部楼层 |阅读模式
  本篇要评测的NoSQL产品是Redis,可以把它的功能理解为一个Key-Value的数据结构操作,数据都保存在内存中定期刷新到磁盘,以极高的读写效率而备受关注。国内的新浪微博就大规模的使用了Redis来存储用户关系和计数。
  介 绍
  按照官方的说法,Redis是用ANSI C开发的,能运行在大多数POSIX(Linux, *BSD, OS X  和Solaris等)系统上,官方没有支持Windows的版本。目前最新的版本是2.2.11,这个版本主要是修复了一个2.2.7版本中遍历方式优化 带来的一个bug。
  和普通的Key-Value结构不同,Redis的Key支持灵活的数据结构,除了strings,还有hashes、lists、 sets 和sorted sets等结构。正是这些灵活的数据结构,丰富了Redis的应用场景,能满足更多业务上的灵活存储需求。
  Redis的数据都保存在内存中,而且底层实现上是自己写了epoll event loop部分,而没有采用开源的libevent等通用框架,所以读写效率很高。为了实现数据的持久化,Redis支持定期刷新(可通过配置实现)或写日志的方式来保存数据到磁盘。
    安装和使用
  由于没有第三方的包依赖关系,Redis的安装十分简单:
  $ wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz
  $ tar xzf redis-2.2.11.tar.gz
  $ cd redis-2.2.11
  $ make
  这样就安装完毕了,执行src目录下的redis-server可以启动Redis进程,不过最好先配置一下redis.conf文件,常用的几个要注意的参数如下:
  daemonize yes
  指定Redis以守护进程的方式运行。
  pidfile /home/banping/redis/redis.pid
  当Redis以守护进程方式运行时,把pid写入指定的文件。
  port 6379
  指定监听端口,默认端口为6379。
  bind 192.168.0.35
  绑定的主机IP地址。
  logfile stdout
  指定日志的记录方式,默认为标准输出。
  databases 16
  设置数据库的数量。
  save
  Redis默认配置文件中提供了三个条件:
  save 900 1
  save 300 10
  save 60 10000
  分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改的时候,同步数据到磁盘文件。
  rdbcompression yes
  指定存储至本地数据库时是否压缩数据,默认为yes。
  dbfilename dump.rdb
  指定本地数据库文件名。
  dir /home/banping/redis/data
  指定本地数据库存放目录。
  requirepass foobared
  设置Redis连接密码,默认关闭。
  maxclients 128
  设置最大客户端连接数,默认无限制。
  maxmemory
  指定Redis能使用的最大内存。
  其他更详细的参数说明请参见官方文档。修改完配置文件后,我们可以用指定的配置文件启动Redis服务:
  [root@localhost redis-2.2.10]# src/redis-server /home/banping/redis/redis-2.2.11/redis.conf
  这样一个redis服务进程就启动了,它监听6379端口来提供服务。
    测试说明
    一、测试环境
  MongoDB部署在一台PC 服务器上,配置如下:
  CPU为Xeon 2.80GHz *4
  内存为4G
  硬盘为一块400G SATA盘
  操作系统为64位CentOS 5.3版本
    二、测试方法
  这里仍然采用PHP客户端进行测试,Redis官方推荐了两个PHP客户端,一个是PHP程序包Predis,另一个是C开发的扩展包 phpredis,我们这里采用后者,网址为https://github.com/nicolasff/phpredis  ,可以编译到PHP运行环境中来使用。
  为了不对测试服务器产生额外的影响,测试客户端部署在另外一台独立的服务器上,运行的PHP的版本是5.3.5,web server是Nginx 0.8.54,通过fastcgi的方式调用PHP服务。使用apache ab工具实现多个请求和并发操作。
  测试过程中就使用上文提到的已经启动的Redis服务,首先是进行写操作,通过500个请求,每个请求写入10000条记录,并发度为2来共写入500 万条数据,key为数字1到5000000,value大小为100个字节。然后是读操作,也是用500个请求,每个请求随机根据key值读出10000 条记录,并发度为10共读出500万条记录,评测的重点是写入和读出数据的时间,以及在此过程中服务器的资源使用情况。
    测试结果及总结
    一、写操作
  成功写入500万条记录,共耗时524秒,平均每秒写入数据9542笔。磁盘上的数据文件大小134M。写入过程中,服务器内存、CPU和磁盘等资源使用情况如下图所示:
DSC0000.png

DSC0001.png

DSC0002.png

  可见,内存使用平稳上升,最后占用140M左右,主要用来缓存数据,对比数据文件的大小可以设想,在操作系统内 存可用的情况下,内存的分配和数据文件的大小是大致相当的。内存占用会有临时的超过实际占用的几个点,而且会马上释放掉,CPU和磁盘IO都表现出周期性 的上下波动,估计这些和Redis刷新数据到磁盘的实现机制有关,在高点的时候正好是数据写入磁盘的过程。总体来说占用资源很少,表现也很平稳。
    二、读操作
  成功读出500万条记录,共耗时184秒,平均每秒读出数据27174笔。
  读数据过程中没有发生磁盘IO。CPU有所消耗,Idle值稳定在77左右,等待CPU资源的进程一直是1个。内存表现平稳没有波动。
DSC0003.png

  通过以上测试结果可以看出,Redis数据操作都在内存完成,定期刷新到磁盘,占用的磁盘空间和内存大小由实际的数据量决定,在内存可用的情况下二者是 一致的。从功能角度看Redis高效的读写效率和丰富的数据结构能满足很多互联网应用场景的需求,而且在高负载的情况下,数据内存化是趋势,总体来说 Redis虽然还在不断发展之中,代码量也不多,但是一个轻量级的很有潜力的NoSQL产品,肯定会有越来越多的成功案例。


运维网声明 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-631903-1-1.html 上篇帖子: 利用redis实现高并发写入 下篇帖子: redis单机单实例一键安装脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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