美文网首页
REDIS安装与配置

REDIS安装与配置

作者: Acceleration_8 | 来源:发表于2018-11-17 16:17 被阅读0次
    图1解说:

    当客户端调用getUser接口的查询用户信息的时候,执行顺序1、2、3、4;由于用户信息存放在DB中,所以2、3就有一次磁盘IO;这个看似非常简单业务逻辑,但是当你做架构设计的时候往往要考虑最坏的场景,或者当成千上万的用户频繁的调用这个接口应该怎么处理?如果按照上图这样的架构处理,这个看似简单业务的接口会使整个系统变慢,这样用户的请求就会长时间得不到响应.


    图2解说:

    当用客户端调用getUser接口查询用户信息的时候,getUser接口直接去redis中查询,如果redis中有该用户信息,直接返回,避免查询DB,从而避免了磁盘IO操作;如果redis中没有该用户信息,则从DB查询,并且把该用户信息存放到redis中;这样在服务接口(getUser)和DB中间,增加了一个缓存层;看似逻辑增加了,其实当面对高并发的时候,比如上边提到的频繁查询用户信息的情况,只有第一次查询有磁盘IO操作,以后只要redis中存在就没必要再查询数据库了;由于没有了磁盘IO操作,并且redis所有数据都在内存操作,所以速度回大大提升。


    redis相对于memcache提供了更丰富的数据类型,根据不同的业务场景可以选在不同的数据类型;redis本身也提供了主从模式、集群模式;也有第三方的比如codis提供了redis集群解决方案。


    下载说明:

    在https://redis.io/download下载需要的redis版本,目前5.0版本是比较稳定的,4.0版本目前是经过生产验证最多的版本


    下载完后,复制到要安装的机器上进行以下操作:

    (1.解压安装包:

    [root@mini ~]# tar xf redis-4.0.11.tar.gz -C /usr/local    ///解压到你指定的路径


    (2.进入解压的文件中编译安装:

    [root@mini ~]# cd /usr/local/redis-4.0.11/

    [root@mini redis-4.0.11]# make -j 4     ///4表示cpu数,实际据服务器配置决定


    问题:

    redis编译报致命错误:jemalloc/jemalloc.h:没有那个文件或目录

    解决:编译时加一个参数:

    make MALLOC=libc


    (3.启动服务:

    [root@mini redis-4.0.11]# ./src/redis-server /usr/local/redis-4.0.11/redis.conf &  //注意安装路径

    图3出现界面说明安装成功了

    (4.打开操作界面:

    [root@mini redis-4.0.11]# ./src/redis-cli -h 172.0.0.0.1       ////后面写本机ip


    (5.配置文件:

    [root@mini redis-4.0.11]# vim /usr/local/redis-4.0.11/redis.conf

    # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.

    daemonize yes

    # 默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。

    # nothing bad happens, the server will start and run normally.

    pidfile /var/run/redis_6379.pid

    # 当redis作为守护进程运行的时候,它会把 pid 默认写到 /var/run/redis.pid 文件里面,你也可以指定写入的位置

    # in order to get the desired effect.

    tcp-backlog 511

    # TCP 监听的最大容纳数量

    # 在高并发的环境下,你需要把这个值调高以避免客户端连接缓慢的问题。

    # Examples:

      bind 127.0.0.1 ::1    192.168.1.100 

    # 默认情况下,redis 在 server 上所有有效的网络接口上监听客户端连接。

    # 你如果只想让它在一个网络接口上监听,那你就绑定一个IP或者多个IP。

    # Close the connection after a client is idle for N seconds (0 to disable)

    timeout 0

    # 指定在一个 client 空闲多少秒之后关闭连接(0 就是不管它)

    # Redis default starting with Redis 3.2.1.

    tcp-keepalive 0

    # tcp 心跳包

    # 如果设置为非零,则在与客户端缺乏通讯的时候使用 SO_KEEPALIVE 发送 tcp acks 给客户端。

    # debug (a lot of information, useful for development/testing)

    # verbose (many rarely useful info, but not a mess like the debug level)

    # notice (moderately verbose, what you want in production probably)

    # warning (only very important / critical messages are logged)

    loglevel notice

    # 定义日志级别(debug,verbose,notice,warning)

    # output for logging but daemonize, logs will be sent to /dev/null

    logfile ""

    # 指定日志文件的位置

    # Set the number of databases. The default database is DB 0, you can select

    # a different one on a per-connection basis using SELECT <dbid> where

    # dbid is a number between 0 and 'databases'-1

    databases 16

    # 设置数据库的数目。

    # 默认数据库是 DB 0,你可以在每个连接上使用 select 命令选择一个不同的数据库,

    # 但是 dbid 必须是一个介于 0 到 databasees - 1 之间的值

    # However if you have setup your proper monitoring of the Redis server

    # and persistence, you may want to disable this feature so that Redis will

    # continue to work as usual even if there are problems with disk,

    # permissions, and so forth.

    stop-writes-on-bgsave-error yes

    # 默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作,

    # 这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘,

    # 否则就会没人注意到灾难的发生。

    # 如果后台保存进程重新启动工作了,redis 也将自动的允许写操作。

    # the dataset will likely be bigger if you have compressible values or keys.

    rdbcompression yes

    # 是否在 dump .rdb 数据库的时候使用 LZF 压缩字符串

    # 默认都设为 yes

    # 如果你希望保存子进程节省点 cpu ,你就设置它为 no ,

    # 不过这个数据集可能就会比较大

    # tell the loading code to skip the check.

    rdbchecksum yes

    # 是否校验rdb文件

    # The filename where to dump the DB

    dbfilename dump.rdb

    # 设置 dump 的文件位置

    # Note that you must specify a directory here, not a file name.

    dir ./

    #指定本地数据库存放目录

    slaveof <masterip> <masterport>

    #设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

    masterauth <master-password>

    #当master服务设置了密码保护时,slave服务连接master的密码

    equirepass foobared

    #设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭

    maxclients 10000

    #设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息

    maxmemory <bytes>

    #指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区

    appendonly no

    指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

    appendfilename "appendonly.aof"

    #指定更新日志文件名,默认为appendonly.aof

    appendfsync everysec

    #指定更新日志条件,共有3个可选值:

    no:表示等操作系统进行数据缓存同步到磁盘(快)

    always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)

    everysec:表示每秒同步一次(折衷,默认值)

    activerehashing yes

    指定是否激活重置哈希,默认为开启

    include /path/to/local.conf

    #指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

    以上就是redis的基本配置


    相关文章

      网友评论

          本文标题:REDIS安装与配置

          本文链接:https://www.haomeiwen.com/subject/cwsbfqtx.html