1. 目的
学习任何一门技术都是有原因的,个人还是比较带着问题去学习。然后通过学习对每个问题进行回答,这样也就对此技术达到学习目的,只有真正理解,才可以在我们以后的项目中大胆放心的使用。
问题列表:
(1). redis是什么,何为redis?
(2). 为什么要使用redis,能帮我们解决什么问题,能做什么?
(3). redis的优缺点?
(4). redis的安装、配置?
(5). redis中有哪些技术点?
(6). redis如何在项目中使用,项目实战?
(7). 技术进阶,redis如何实现,实现原理,源码分析,技术架构?
(8). 参考资料
2. 回答问题
针对第1节中提出的问题,边学习边分别进行解答。
2.1 redis是什么,何为redis?
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,
并提供多种语言的API。
从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
redis是一个key-value存储系统。与Memcached类似,它支持存储的value类型相对更多,包括5种数据类型。
redis和memcached一样,为了保证效率,数据都是缓存在内存中。redis会周期性的把更新的数据写入
磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
redis提供五种数据类型:string,hash,list,set及zset(sorted set)。
redis的版本
2012年08月02日,Redis 2.4.16 小更新版本 NoSQL。
2012年08月31日 ,Redis 2.4.17 小更新版本 NoSQL。
2012年11月7日 Redis 2.6.3 发布,高性能K/V服务器。
2013年4月30日Redis 2.6.13 发布,高性能K/V服务器。
2013年11月25日,Redis 2.8.1发布。
2015年2月,Redis3.0.0发布(支持集群)。
2.2 为什么要使用redis,能帮我们解决什么问题,能做什么?
redis是NoSQL数据库;
redis是memcached+MySql的升级版;
NoSQL主要用于解决以下几种问题
1. 少量数据存储,高速读写访问。此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,
实际这正是Redis最主要的适用场景。
2. 海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。
3. 这方面最具代表性的是dynamo和bigtable 2篇论文所阐述的思路。前者是一个完全无中心的设计,
节点之间通过gossip方式传递集群信息,数据保证最终一致性,后者是一个中心化的方案设计,
通过类似一个分布式锁服务来保证强一致性,数据写入先写内存和redo log,然后定期compat归并到磁盘上,
将随机写优化为顺序写,提高写入性能。
4. Schema free,auto-sharding等。比如目前常见的一些文档数据库都是支持schema-free的,直接存储json格式数据,
并且支持auto-sharding等功能,比如mongodb。
redis特点
1. Redis使用最佳方式是全部数据in-memory。
2. Redis更多场景是作为Memcached的替代者来使用。
3. 当需要除key/value之外的更多数据类型支持时,使用Redis更合适。
4. 当存储的数据不能被剔除时,使用Redis更合适。
2.3 redis的优缺点?
优点
与memcached+Mysql比较,redis的优点:
非常丰富的数据结构,且这些数据结构的操作都是原子性的;
高速读写,memcached提供cas命令,可以保证多个并发访问操作同一份数据的一致性;
mysql使用了锁,来实现数据一致性;redis没有使用cas命令和锁,redis提供了事物功能,可以保证一串命令的原子性。
缺点
1. 持久化
redis直接把数据存储在内存中,可以通过两种方式持久化。
(1). 定时快照 -snapshot
redis会每隔一段时间将整个数据库的数据写入到磁盘中,每次都是全部写,代价很高;
(2). 基于语句的追加 - appendOnlyFile,aof
aof只是追加变化的数据,但是追加log可能很大,同时所有操作均要重新执行一遍,恢复速度慢。
2. 耗内存
虽然redis采用压缩算法存储,但是对内存消耗还是很大
2.4 redis的安装、配置?
redis的版本说明
redis版本号中,小数点后的数字为偶数是稳定版本,奇数为非稳定版,建议使用稳定版。在3.0以后有cluster集群功能。
由于redis没有针对于windows的版本,打开redis的windows下载页面,会有一段数据大意就是 Redis官方是不支持windows的,
只是 Microsoft Open Tech group 在 GitHub上开发了一个Win64的版本,项目地址是:
github下载地址
https://github.com/MSOpenTech/redis/releases
配置
2.5 redis中有哪些技术点?
1. 5种数据类型介绍、命令
2. 事物、过期时间、排序
3. 持久化
4. 集群
5. java操作redis基本功能(Main方法)
6. redis相关工具
见后面的连载章节
2.6 redis如何在项目中使用,项目实战?
1. 使用spring+redis集群
见后面的连载章节
2.7 技术进阶,redis如何实现,实现原理,源码分析,技术架构?
1. redis技术架构
2. redis实现原理
3. redis性能调优
4. redis源码分析
见后面的连载章节
2.8 参考资料
1. redis官网地址
2. 下载地址