走进 Redis 的世界
NoSQL(Not Only SQL) 在现今已经应用非常普遍了,尤其是 Redis 和 MongoDB。我们现在来说说 Redis。
前世
Redis 是一个意大利人 Salvatore Sanfilippo(antirez) ,在 2008 年开发一个叫 LLOOGG (已经停止服务,域名都在叫卖了/捂脸)的访客信息追踪网站时(源码),因为用户越来越多而达到了性能瓶颈,为了节约成本,antirez 自己动手写的一个内存数据库。后来,antirez 用 C 语言重写了源码,加上了持久化功能并开源到 GitHub 上,Redis 正式向世界揭开了面纱,并深受欢迎,如 Twitter、Stack Overflow、GitHub、BAT、新浪微博、SOHU、优酷、美团、小米、唯品会等公司都是 Redis 的使用者。其中新浪微博可以说是全球最大的 Redis 使用者。
Redis 全称 Remote Dictionary Server,是一种基于键值对(key-value)的 NoSQL 数据库,它主要有:字符串(Strings)、哈希(Hashs)、列表(Lists)、集合(Sets)、有序集合(Sorted sets/Zsets) 5 种数据类型,同时在字符串的基础上衍生出了位图(Bitmaps)和 HyperLogLogs "数据结构",并且随着 LBS(Location Based Service,基于位置服务)的不断发展,在 Redis 3.2 版本中加入有关 GEO(地理信息定位)的功能。Redis 还提供了键过期、发布订阅、事务、流水线、Lua 脚本等附加功能。除此之外,在持久化、主从复制、高可用(2.8)和集群(3.0)方面也是下足了功夫,逐步得到完善并已相当稳定。
今生
目前,Redis 最新的稳定版是 3.2.8,但已经发布了最新的 4.0 RC2 版本,有更多好玩和完善的东西,可以看看 antirez 写的文章 The first release candidate of Redis 4.0 is out,英文困难户还可以看看黄健宏(huangz)的博文 Redis 4.0 新功能简介。
4.0 的新特性简单来说有如下几点:
- 模块系统,方便开发人员扩展功能。
- PSYNC 2.0,优化旧版本中主从切换时引起的全量复制问题。
- LFU(Last Frequently Used) 缓存剔除算法,具体信息见 antirez 的博文 Random notes on improving the Redis LRU algorithm。
- 非阻塞的 DEL 、 FLUSHDB 和 FLUSHALL,尽可能避免删除 key 时导致的服务器阻塞。
- 混合 RDB-AOF 持久化格式,兼具 RDB 持久化和 AOF 持久化的优点。
- memory 监控命令,方便观察内存使用情况, 并进行相应的内存管理操作。
- 集群兼容 NAT 和 Docker
- 交换数据库,对指定的两个数据库进行互换数据。
说到这里,我们需要冷静一下,Redis 虽然强大,但也不是万能的。在大数据量的时候,Redis 就并不是那么的合适了,毕竟 Redis 是一个内存数据库,会把数据都装到内存中,如果硬要上 Redis,那老板可就要心疼了 _,这基本上是个黑洞;但也不是完全就不可以考虑 Redis 了,我们还是可以把热点数据放到 Redis 中的,其他的数据就不要浪费内存了。
最后,老话说的好:授人以鱼,不如授人以渔,不对,应该是:知其然,知其所以然。Redis 虽然是一个工具,但是知道 Redis 的原理对我们进行开发或者运维都是极好的。Redis 是开源的,我们不用带它看金鱼,可以轻松地从 GitHub 上拉取它的源码,然后慢慢研究它。Redis 的代码量才几万行,对于其他 NoSQL 库而言简直不值一提,但代码却非常优雅,通过阅读源码技能够加深对 Redis 的理解,必要时还可以实现一些自定义的功能,模块系统也可以用起来了。
附
Alpha:是内部测试版,一般不向外部发布,会有很多 Bug,一般只有测试人员使用。
Beta:也是测试版,这个阶段的版本会一直加入新的功能,在 Alpha 版之后推出。
RC(Release Candidate):用在软件上就是候选版本。系统平台上就是发行候选版本。RC 版不会再加入新的功能了,主要着重于除错。
GA(General Availability):正式发布的版本,在国外都是用 GA 来说明 release 版本的。
RTM(Release to Manufacture):是给工厂大量压片的版本,内容跟正式版是一样的,不过 RTM 版也有出限制、评估版的。但是和正式版本的主要程序代码都是一样的。
OEM:是给计算机厂商随着计算机贩卖的,也就是随机版。只能随机器出货,不能零售。只能全新安装,不能从旧有操作系统升级。包装不像零售版精美,通常只有一面 CD 和说明书(授权书)。
RVL:号称是正式版,其实RVL根本不是版本的名称。它是中文版/英文版文档破解出来的。
EVAL:而流通在网络上的 EVAL 版,与“评估版”类似,功能上和零售版没有区别。
RTL:Retail(零售版)是真正的正式版,正式上架零售版。在安装盘的 i386 文件夹里有一个 eula.txt,最后有一行 EULAID,就是你的版本。比如简体中文正式版是 EULAID:WX.4_PRO_RTL_CN,繁体中文正式版是 WX.4_PRO_RTL_TW。其中:如果是 WX. 开头是正式版,WB. 开头是测试版。_PRE,代表家庭版;_PRO,代表专业版。
α、β、λ常用来表示软件测试过程中的三个阶段:
α 是第一阶段,一般只供内部测试使用;
β 是第二个阶段,已经消除了软件中大部分的不完善之处,但仍有可能还存在缺陷和漏洞,一般只提供给特定的用户群来测试使用;
λ 是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的优化处理即可上市发行。
走进 Redis 的世界的更多相关文章
- 走进缓存的世界(三) - Memcache
系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用 ...
- 走进JavaWeb技术世界3:JDBC的进化与连接池技术
走进JavaWeb技术世界3:JDBC的进化与连接池技术 转载公众号[码农翻身] 网络访问 随着 Oracle, Sybase, SQL Server ,DB2, Mysql 等人陆陆续续住进数据库 ...
- [C#] 走进 LINQ 的世界
走进 LINQ 的世界 序 在此之前曾发表过三篇关于 LINQ 的随笔: 进阶:<LINQ 标准查询操作概述>(强烈推荐) 技巧:<Linq To Objects - 如何操作字符串 ...
- 小丁带你走进git的世界三-撤销修改
一.撤销指令 git checkout还原工作区的功能 git reset 还原暂存区的功能 git clean 还没有被添加进暂存区的文件也就是git还没有跟踪的文件可以使用这个命令清除他们 g ...
- 小丁带你走进git的世界二-工作区暂存区分支
小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git init git clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...
- 带你走进rsync的世界
导读 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录.rsync共有3种使用方 ...
- 小丁带你走进git的世界三-撤销修改(转)
一.撤销指令 git checkout还原工作区的功能 git reset 还原暂存区的功能 git clean 还没有被添加进暂存区的文件也就是git还没有跟踪的文件可以使用这个命令清除他们 g ...
- C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】
C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...
- 【SpringMVC学习02】走进SpringMVC的世界
上一篇博文主要介绍了springmvc的整个架构执行流程,对springmvc有了宏观上的把握,这一篇博文主要以案例作为驱动,带你走进springmvc的世界.案例中的需求很简单:对商品列表的查询.表 ...
随机推荐
- Struts2 属性驱动、模型驱动、异常机制
模型驱动使用单独的VO(值对象)来封装请求参数和处理结果,属性驱动则使用Action实例来封装请求参数和处理结果. 一.使用模型驱动 1.login.action采用模型驱动模式实现,采用模型驱动时必 ...
- java IMAGEIO
javax.imageio使用 ImageIO 类的静态方法可以执行许多常见的图像 I/O 操作. 此包包含一些基本类和接口,有的用来描述图像文件内容(包括元数据和缩略图)(IIOImage): 有的 ...
- Discuz教程:X3.1-x3.2后台admin.php防止直接恶意访问
功能说明:admin.php是discuz默认的后台地址,正常情况下可以直接访问,为了防止某些恶意访问的情况,可以修改以下内容进行安全性能提升.适用版本:Discuz!x1-x3.2具体实施方案: a ...
- 在代码中控制UI界面
虽然Android推荐使用XML布局文件来控制UI界面,但如果开发者愿意,Android允许开发者完全抛弃XML布局文件,完全在Java代码中控制UI界面. 实例:用编程的方式开发UI界面 packa ...
- POJ1273(最大流)
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70451 Accepted: 2739 ...
- ubuntu下php编译
1.安装依赖 sudo apt-get install libjpeg-devsudo apt-get install libxml2-devsudo apt-get -y install libjp ...
- [Echarts]用Echarts绘制饼状图
在项目网站的网页中,有这样一幅图: 心血来潮,想使用百度Echarts来绘制一下,可是没能绘制得完全一样,Echarts饼状图的label不能在图形下面放成一行,最后的效果是这样子的: 鼠标移动到it ...
- region URL请求数据
#region URL请求数据 /// <summary> /// HTTP POST方式请求数据 /// </summary> /// <param name=&quo ...
- Spark Streaming实时写入数据到HBase
一.概述 在实时应用之中,难免会遇到往NoSql数据如HBase中写入数据的情景.题主在工作中遇到如下情景,需要实时查询某个设备ID对应的账号ID数量.踩过的坑也挺多,举其中之一,如一开始选择使用NE ...
- Oracle数据库语言修改成UTF-8
select * from v$nls_parameters; sqlplus "/ as sysdba" SQL> SHUTDOWN IMMEDIATE SQL> S ...