最近阅读了《Redis开发与运维》,非常不错。

这里对书中的知识整理一下,方便自己回顾一下Redis的整个体系,来对相关知识点查漏补缺。

按照五点把书中的内容进行一下整理:

为什么要选择Redis:介绍Redis的使用场景与使用Redis的原因;

Redis常用命令总结:包括时间复杂度总结与具体数据类型在Redis内部使用的数据结构;

Redis的高级功能:包括持久化、复制、哨兵、集群介绍;

理解Redis:理解内存、阻塞;这部分是非常重要的,前面介绍的都可以成为术,这里应该属于道的部分;

开发技巧:主要是一些开发实战的总结,包括缓存设计与常见坑点。

先来开启第一部分的内容,对Redis来一次重新打量。

本系列内容基于:redis-3.2.12

Redis不是万金油

在面试的时候,常被问比较下Redis与Memcache的优缺点,个人觉得这二者并不适合一起比较,一个是非关系型数据库不仅可以做缓存还能干其它事情,一个是仅用做缓存。常常让我们对这二者进行比较,主要也是由于Redis最广泛的应用场景就是Cache。那么Redis到底能干什么?又不能干什么呢?

Redis都可以干什么事儿

缓存,毫无疑问这是Redis当今最为人熟知的使用场景。在提升服务器性能方面非常有效;

排行榜,如果使用传统的关系型数据库来做这个事儿,非常的麻烦,而利用Redis的SortSet数据结构能够非常方便搞定;

计算器/限速器,利用Redis中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用MySQL,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个API的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力;

好友关系,利用集合的一些命令,比如求交集、并集、差集等。可以方便搞定一些共同好友、共同爱好之类的功能;

简单消息队列,除了Redis自身的发布/订阅模式,我们也可以利用List来实现一个队列机制,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的DB压力,完全可以用List来完成异步解耦;

Session共享,以PHP为例,默认Session是保存在服务器的文件中,如果是集群服务,同一个用户过来可能落在不同机器上,这就会导致用户频繁登陆;采用Redis保存Session后,无论用户落在那台机器上都能够获取到对应的Session信息。

Redis不能干什么事儿

Redis感觉能干的事情特别多,但它不是万能的,合适的地方用它事半功倍。如果滥用可能导致系统的不稳定、成本增高等问题。

比如,用Redis去保存用户的基本信息,虽然它能够支持持久化,但是它的持久化方案并不能保证数据绝对的落地,并且还可能带来Redis性能下降,因为持久化太过频繁会增大Redis服务的压力。

简单总结就是数据量太大、数据访问频率非常低的业务都不适合使用Redis,数据太大会增加成本,访问频率太低,保存在内存中纯属浪费资源。

Java程序员为什么要用Redis?_Java开发

 

选择总需要找个理由

上面说了Redis的一些使用场景,那么这些场景的解决方案也有很多其它选择,比如缓存可以用Memcache,Session共享还能用MySql来实现,消息队列可以用RabbitMQ,我们为什么一定要用Redis呢?

速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件; 注意:单线程仅仅是说在网络请求这一模块上用一个请求处理客户端的请求,像持久化它就会重开一个线程/进程去进行处理

丰富的数据类型,Redis有8种数据类型,当然常用的主要是 String、Hash、List、Set、 SortSet 这5种类型,他们都是基于键值的方式组织数据。每一种数据类型提供了非常丰富的操作命令,可以满足绝大部分需求,如果有特殊需求还能自己通过 lua 脚本自己创建新的命令(具备原子性);

Java程序员为什么要用Redis?_Java开发_02

 

除了提供的丰富的数据类型,Redis还提供了像慢查询分析、性能测试、Pipeline、事务、Lua自定义命令、Bitmaps、HyperLogLog、发布/订阅、Geo等个性化功能。

Redis的代码开源在GitHub,代码非常简单优雅,任何人都能够吃透它的源码;它的编译安装也是非常的简单,没有任何的系统依赖;在非常活跃的社区,各种客户端的语言支持也是非常完善。另外它还支持事务(没用过)、持久化、主从复制让高可用、分布式成为可能。

Java程序员为什么要用Redis?_Java开发_03

 

作为一个开发者,对于我们使用的东西不能让它成为一个黑盒子,我们应该深入进去,对它更了解、更熟悉。今天简单说了下Redis的使用场景,以及为什么选择了Redis而不是其它。

Java程序员为什么要用Redis?_Java_04

 

Java程序员为什么要用Redis?_Java开发_05

 

目录

Java程序员为什么要用Redis?_Java_06

 

一、Redis入门介绍

Java程序员为什么要用Redis?_Java开发_07

 

二、Redis核心概念

Java程序员为什么要用Redis?_Java开发_08

 

Java程序员为什么要用Redis?_Java_09

 

Java程序员为什么要用Redis?_Java开发_10

 

初识Redis

 

 

前言:

初识Redis

对于Redis不太了解的我们,初次结实Redis时我们要学习什么技能呢?

  1. Redis与其他软件的相同之处和不同之处
  2. Redis的用法
  3. 使用Python示例代码与Redis进行简单的互动
  4. 使用Redis解决实际问题

这一份阿里架构师Redis使用心得,将在这几个方面给大家详细介绍如何学习Redis!

  • Redis与其他数据库和软件的对比
  • 附加特性
  • 使用Redis的理由

要掌握这些部分内容,领取这一份阿里架构师Redis使用心得,将会让你快速学习关于Redis的知识点

无论你是老司机,或者是新手,都应该需要这一本Redis使用心得,他将带着你从实战角度出发,快速构建你的知识体系!


由于头条篇幅的原因,我在这边给大家简单的截图介绍一下,有关于Redis的技术知识点我就不过多介绍了,有需要这一份阿里架构师Redis使用心得的伙伴们关注我之后私信【Redis】即可免费获取到

Redis数据结构简介

Java程序员为什么要用Redis?_Java_11

Redis数据结构简介


使用Redis构建Web应用

Java程序员为什么要用Redis?_Java开发_12

使用Redis构建Web应用(项目实战)


Redis核心概念

Java程序员为什么要用Redis?_Java开发_13

Redis核心概念(接触底层源码)


Redis实战项目

Java程序员为什么要用Redis?_Java开发_14

Redis实战项目


Redis扩展

Java程序员为什么要用Redis?_Java开发_15

Redis扩展知识广度和深度


总目录

Java程序员为什么要用Redis?_Java_16

总目录

Java程序员为什么要用Redis?_Java_17

总目录

Java程序员为什么要用Redis?_Java开发_18

总目录

过多的知识我就不一一介绍了,这一份阿里架构师Redis使用心得,是可以免费赠送给你们的!希望能让你们快速成长!

领取方式

有需要这一份PDF文档的小伙伴请转发+关注我后私信【Redis】 即可免费获取到!

记得关注我后在私信,不然回不了!