zoukankan      html  css  js  c++  java
  • Redis 的基础介绍

    Ø  简介

    本文主要记录 Redis 的基础介绍,包含如下内容:

    1.   Redis 简介

    2.   Redis 的适用场景

    3.   Redis 的特点

    4.   Redis 的安装与部署

    5.   Redis 的配置

    6.   Redis 的性能测试

     

    1.   Redis 简介

    Ø  Redis 是由意大利人 Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库;

    Ø  Redis 全称为:Remote Dictionary Server(远程数据服务),该软件使用 C语言编写;

    Ø  Redis 是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案,它通常被称为数据结构服务器。

    Ø  支持丰富的数据类型,例如:stringlistsetzset(sorted set)hash

    Ø  提供的 API 语言包括:CC++C#ClojureCommon LispErlangHaskellJavaJavaScriptLuaObjective-CPerlPHPPythonPuby ScalaGOTcl 等。

    Ø  Redis 官方网站:http://www.redis.io/

    Ø  尽量使用 3.2 以上版本,才具有官方提供的 Redis 集群支持(RedisCluster)。

     

    2.   Redis 的适用场景

    1)   取最新的 N 个数据的操作;

    2)   排行榜应用,取 TOP N 的操作;

    3)   需要精确设定过期时间的应用;

    4)   计数器应用;

    5)   Uniq 操作,获取某段时间所有数据排重值;

    6)   实时系统,反垃圾系统;

    7)   Pub/Sub(发布/订阅)构建实时消息系统;

    8)   构建队列系统;

    9)   缓存

     

    目前全球最大的 Redis 用户是新浪微博,在新浪有200多台物理机,400多个端口正在运行着 Redis,+4G 的数据在 Redis 上来为微博用户提供服务。

    在新浪微博 Redis 的部署场景很多,大概分为如下的 2 种:

    1)   应用程序直接访问 Redis 数据库:这样的方式存在不安全的问题,如果数据库服务断电或者死机,就会照成数据的丢失。

    2)   应用程序直接访问 Redis,只有当 Redis 访问失败时才访问 MySQL

     

    3.   Redis 的特点

    Ø  非常快速:Redis 是非常快速的,每秒可以执行大约 110000 个设置操作,81000/每秒的读取操作。

    Ø  支持丰富的数据类型:Redis 支持最大多数开发人员已经知道如列表,集合,可排序集合,哈希等数据类型。

    Ø  原子性操作:所有的 Redis 的操作都是原子,从而确保当两个客户同时访问 Redis 服务器得到的是更新后的值(最新值)。

    Ø  MultiUtility 工具:Redis 是一个多功能实用工具,可以在很多如:缓存,消息传递队列中使用(Redis 原生支持发布/订阅),在应用程序中,如:Web应用程序会话,网站页面点击数等任何短暂的数据;

    Ø  Redis 整体的特点是速度快,支持的数据类型丰富,但是并不只有 Redis 具备有这样的特点,Redis 是属于缓存数据的第二代产品了,而第一代产品就是 memcached 数据库。

    Ø  Redis Memcached 的区别

    1.   Redis 支持比 Memcached 更多的数据类型

    2.   Redis 支持主从结构Master-Slave)可以实现数据备份;

    3.   Redis 支持数据持久化,可以将数据保存到磁盘上,重启时数据依然可用。

     

    4.   Redis 的安装与部署

    1)   介绍

    1.   Redis 给出的安装包只是源代码的开发包(C程序的源文件),既然是 C 语言的文件,那么如果要想使用 Redis,就必须进行代码的编译处理。理论上这些编译的环境可以在任意的操作系统之中执行,但是考虑到实际的应用环境,更多的是在 Linux 下完成。

    2.   如果非要在 Windows 中执行,可以去下载一个 cygwin UNIX 模拟环境。

     

    2)   安装步骤

    1.   第一步:下载安装包,官方下载地址:https://redis.io/download

     

    2.   第二步:将 Redis 安装包上传到 Linux 系统之中,但是需要注意,由于给出的安装包属于源代码,所以还需要进行解压,解压到“/usr/local/src”的目录:

    tar -xzvf /jingle/redis-5.0.5.tar.gz -C /usr/local/src/

     

    3.   第三步:编译源程序

    1)   进入 Redis 源代码所在的安装目录(就是之前解压的目录)

    cd /usr/local/src/redis-5.0.5/

    2)   输入编译命令:make

    可能出现如下错误:

    1.   /bin/sh: cc: 未找到命令

    安装 gcc 即可:yum install gcc-c++ -y

    2.   zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录

    输入命令:make MALLOC=libc

     

    4.   第四步:安装 Redis

    cd src          #进入 /redis-5.0.5/src/ 目录下

    make install    #安装 Redis

     

    5.   第五步:移动文件,便于管理

    mkdir -p /usr/local/redis/bin          #创建 bin 文件夹

    mkdir -p /usr/local/redis/etc          #创建 etc 文件夹

    cd /usr/local/src/redis-5.0.5          #进入 redis 安装目录

    mv ./redis.conf /usr/local/redis/etc/   #移动 redis.conf 文件

    cd src                                 #进入 src 目录

    mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis/bin/  #将所有标绿的文件移动到 bin 目录下

     

    文件解释:

    redis-server

    Redis 服务启动程序

    redis-cli

    Redis 命令行客户端

    redis-benchmark

    性能测试工具

     

    6.   第六步:启动 Redis 服务

    1)   修改 redis.conf 配置文件,将 Redis 设置为后台启动

    daemonize no    #改为yes

    注意:设置后台启动后就不会打印 Redis-server 启动日志了,例如:

    daemonize no 的启动日志:

    clip_image002[4]

    daemonize yes 的启动日志:

    clip_image004[4]

    2)   启动 Redis 服务

    [root@localhost bin]# ./redis-server /usr/local/redis/etc/redis.conf

    3)   检查 Redis 是否启动成功

    ps -ef | grep redis         #查看程序是否启动

    或者

    !net                       #查看端口是否运行

    或者

    netstat -tunpl | grep 6379

    注:Redis 服务端的默认连接端口是6379

     

    7.   第七步:连接和退出 Redis 客户端

    /usr/local/redis/bin/redis-cli  #客户端远程连接(方式1

    /usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 #客户端远程连接(方式2

    /usr/local/redis/bin/redis-cli -a abeam. info replication   #登录后发送命令

    quit | exit                    #退出客户端

     

    8.   第八步:关闭 Redis 服务

    pkill redis-server

    或者

    killall redis-server

    或者

    /usr/local/redis/bin/redis-cli shutdown

     

    5.   Redis 的配置

    1)   配置 Redis 内存支配

    Redis 属于内存缓存数据库,那么如果是一台单独的 Redis 服务器,则应该考虑将所有的可用内存都交给 Redis 来进行支配,所以理论上还需要执行如下的一行代码:

    echo "vm.overcommit_memory=1" >> /etc/sysctl.conf

    以上命令用于设置内存的分配策略,vm.overcommit_memory 可以设置值如下:

    0表示在进行处理时首先检查是否有足够的内存供应,如果没有足够的内存供应则无法分配,内存申请失败;如果有可用内存则直接进行申请开辟;

    1表示将所有的内存都交给应用使用,而不关心当前的内存状态如何;

    2表示允许分配超过所有物理内存和交换空间的内存总和;

    再执行命令,将以上的配置写入到内核参数之中:/sbin/sysctl -p

     

    2)   Redis 数据库配置

    Redis 主要使用 redis.conf 配置文件来完成。

    1.   Redis 作为一个具备持久化功能的缓存数据库,所以一定会有一个用于数据存储的目录,一般有三类文件需要保存:Redis 运行的 pidRedis 相关的处理日志、Redis 的数据文件。

    mkdir -p /usr/local/redis/{run,logs,dbcache}

     

    2.   修改 redis.conf 的配置文件:

    vim /usr/local/redis/etc/redis.conf

    配置 Redis 运行端口

    port 6379

    配置 Redis 是否为后台运行

    daemonize yes

    设置进程保存路径

    pidfile /usr/local/redis/run/redis_6379.pid

    设置日志保存路径

    (启动 redis-server 的日志将输出在此文件中)

    logfile "/usr/local/redis/logs/redis.log"

    Redis 支持的数据库数量

    databases 16

    保存数据库文件的目录

    dir /usr/local/redis/dbcache/

     

    3)   redis.conf 配置说明

    1.   daemonize:      是否在后台运行 Redis,取值为no/yes.

    2.   pidfile:        配置多个pid的地址,默认在/var/run/redis.pid

    3.   bind:           绑定ip,设置后只接受来自该 ip 的请求

    4.   port:           监听端口,默认为6379

    5.   timeout:        设置客户端连接时的超时时间,单位为秒

    6.   loglevel:       分为4级,debugverbosenoticewarning

    7.   logfile:        配置 log 的文件地址

    8.   databases:      设置数据库的数量,默认使用的数据库为0

    9.   save:           设置 redis 进行数据库镜像的频率

    10.  rdbcompression: 在进行镜像备份时,是否进行压缩

    11.  Dbfilename:     镜像备份文件的文件名

    12.  Dir:            数据库镜像备份的文件放置路径

    13.  Slaveof:        设置数据库为其他数据库的从数据库

    14.  Masterauth:     主数据库连接需要的密码验证

    15.  Requirepass:    设置登录时需要使用的密码

    16.  Maxclients:     限制同时连接的客户数量

    17.  Maxmemory:      设置 redis 能够使用的最大内存

    18.  Appendonly:     开启 append only 模式

    19.  Appendfsync:    设置对 appendonly.aof 文件同步的频率

    20.  vm-enabled:     是否开启虚拟内存支持

    21.  vm-swap-file:   设置虚拟内存的交换文件路劲

    22.  vm-max-memory: 设置 redis 使用的最大物理内存大小

    23.  vm-page-size:   设置虚拟内存的页大小

    24.  vm-pages        设置交换文件的总的 page 数量

    25.  vm-max-threads 设置 VMIO 同时使用的线程数量

    26.  Glueoutputbuf   把小的输出缓存放在一起

    27.  hash-max-zipmap-entries 设置 hash 的临界值

    28.  Activerehashing 重新hash

     

    6.   Redis 的性能测试

    Redis 中有一个"redis-benchmark"的性能测试工具,可以直接使用该工具来观察 Redis 的运行情况,该命令所需的参数如下:

        -h <hostname>      Server hostname (default 127.0.0.1)

    -p <port>          Server port (default 6379)

    -s <socket>        Server socket (overrides host and port)

    -a <password>      Password for Redis Auth

    -c <clients>       Number of parallel connections (default 50)

    -n <requests>      Total number of requests (default 100000)

    -d <size>          Data size of SET/GET value in bytes (default 3)

    --dbnum <db>       SELECT the specified db number (default 0)

    -k <boolean>       1=keep alive 0=reconnect (default 1)

    -r <keyspacelen>   Use random keys for SET/GET/INCR, random values for SADD

      Using this option the benchmark will expand the string __rand_int__

      inside an argument with a 12 digits number in the specified range

      from 0 to keyspacelen-1. The substitution changes every time a command

      is executed. Default tests use this to hit random keys in the

      specified range.

    -P <numreq>        Pipeline <numreq> requests. Default 1 (no pipeline).

    -e                 If server replies with errors, show them on stdout.

                        (no more than 1 error per second is displayed)

    -q                 Quiet. Just show query/sec values

    --csv              Output in CSV format

    -l                 Loop. Run the tests forever

    -t <tests>         Only run the comma separated list of tests. The test

                        names are the same as the ones produced as output.

        -I                 Idle mode. Just open N idle connections and wait.

     

    范例:下面模拟1000个客户端进行数据的处理

    # /usr/local/redis/bin/redis-benchmark -h 127.0.0.1 -p 6379 -c 1000 -d 10 -n 10000

    此命令的参数含义如下:

    -h: 要连接的 Redis 服务器的地址

    -p: 要连接 Redis 的运行端口

    -c: 模拟客户端的数量

    -d: 每次操作的数据长度

    -n: 每个客户端发出的请求数量

     

    测试结果如下(以 set 命令举例):

    ====== SET ======

    65359.48 requests per second    #表示 set 请求,可以每秒65359.48次请求

  • 相关阅读:
    七. 多线程编程3.主线程
    七. 多线程编程1.线程的概念
    六. 异常处理12.断言
    liunx 安装 mysql 5.6
    idea Unable to open debugger port (127.0.0.1:58006) Address already in use: JVM_Bind 的解决办法
    liunx 安装redis 4.0
    liunx 安装jdk1.8
    idea 去除xml文件sql语句背景色
    改变数据库和表编码
    mybatis 按in 函数参数顺序排序
  • 原文地址:https://www.cnblogs.com/abeam/p/14723974.html
Copyright © 2011-2022 走看看