写点什么

作为 Java 程序员连 Redis 都不会?阿里架构师带你深入“解剖”Redis

用户头像
周老师
关注
发布于: 57 分钟前

前言

作为 Java 开发程序员【Redis】是你必须要掌握的知识

Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。Redis 以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。

国内外很多大型互联网公司都在使用 Redis,比如 Twitter、YouPorn、暴雪娱乐、Github、StackOverflow、腾讯、阿里、京东、华为、新浪微博等等,很多中小型公司也都有应用。也可以说,对 Redis 的了解和应用实践已成为当下中高级后端开发者绕不开的必备技能。

本文总共分为 3 个部分对 Redis 进行“解剖”:

第一部分对 Redis 进行了基本介绍,并展示了一些 Redis 的使用示例;

第二部分对 Redis 的多个命令进行了详细的介绍,之后还介绍了 Redis 的管理操作以及使用 Redis 构建更复杂的应用程序的方法;

第三部分介绍了如何通过内存优化、水平分片以及 Lua 脚本这 3 种技术来扩展 Redis。

如果需要获取到这个【Redis 文档】文档的话帮忙转发一下见文末

一、Redis 入门

入门简介:对于 Redis 数据库的描述只说出了一部分真相,Redis 是-一个速度非常快的非关系数据库( non-relational database),它可以存储键(key) 与 5 种不同类型的值( value)之间的映射(mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能,接下来的几节将分别介绍 Redis 的这几个特性。

Redis 目录如下图


关于 Redis 与其他数据库和软件的对比

下图展示了部分在功能上与 Redis 有重叠的数据库服务器和缓存服务器,从这个表可以看出 Redis 与这些数据库及软件之间的区别。


第一部分关于详细介绍由于文案篇幅过长就不详细在文中展示


二、Redis 的核心概念

这一部分的前面几章将深人探讨标准的 Redis 命令,其中包括 数据操作命令和配置命令,而后面的几章将展示如何使用 Redis 构建更为复杂的辅助工具和应用程序,并在最后使用 Redis 来构建一个简单的社交网站。

Redis 目录如下图


2.1.Redis 命令

  1. 字符串命令、 列表命令和集合命令

  2. 散列命令和有序集合命令

  3. 发布命令与订阅命令

  4. 其他命令

2.2.数据安全与性能保障

  1. 将数据持久化至硬盘

  2. 将数据复制至其他机器

  3. 处理系统故障

  4. Redis 事务

  5. 非事务型流水线( non-transactional pipeline )

  6. 诊断性能问题

2.3.使用 Redis 构建支持程序

  1. 使用 Redis 记录日志

  2. 使用 Redis 实现计数器并进行数据统计

  3. 查询 IP 地址所属的城市与国家

  4. 服务的发现与配置

2.4.使用 Redis 构建应用程序组件

  1. 构建两个前缀匹配自动补全程序

  2. 通过构建分布式锁来提高性能

  3. 通过开发计数信号量来控制并发

  4. 构建两个不同用途的任务队列

  5. 通过消息拉取系统来实现延迟消息传递

  6. 学习如何进行文件分发

2.5.基于搜索的应用程序

  1. 使用 Redis 进行搜索

  2. 对搜索结果进行排序

  3. 实现广告定向

  4. 实现职位搜索

2.6.构建简单的社交网站

  1. 用户和状态

  2. 主页时间线

  3. 关注者列表和正在关注列表

  4. 状态消息的发布与删除

  5. 流 API

三、Redis 进阶内容

最后的这几章将对 Redis 用户经常会遇到的一-些问题进行介绍(降低内存占用、扩展性能、使用 Lua 语言进行脚本编程),并说明如何使用常规的技术去解决这些问题。

目录如下图:


3.1.降低内存占用

短结构( short structure )、分片结构( shared structure )、打包存储二进制位和字节

该篇将介绍 3 种非常有价值的降低 Redis 内存占用的方法。降低 Redis 的内存占用有助于减少创建快照和加载快照所需的时间、提升载人 AOF 文件和重写 AOF 文件时的效率、缩短从服务器进行同步所需的时间”,并且能让 Redis 存储更多的数据而无需添加额外的硬件。


3.2.扩展 Redis

扩展读性能、扩展写性能以及内存容量、扩展复杂的查询

随着 Redis 的使用越来越多,只使用一台 Redis 服务器没办法存储所有数据或者没办法处理所有读写请求的问题迟早都会出现,这时我们就需要使用一些方法对 Redis 进行扩展,让它能够满足我们的需求。

扩展性能图如下:


3.3.Redis 的 Lua 脚本编程

在不编写 C 代码的情况下添加新功能、使用 Lua 重写锁和信号量、移除 WATCH/MULTI/EXEC 事务、使用 Lua 对列表进行分片

前面介绍了如何构建- 些工具并将它们应用到已有的程序里面,与此同时还介绍了-些可以用于解决各种问题的技术。这- -章要做的事情也是类似的,并且效果将比你想象中的还要好。Redis 从 2.6 版本开始引人使用 Lua 编程语言进行的服务器端脚本编程功能,这个功能可以让用户直接在 Redis 内部执行各种操作,从而达到简化代码并提高性能的作用。

Redis 的 Lua 脚本如下图:


Redis 实战书籍


欢迎大家扫码来关注公众号博主,获取文章全部资料,此公众号会持续更新技术干货、不定期分享 Java 进阶面试宝典、Java 核心知识、架构书籍电子版


用户头像

周老师

关注

精通java热衷于分享java领域资料,感谢支持 2020.06.09 加入

还未添加个人简介

评论

发布
暂无评论
作为Java程序员连Redis都不会?阿里架构师带你深入“解剖”Redis