走进 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的世界.案例中的需求很简单:对商品列表的查询.表 ...
随机推荐
- Java经典案例之-“成绩等级划分”
/** * 描述:在对话框中输入学习成绩,利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, * 60分以下的用C表示. * 分析:可以利用三目运算符 ...
- js如何准确获取当前页面url网址信息
1.window.location.href(设置或获取整个 URL 为字符串) var test = window.location.href;alert(test);返回:http://i.cnb ...
- OGG数据仓库以及单向复制(一)
Item Source System Target System Platform OEL5.4 OEL5.4 Hostname gc1 oraclelinux54.cuug.net Database ...
- JavaWeb三层结构---课设02
收获总结 1三层架构模式 区分层次的目的即为了“高内聚,低耦合”的思想 分层介绍: Javaweb设计分为三层:数据访问层,业务逻辑层和表示层. 数据访问层:只提供对基本数据的访问,不涉及任何的业务逻 ...
- Java Ant Could not find the main class: org.eclipse.ant.internal.launching.remote.InternalAntRunner. Program
参考:http://blog.csdn.net/jiangtaoking/article/details/49151763 The solution is to go to Run as → Exte ...
- easyUI tootip组件使用
easyUI tootip组件使用: <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- svn git协同管理
项目开发过程中总有一些奇奇怪怪的需求出现. 我们的项目管理是使用SVN的,用SVN是历史原因,无法整个项目向Git切换.由于我需要管理SVN,做一些代码合并工作.每次合并都会遇到SVN代码需要对比查看 ...
- ArcGIS API for JavaScript 4.2学习笔记[2] 显示3D地图
3D地图又叫场景. 由上一篇可知, require入口函数的第一个参数是字符串数组 ["esri/Map", "esri/views/MapView", &qu ...
- [css]《css揭秘》学习(三)-灵活的背景定位
一.background-position属性 使用该属性,在不确定容器大小的情况下,也可以指定图案距离容器边缘的位置:但是需要为不支持该属性的浏览器指定回退方案,否则,图案会默认放在左上角. < ...
- Ubuntu 制作U盘启动盘
部门需要一台Linux系统远程共享服务器,需要一个启动盘安装.但是由于公司windows 系统都安装了保安软件,而且软件的使用也是有限制的.所以不能使用UltraISO 这类软件制作U盘启动盘.还好部 ...