zoukankan      html  css  js  c++  java
  • Redis具体解释与常见问题解决方式

    Redis简单介绍

    redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对很多其它。包含string(字符串)、list(链表)、set(集合)、zset(sortedset --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,并且这些操作都是原子性的。在此基础上。redis支持各种不同方式的排序。

    与memcached一样,为了保证效率,数据都是缓存在内存中。

    差别的是redis会周期性的把更新的数据写入磁盘或者把改动操作写入追加的记录文件。并且在此基础上实现了master-slave(主从)同步。

    安装:

    安装Redis

    官方站点:http://redis.io/

    官方下载:http://redis.io/download 能够依据须要下载不同版本号

    windows版:https://github.com/ServiceStack/redis-windows

    下载安装包:

     

    解压启动Redis

     

    解压redis64-2.8.17版本号后,找到redis.windows.conf。改动配置文件内容,内容例如以下。

     

    支持数据结构

    redis提供五种数据类型:String,hash。list。set及zset(sortedset)。

    Redis配置文件主要參数配置

    1、指定Redis监听port,默认port为6379。

    port 6379

    2、绑定的主机地址

    bind 127.0.0.1

    3、当client闲置多长时间后关闭连接。假设指定为0,表示关闭该功能

    timeout 300

    4、指定日志记录级别。Redis总共支持四个级别:debug、verbose、notice、warning,默觉得verbose。

    loglevel verbose

    5、日志记录方式。默觉得标准输出,假设配置Redis为守护进程方式执行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null。

    logfile stdout

    6、设置数据库的数量,默认数据库为0。能够使用SELECT <dbid>命令在连接上指定数据库id。

    databases 16

    7、指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,能够多个条件配合。

    save <seconds><changes>

    8、Redis默认配置文件里提供了三个条件:

    save 900 1

    save 300 10

    save 60 10000

    分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

    9、指定存储至本地数据库时是否压缩数据,默觉得yes,Redis採用LZF压缩,假设为了节省CPU时间,能够关闭该选项。但会导致数据库文件变的巨大。

    rdbcompression yes

    10、指定本地数据库文件名称。默认值为dump.rdb。

    dbfilename dump.rdb

    11、 指定本地数据库存放文件夹。

    dir ./

    12、设置当本机为slave服务时。设置master服务的IP地址及port。在Redis启动时,它会自己主动从master进行数据同步。

    slaveof <masterip><masterport>

    13、当master服务设置了password保护时。slave服务连接master的password。

    masterauth <master-password>

    14、设置Redis连接password,假设配置了连接password,client在连接Redis时须要通过AUTH <password>命令提供password,默认关闭。

    requirepass foobared

    15、设置同一时间最大client连接数,默认无限制。Redis能够同一时候打开的client连接数为Redis进程能够打开的最大文件描写叙述符数,假设设置 maxclients 0。表示不作限制。当client连接数到达限制时,Redis会关闭新的连接并向client返回max number of clientsreached错误信息。

    maxclients 128

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

    maxmemory <bytes>

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

    默觉得no。

    appendonly no

    18、指定更新日志文件名称,默觉得appendonly.aof

    appendfilename appendonly.aof

    19、指定更新日志条件。共同拥有3个可选值:
    no:表示等操作系统进行数据缓存同步到磁盘(快)
    always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
    everysec:表示每秒同步一次(折衷。默认值)

    appendfsync everysec

    20、 设置在向client应答时,是否把较小的包合并为一个包发送,默觉得开启

    glueoutputbuf yes

    21、指定在超过一定的数量或者最大的元素超过某一临界值时,採用一种特殊的哈希算法。

    hash-max-zipmap-entries 64

    hash-max-zipmap-value 512

    22、指定是否激活重置哈希。默觉得开启(后面在介绍Redis的哈希算法时详细介绍)。

    activerehashing yes

    23、slave依据指定的时间间隔向server发送ping请求。

    时间间隔能够通过 repl_ping_slave_period 来设置。默认10秒

    repl-ping-slave-period10

    24、当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:

    (1) 假设 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应client请求,可能是正常数据。也可能是还没获得值的空数据。

    (2) 假设 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步(SYNCwith master in progress)"来处理各种请求。除了 INFO 和 SLAVEOF 命令。

    slave-serve-stale-datayes

    25、Redis主从配置

    redis支持master-slave的主从配置,配置方法是在从机的配置文件里指定slaveof參数为主机的ip和port就可以。

    slaveof 192.168.1.23 6379

    26、 指定包括其他的配置文件,能够在同一主机上多个Redis实例之间使用同一份配置文件,而同一时候各个实例又拥有自己的特定配置文件。

     include /path/to/local.conf

     include /path/to/other.conf

     

    Redis中常见异常处理以及内存CPU优化

     

    Redis常出现故障总结:

    1、当出现改动--maxheap and --heapdir

    在启动这两个版本号时都会创建一个 RedisQFork.dat文件,我不确定 RedisQFork 文件是否变小一点, 但我确定, 你能够通过设置Redis启动參数 heapdir 来调整这个文件的位置。

    我在 redis.windows.conf文件里搜索"heapdir",然后在默认凝视掉的内容以下加入一行,指定Redis内存映射文件(memory mapped file)存放的路径:

    2、redis常见异常处理

    1

    2

    3

    # heapdir指定内存映射文件路径名,不能是文件名称

    # heapdir <directory path(absoluteorrelative)>

    heapdir D:/temp/redis_heapdir/

     

    详细文件和文件夹就请你依据自己的磁盘进行指定啦. 我的症状和情况是这种, 16GB内存,Windows版64bit的Redis。启动Redis后就在C盘的C:WindowsServiceProfilesNetworkServiceAppDataLocalRedis文件夹以下生成一个16GB大小的 RedisQFork_8792.dat 文件(8792是本次启动的进程PID, 关闭redis 则此文件自己主动被删除). 本来当初为了省钱仅仅上了64GB的固态硬盘,结果16G一吃下来,C盘就仅仅有16GB空余空间,自从设置到D盘,重新启动以后,感觉强迫症就好多了。

     

    3、常见异常处理

    假设你遇到 java.net.SocketTimeoutException: Readtimed out exception的异常信息

    请尝试在构造JedisPool的时候设置自己的超时值. JedisPool默认的超时时间是2秒(单位毫秒)

    pool = new JedisPool(config, ip,port,RedisConfig.getTimeout());

     

     

    4、Redis中CPU使用效率优化

     

    将no-appendfsync-on-rewrite的配置设为yes能够缓解这个问题。设置为yes表示rewrite期间对新写操作不fsync。临时存在内存中。等rewrite完毕后再写入。

    最好是不开启Master的AOF备份功能。

    Redis也能够关闭自己主动持久化,凝视掉这些save配置,或者save “”

    假设后台保存到磁盘错误发生,将停止写操作。

    stop-writes-on-bgsave-error yes。

    使用LZF压缩rdb文件,这会耗CPU, 可是能够降低磁盘占用。

    rdbcompression yes

    保存rdb和载入rdb文件的时候检验,能够防止错误。可是要付出约10%的性能,能够关闭他,提高性能。

    rdbchecksum yes

    5、当出现下面错误时:

    VirtualAlloc/COWAlloc fail! Out Of Memory allocating 42bytes!

     

    改动:maxmemory 1024000000

    maxheap 1024000000

    Redisclient经常使用命令

     

    get key

    set  key value

    clear

    exists  key

    del key

    dbsize

    lpush  key value

    info all

    info

    monitor

    hgetall  key

     

    redis 127.0.0.1:6379> info  #查看server版本号内存使用连接等信息

     

    redis 127.0.0.1:6379> client list  #获取客户连接列表

     

    redis 127.0.0.1:6379> client kill 127.0.0.1:33441 #终止某个客户端连接

     

    redis 127.0.0.1:6379> dbsize #当前保存key的数量

     

    redis 127.0.0.1:6379> save #马上保存数据到硬盘

     

    redis 127.0.0.1:6379> bgsave #异步保存数据到硬盘

     

    redis 127.0.0.1:6379> flushdb #当前库中移除全部key

     

    redis 127.0.0.1:6379> flushall #移除全部key从全部库中

     

    redis 127.0.0.1:6379> lastsave #获取上次成功保存到硬盘的时间戳

     

    redis 127.0.0.1:6379> monitor #实时监測server接收到的请求

     

    redis 127.0.0.1:6379> slowlog len #查询慢查询日志条数

     

    redis 127.0.0.1:6379> slowlog get #返回全部的慢查询日志,最大值取决于slowlog-max-len配置

     

    redis 127.0.0.1:6379> slowlog get 2 #打印两条慢查询日志

     

    redis 127.0.0.1:6379> slowlog reset #清空慢查询日志信息


  • 相关阅读:
    经典游戏--24点--c++代码实现和总体思路(简单暴力向)
    这么多TiDB负载均衡方案总有一款适合你
    思杰( Citrix)证书的正确处置方式
    从本质彻底精通Git——4个模型1个周期1个史观1个工作流
    HttpClient客户端网络编程——高可用、高并发
    Netty之数据编码
    维吉尼亚密码加解密原理及其实现
    无网环境安装docker之--rpm
    centos7无网环境安装docker
    CentOS8.3最小化安装后安装GNome桌面
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7402635.html
Copyright © 2011-2022 走看看