redis入门(一)redis入门(二)redis入门(三)
前言Redis是什么?redis是一种基于键值对(key-value)的NoSQL数据库。Redis会将所有数据都存放在内存中,所以它的读写性能非常惊人。不仅如此,Redis还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据不会“丢失”。Redis还提供了键过期、发布订阅、事务、流水线、Lua脚本等附加功能。
Redis能做什么在谈为什么需要redis之前,先要清楚redis可以做什么。
缓存。通过引入缓存加快数据的访问速度,降低后端数据源的压力。排行榜。redis提供给列表和有序几何数据结构可以很方便的构建各种排行榜系统。计数器。redis原生支持高性能的计数功能,可以为视频播放量、网页浏览数等提供支持。消息队列。redis提供发布订阅功能。特性我们为什么选择redis?
速度快官方给出的读写速度可以达到10W/s,以下是我本机双核四线程低压i7上测试的对字符串的读写速度。
C:\Users\Dm_ca> redis-benchmark -n 100000 -t set,get -q -a test1SET: 11993.28 requests per secondGET: 57603.69 requests per second若使用redis管道技术可以得到更高的读写速度
C:\Users\Dm_ca> redis-benchmark -n 100000 -t set,get -q -a test1 -P 2SET: 19466.62 requests per secondGET: 133155.80 requests per secondRedis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
下表是谷歌公司给出的各层级硬件执行速度,内存的响应速度是100ns,redis将数据全部从内存加载可以更快的读写数据。
简单稳定早期版本代码在2W行左右,3.0添加了集群等特性增值5W行。相比其他NoSQL数据库来说代码量少得多。
丰富的功能支持发布订阅、持久化、集群及管道等其他常用的功能。
历史2008年,Redis的作者Salvatore Sanfilippo在开发一个叫LLOOGG的网站时,需要实现一个高性能的队列功能,最开始是使用MySQL来实现的,但后来发现无论怎么优化SQL语句都不能使网站的性能提高上去,于是他决定自己做一个专属于LLOOGG的数据库,这个就是Redis的前身。后来,Salvatore Sanfilippo将Redis1.0的源码开放到GitHub上,可能连他自己都没想到,Redis后来如此受欢迎。
历史版本Redis借鉴了Linux操作系统对于版本号的命名规则:版本号第二位如果是奇数,则为非稳定版本(例如2.7、2.9、3.1),如果是偶数,则为稳定版本(例如2.6、2.8、3.0、3.2)。当前奇数版本就是下一个稳定版本的开发版本。
Redis 2.6Redis 2.6在2012年正式发布,经历了17个版本,到 2.6.17版本,相比于Redis2.4,主要特性如下:服务端支持Lua脚本。从节点提供只读功能。重构了大量的核心代码,所有集群相关的代码都去掉了,cluster功能将会是3.0版本最大的亮点。其他若干修复与优化Redis 2.8Redis2.8在2013年11月22日正式发布,经历了24个版本,到2.8.24版本,相比于Redis2.6,主要特性如下:添加部分主从复制的功能,在一定程度上降低了由于网络问题,造成频繁全量复制生成RDB对系统造成的压力。可以通过config set命令设置maxclients。可以用bind命令绑定多个IP地址。configre write命令可以将config set持久化到Redis配置文件中。其他若干修复与优化Redis 3.0Redis Cluster:Redis的官方分布式实现。全新的embedded string对象编码结果,优化小对象内存访问,在特定的工作负载下速度大幅提升。config set设置maxmemory时候可以设置不同的单位单位(之前只能是字节)incr命令性能提升。其他若干修复与优化Redis 3.2新的List编码类型:quicklist。从节点读取过期数据保证一致性。新的RDB格式,但是仍然兼容旧的RDB。加速RDB的加载速度。其他若干修复与优化Redis 4.0提供了模块系统,方便第三方开发者拓展Redis的功能PSYNC2.0:优化了之前版本中,主从节点切换必然引起全量复制的问题。提供了RDB-AOF混合持久化格式,充分利用了AOF和RDB各自优势。Redis Cluster兼容NAT和Docker。其他若干修复与优化