1 Redis 入门

1.1 技术发展

1.1.1 web 1.0 时代

  • web 1.0 的时代,数据访问量非常有限,用一夫当关的高性能的单点服务器就可以解决大部分的问题。
  • image.png

    1.1.2 web 2.0 时代

  • 随着 web 2.0 时代的到来,用户访问量大幅度提升,同时产生了大量的用户数据,加上后来的智能移动设备的普及(移动互联网),所有的互联网平台都面临了巨大的性能挑战。

web 2.0 时代.png

1.1.3 解决 CPU 和内存压力

解决 CPU 和内存压力.png

  • 传统的 JavaWeb 是通过 session 来辨别用户的,那么 session 怎么保持一致?session 怎么存储?
  • 方案 ① :
    • 不使用 session ,使用 cookie 。
    • 后果:cookie 是客户端技术,安全性较低,而且 cookie 中保存的数据有限制。
  • 方案 ②:
    • 将 session 通过序列化等技术,保存在文件服务器或数据库里面。
    • 后果:大量的 IO ,性能低。
  • 方案 ③:
    • session 复制。
    • 后果:服务器越多,内存 及 带宽浪费越大。
  • 方案 ④:

    • 存储在缓存数据库中。
    • 优点:在内存中,速度快,数据结构简单。

      1.1.4 解决 IO 压力

      解决 IO 压力.png
  • 打破了传统关系型数据库以业务逻辑为依据的存储模式,改为针对不同的数据结构类型,选择以性能为最优先的存储方式。

    1.2 Redis 的简介

    1.2.1 关系型数据库的问题

  • 性能瓶颈:磁盘 IO 性能低下(关系型数据库存取数据的时候要走磁盘 IO 。磁盘性能本身是比较低)。

  • 扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群(关系型数据库经常会遇见多表关联,一旦多表关联过大,性能会急剧下降)。

    1.2.2 解决思路

  • 降低磁盘 IO 次数,越低越好 --> 内存存储。

  • 去除数据间关系,越简单越好 --> 不存储关系,仅存储数据。

    1.2.3 NoSQL

  • NoSQL:即 Not Only SQL(泛指非关系型数据库),作为关系型数据库的补充。

  • 作用:应对基于 海量用户海量数据 前提下的数据处理问题。
  • 特征:
    • 可扩容、可伸缩。
    • 大数据量下高性能。
    • 灵活的数据模型。
    • 高可用。
  • 常见的 NoSQL 数据库:

    • Redis。
    • memcache
    • HBASE。
    • MongoDB。
    • ……

      1.2.4 解决方案(电商场景)

  • ① 商品基本信息(MySQL):

    • 名称。
    • 价格。
    • 厂商。
  • ② 商品附加信息(MongoDB):
    • 描述。
    • 详情。
    • 评论。
  • ③ 图片信息(分布式文件系统)。
  • ④ 搜索关键字(ES、Lucene、Solr)。
  • 热点信息(Redis、tair)
    • 高频
    • 波段性

电商场景解决方案.png

1.2.5 Redis

  • 概念:Redis(Redis Directory Server) 是用 C 语言开发的一个开源的高性能的键值对(key-value)数据库。
  • 特征:
    • ① 数据间没有必然的关联关系。
    • ② 高性能(官方提供测试数据,50 个并发执行 100000 个请求,读的速度是 110000 次/s,写的速度是 81000 次/s)。
    • ③ 多数据类型支持:
      • 字符串类型:string。
      • 列表类型:list。
      • 散列类型:hash。
      • 集合类型:set。
      • 有序集合类型:sorted_set。
    • ④ 持久化支持:可以进行数据灾难数据恢复。
  • 应用:

    • 为热点数据加速查询(主要场景),比如:热点商品、热点新闻、热点资讯、推广类等高访问量信息等。
    • 任务队列,比如:秒杀、抢购、购票排队等。
    • 即时信息查询,比如:各类排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信息等。
    • 时效性信息控制,比如:验证码控制、投票控制等。
    • 分布式数据共享,比如:分布式集群架构中的 session 控制。
    • 消息队列。
    • 分布式锁。

      1.3 Redis 的下载和安装

      1.3.1 Redis 的下载

  • Windows 版本(适合零基础学习):

  • Linux 版本(适用于企业级开发):
    • Redis 高级开始使用。
    • 以 Redis 5.0.10 版本作为主版本。
    • 下载地址

      1.3.2 Redis 的安装

      1. tar -zxvf redis-5.0.5.tar.gz -C /usr/local/
      2. cd /usr/local/redis-5.0.5
      3. make
      4. #若编译失败,请检查gcc是否安装,因为redis是C语言开发的,依赖gcc。
      5. yum -y install gcc
      完成以上步骤,即可使用redis。我们可以更改redis.conf文件,配置密码,外网访问等。
      (1) 注释掉 bind 127.0.0.1 这一行(解决只能特定网段连接的限制)
      (2) 将 protected-mode 属性改为 no (关闭保护模式,不然会阻止远程访问)
      (3) 将 daemonize 属性改为 yes (这样启动时就在后台启动)
      (4) 设置密码,requirepass xxxxx(可选,个人建议还是设个密码)
      启动连接
      进入 src目录,执行启动命令:
      上面的启动方式是采取后台进程方式,下面是采取显示启动方式(如在配置文件设置了daemonize属性为yes则跟后台进程方式启动其实一样)。
      两种方式区别无非是有无带符号&的区别。 redis-server 后面是配置文件,目的是根据该配置文件的配置启动redis服务。redis.conf配置文件允许自定义多个配置文件,通过启动时指定读取哪个即可。
      进入 src 目录 : cd /usr/local/redis-5.0.5/src
      执行启动命令: ./redis-server ../redis.conf &
      接下来是连接redis:
      连接命令:./redis-cli -h 127.0.0.1 -p 6379
      登录密码: auth XXX