课程简介
本课程主要讲解常规 Redis 的写法,Redis 和 Spring 的结合使用,即 Spring Data Redis,以及 Redis 在工作中的正确使用姿势,Redis 和 Spring 的 Cacheable 的结合使用。里面贯穿了基本使用方法和工作实践结合在实际工作中的写法,起到点睛之用。Redis 作为一种常用的缓存,在工作中我们是离不开的,使用的姿势是否正确、是否有整体的认识,统统都会在课程中有所介绍。
学完本课程将帮助大家提高工作效率和正确使用、整体认识 Redis 及其使用技巧,让我们的代码更优雅、更好理解,其中还会带领大家查看其原理,熟练掌握 Redis 的使用。
作者简介
张振华,曾经先后在驴妈妈、携程、要买车公司担任过 Java 高级工程师、架构师、开发主管、技术经理等职务。在电商公司工作期间,负责过 PC 站和后端服务的平台架构的实现和升级。目前在做一些 Java 架构工作。前后从业十几年没有离开 Java 开发,2015年出版《Java 并发编程从入门到精通》图书,计划在2018年出版《Spring Data JPA 从入门到精通》一书。
课程内容
导读:Redis 简单介绍
Redis 是一个开源的使用 ANSIC 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从2010年3月15日起,Redis 的开发工作由 VMware 主持,从2013年5月开始,Redis 的开发由 Pivotal 赞助。
Redis 是一个开源(BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如:
- 字符串(Strings)
- 散列(Hashes)
- 列表(Lists)
- 集合(Sets)
- 有序集合(Sorted Sets)
- 范围查询、Bitmaps、Hyperloglogs 和 地理空间(Geospatial)索引半径查询
Redis 内置了复制(Replication)、LUA 脚本(Lua scripting)、LRU 驱动事件(LRU Eviction)、事务(Transactions)和不同级别的磁盘持久化(Persistence),并通过 Redis 哨兵(Sentinel)和自动分区(Cluster)提供高可用性(High Availability)。
现状:随着微服务架构、去中心化、高可用的环境要求,Redis 还会更加火爆。Redis 能帮我们解决很多分布式过程中的一些问题(如内存数据、分布式锁、共享数据等),围绕着 Redis 的开源的产品也越来越丰富。我们作为开发 Java 人员,已经成为了必备的开发技能,如同数据库一样,详见官方地址 和 中文社区。
Redis、Memcache 的比较
Memcached 和 Redis 都是内存数据库,都可以解决内存数据缓存的问题,但是两者比较,应用场景和便捷性、生态还是差别很大的。相同点都可以通过客户端一致性 Hash 算法解决切片问题。就是便利程度和稳定性可能会有差别,如下:
特性 | Memcached | Redis |
---|---|---|
类型 | Key-Value 数据库 | Key-Value 数据库 |
过期策略 | 支持 | 支持 |
支持数据类型 | String | 多种数据类型 |
持久化 | 不支持 | 支持 |
高可用 | 不支持主从复制 | 支持主从复制 |
客户端 | 多种客户端 | 丰富客户端、客户端切片支持 |
成熟度 | 成熟 | 更成熟 |
分布式 | 不支持 | 支持、分布式锁、分布式事务 |
消息订阅 | 不支持 | 支持 |
之前面试的时候,如果是架构师,他们会经常被问到为什么要使用 Redis?不用不行吗?Redis 的优点是帮我们实现了很多内存数据的东西,否则我们重头来写也是可以的,只是有点重复造轮子,人家开源也成熟。
Memcached 更是小项目、小应用场景、快速响应式团队,从高可用角度来说 Redis 还是胜出的。
Redis 的市场上 Client 实现方式
Redis 的客户端有个各种语言的实现版本,就 Java 而言常用的实现版本有:
client | description |
---|---|
aredis | Asynchronous, pipelined client based on the Java 7 NIO Channel API |
JDBC-Redis | mavcunha |
Jedipus | Redis Client & Command Executor jamespedwards |
Jedis | xetorthio |
JRedis | SunOf27 |
lettuce | Advanced Redis client for thread-safe sync, async, and reactive usage. Supports Cluster, Sentinel, Pipelining, and codecs.ar3te mp911de |
redis-protocol | Up to 2.6 compatible high-performance Java, Java w/Netty & Scala (finagle) client spullara |
RedisClient | redis client GUI tool |
Redisson | distributed and scalable Java data structures on top of Redis server mrniko |
RJC | e_mzungu |
vertx-redis-client | The Vert.x Redis client provides an asynchronous API to interact with a Redis data-structure server |
而其中:Jedis 是目前最受欢迎的 Client,而 Spring Data JPA 又基于 Jedis 做了很好的封装。本专题作者就带领大家一起来领略 Spring Data JPA 的魅力所在。
Redis 的 Server 端的安装体验
安装
我们以 Redis-4.0.6 为例,先从官方下载,解压安装即可。命令如下:
$ wget http://download.redis.io/releases/redis-4.0.6.tar.gz $ tar xzf redis-4.0.6.tar.gz $ cd redis-4.0.6 $ make $ pwd /Users/jack/company/www/redis-4.0.6
启动 Server 端
如果上面的安装成功之后,我们只需要进入 Redis 的安装目录:/Users/jack/company/www/redis-4.0.6,执行如下命令,即可启动 Redis 的 Server 端。
$ src/redis-server
利用自带客户端测试一下
官方提供的 Redis-4.0.6 包里面包含了 Server 端和 Client 端。我们通过同目录的下面这个命令脚本,即可启动客户端,操作如下:
$ src/redis-cli redis> set foo bar OK redis> get foo "bar"
到目前为止安装 Server 成功。
Server 端的安装需要掌握的东西
- 单机安装模式
- master/salve 方式
- Redis Sentinel 方式
- 切片模式安装模式
工作需要注意的事项
- 去中心化
- Redis 本身服务的高可用、高并发行
- 数据的安全性、分布式储存、数据的一致性
- 实现方式的选型
- Redis 的一些原理和概念要理解清楚
本专题介绍
作者随着工作年限的增加,会发现很多开发者写的代码不是特别优雅,或者使用的方式不是特别正确。作者想通过本专题,让大家对 Redis 在 Java 语言中,应该如何正确使用及其重要的知识点和应用场景是什么,还会介绍一些工作的实践方法,让大家全面掌握以及提高工作效率和面试通过率。
第01课:Redis 之 Jedis 的使用
第02课:Redis 通过 SpringData 的使用和配置
第03课:Spring Cache 介绍和配置
第04课:Spring Cache 和 Spring Data Redis 实践
第05课:Redis Client 的使用及命令
第06课:分布式环境下 Redis 如何正确使用
第07课:Redis 原理分析
阅读全文: http://gitbook.cn/gitchat/column/5a4ce2005e04d7622ba2b256