【第一章 初识Redis】1.2、初识Redis

in with 0 comment

Redis可以做什么

  1. 缓存

    合理的使用缓存不仅可以加快数据的访问速度,而且能够有效降低后端数据源 的压力。

  2. 排行榜系统

    Redis提供了列表和有序集合数据结构,合理地使用这些数据结构可以很方便地 构建各种排行榜系统

  3. 计数器应用

    Redis天然支持计数功能而且计数的性能也非常好

  4. 社交网络

    赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能, Redis提供的数据结构可以相对比较容易地实现这些功能。

  5. 消息队列系统

    消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、 非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能

Redis不可以做什么

在数据规模的角度看,数据可以分为大规模数据和小规模数据,Redis的数据是
存放在内存中,如果数据量到达亿级以上,经济成本相当的高。

用好Redis的建议

  1. 切勿当做黑盒试用,开发与运维同样重要

    实际运维和使用Redis的过程中,很多线上问题和故障都是由于完全把Redis当 做黑盒造成的,如果不了解Redis的单线程模型,有些开发者会在有上千万个键 的Redis上配上执行keys *操作,如果不了解持久化的相关原理,会在一个写操 作量很大的Redis上配置自动保存RDB。而且在很多公司内只有专职的关系型数 据库DBA,并没有NoSQL的相关运维人员,也就是说开发者很有可能会自己运 维Redis,对于Redis的开发者来说既是好事又是坏事。站在好的方面看,开发 人员可以通过运维Redis真正了解Redis的一些原理,不单纯停留在开发上。站 在坏的方面看,Redis的开发人员不仅要支持开发,还要承担运维的责任,而且 由于运维经验不足可能会造成线上故障。但是从实际经验来看,运维足够规模 的Redis会对用好Redis更加有帮助

  2. 阅读源码

    Redis是开源项目,作者对Redis代码的极致追求,Redis的代码量相对于许多 NoSQL数据库来说非常小,意味着作为普通的开发和运维人员也是可以吃透 Redis源码。通过阅读优秀的源码,不仅能够加深我们对于Redis的理解,而且 还能提高自身的编码水平,甚至可以对Redis做定制化,也就是说可以修改 Redis的源码来满足自身的需求。

正确安装并启动Redis

  1. 安装Redis

    Redis能兼容绝大部分的POSIX系统,例如Linux、OS X、OpenBSD、NetBSD和 FreeBSD,其中比较典型的是Linux操作系统(例如CentOS、Redhat、 Ubuntu、Debian、OS X等)。在Linux安装软件通常有两种方法,第一种是通 过各个操作系统的软件管理软件进行安装,例如CentOS有yum管理工具, Ubuntu有apt。但是由于Redis的更新速度相对较快,而这些管理工具不一定能 更新到最新版本,同时前面提到Redis的安装本身不是很复杂,所以一般推荐第 二种方式:源码的方式进行安装,整个安装只需一下六步即可完成,以3.0.7版 本为例:

    $ wget http://download.redis.io/releases/redis-3.0.7.tar.gz
    $ tar xzf redis-3.0.7.tar.gz
    $ ln -s redis-3.0.7 redis
    $ cd redis
    $ make 
    $ make install
    
    • 1) 下载Redis指定版本的源码压缩包到当前目录。
    • 2) 解压缩Redis源码压缩包。
    • 3) 建立一个redis目录的软连接,指向redis-3.0.7。
    • 4) 进入redis目录。
    • 5) 编辑(编译之前确保操作系统已经安装gcc)。
    • 6) 安装。

    这里有两点要注意:第一,第3步中建立一个redis目录的软连接,这样做是为 了不把redis目录固定在指定版本上,有利于Redis未来版本升级,算是安装软 件的一种好习惯。第二,第6步中的安装是将Redis的相关运行文件放到 /usr/local/bin/下,这样就可以在任意目录下执行Redis的命令。

  2. 在Windows中安装Redis Redis的官方并不支持微软的Windows操作系统,但是微软公司的开源技术组在 GitHub上维护了一个Redis的分支: https://gihub.com/MSOpenTech/redis

  3. Redis可执行文件说明

    可执行文件作用
    redis-server启动Redis
    redis-cliRedis命令行客户端
    redis-benchmarkRedis基准测试工具
    redis-check-aofRedis AOF持久化文件检测和修复工具
    redis-check-dumpRedis RDB持久化文件检测和修复工具
    redis-sentinel启动Redis Sentinel
  4. 配置、启动、操作、关闭Redis

    1. 默认配置

      $ redis-server

      redis-server启动Redis后,会打印出一些日志,通过日志可以看到一些 信息:

      • 当前Redis版本: 3.0.7
      • Redis的默认端口: 6379
      • Redis建议要使用配置文件来启动。
    2. 运行启动 redis-server加上要修改配置名和值(可以使多对),没有设置的配置将使用默认配置:

      # redis-server --configKey1 configValue1 --configKey2 configValue2

      例如,如果要用6380作为端口启动Redis,那么可以执行:

      # redis-server --port 6380

      虽然运行配置可以自定义配置,但是如果需要修改的配置较多或者希望将 配置保存到文件中,不建议使用这种方式。

    3. 配置文件启动

      将配置写到指定文件里,例如我们将配置写到了/opt/redis/redis.conf 中,那么只需要执行如下命令即可启动Redis:

      # redis-server /opt/redis/redis.conf

  5. Redis的基础配置

    配置名配置说明
    port端口
    logfile日志文件
    dirRedis工作目录(存放持久化文件和日志文件)
    daemonize是否已守护线程的方式启动Redis
  6. Redis命令行客户端

    redis-cli可以使用两种方式连接Redis服务器

    • 交互式方式:通过redis-cli -h {host} -p {port}的方式连接到Redis服 务,之后所有的操作都是通过交互的方式实现,不需要在执行redis-cli了,例 如:
    redis-cli -h 127.0.0.1- p 6379
    127.0.0.1:6379> set hello world
    OK
    127.0.0.1:6379> get hello
    "world"
    
    • 命令方式:用redis-cli -h {host} -p {port} {command} 就可以直接得 到命令的返回结果你,例如:
    redis-cli -h 127.0.0.1 -p 6379 get hello
    "world"
    

    这里有两点要注意:1)如果没有-h参数,那么默认连接127.0.0.1;如果没有 -p,那么默认6379端口,也即是说如果-h -p都没写就是连接127.0.0.1:6379 这个Redis实例。2)redis-cli是学习Redis的重要工具

  7. 停止Redis服务

    Redis提供了shutdown命令来停止Redis服务,例如要停掉127.0.0.1上6379端 口上的Redis服务,可以执行如下操作。

    $ redis-cli shutdown

    可以见到Redis的日志输出如下:

    # User requested shutdown...    #客户端发出的shutdown命令
    * Saving the final RDB snapshot before exiting.
    # 保存RDB持久化文件(RDB是Redis的一种持久化方式)
    * DB saved on disk              #将RDB文件保存在磁盘上
    # Redis is now ready to exit, bye bye...    #关闭
    

    当使用redis-cli再次连接该Redis服务时,看到Redis已经 “失联”。

    $ redis-cli
    Could not connect to Redis at 127.0.0.1:6379: Connection refused
    

    这里有三点需要注意一下:

    • Redis关闭的过程:断开与客户端的连接、持久化文件生成,是一种相对优雅 的关闭方式。
    • 除了可以通过shutdown命令关闭Redis服务以外,还可以通过kill进程号的 方式关闭掉Redis,但是不要粗暴的使用kill -9强制杀死Redis进程,不但不 会做持久化操作,还会造成缓冲区等资源不能被优雅关闭,极端情况会造成AOF 和复制丢失数据的情况。
    • shutdown还有一个参数,代表是否在关闭Redis前,生成持久化文件: redis-cli shutdown nosave|save