zoukankan      html  css  js  c++  java
  • Redis 应用

    Redis 应用

    一、Redis 应用

    1.1.1 Redis 介绍

    1. Redis 介绍
    Redis 是一种基于键值对(key value)的 NoSQL(非关系型) 数据库,与很多键值对数据库不同,
    redis 中的值可以有    string,hash,list,set,zset,geo 等多种数据结构和算法组成. 因为 Redis
    会将所有的数据都放在内存中,所以他的读写性能非常惊人. 不仅如此,Redis  
    还可以将内存中的数据利用快照和日志的形式保存到硬盘上 Redis 还提供了键过期,发布订阅,事务,流水线等附加功能. 
    
    1. Redis 特点
    1.速度快  Redis 所有的数据都存放在内存中  Redis 使用 C 语言实现  Redis 使用单线程架构 
    2.基于键值对的数据结构服务器  支持5种数据结构:字符串,哈希,列表,集合,有序集合 
    3.丰富的功能  提供了键过期功能,可以实现缓存  提供了发布订阅功能,可以实现消息系统  提供了 pipeline 功能,客户端可以将一批命令一次性传到 Redis,减少了网络开销
    4.简单稳定  源码很少,3.0 版本以后 5 万行左右.  使用单线程模型法,是的 Redis 服务端处理模型变得简单.  不依赖操作系统的中的类库 
    5.客户端语言多   java,PHP,python,C,C++,Nodejs 等 
    6.持久化  RDB 和 AOF 
    7.主从复制 
    8.高可用和分布式  哨兵  集群 
    
    1. 应用场景
    1.缓存-键过期时间
    缓存 session 会话  缓存用户信息,找不到再去 mysql 查,查到然后回写到 redis 
    2.排行榜-列表&有序集合  热度排名排行榜  发布时间排行榜 
    3.计数器应用-天然支持计数器  帖子浏览数  视频播放次数  商品浏览数 
    4.社交网络-集合  踩/赞,粉丝,共同好友/喜好,推送,打标签
    5.消息队列系统-发布订阅  配合 elk 实现日志收集 
    

    1.1.2 Redis环境部署

    1. Redis环境部署
    #db01 db02 db03 都要操作
    [root@db01 ~]# cat >/etc/hosts<<EOF
    > 10.4.7.51 db01
    > 10.4.7.52 db02
    > 10.4.7.53 db03
    > EOF
    [root@db01 ~]# tail -3 /etc/hosts
    10.4.7.51 db01
    10.4.7.52 db02
    10.4.7.53 db03
    
    创建存放Redis配置的目录
    [root@db03 ~]# mkdir -p /data/soft 
    [root@db03 ~]# mkdir -p /data/redis_cluster/redis_6379 
    [root@db03 ~]# mkdir -p /opt/redis_cluster/redis_6379/{conf,pid,logs} 
    
    下载Redis:
    http://download.redis.io/releases/
    [root@db03 /data/soft]# wget http://download.redis.io/releases/redis-3.2.9.tar.gz 
    --2020-07-08 15:18:51--  http://download.redis.io/releases/redis-3.2.9.tar.gz
    Resolving download.redis.io (download.redis.io)... 45.60.125.1
    Connecting to download.redis.io (download.redis.io)|45.60.125.1|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 1547695 (1.5M) [application/octet-stream]
    Saving to: ‘redis-3.2.9.tar.gz’
    
    100%[===========================================================================================>] 1,547,695   7.23KB/s   in 6m 50s 
    
    2020-07-08 15:25:53 (3.69 KB/s) - ‘redis-3.2.9.tar.gz’ saved [1547695/1547695]
    
    [root@db03 /data/soft]# ll
    total 1512
    -rw-r--r-- 1 root root 1547695 Jun 27 23:51 redis-3.2.9.tar.gz
    
    解压Redis
    [root@db03 /data/soft]# tar zxf redis-3.2.9.tar.gz -C /opt/redis_cluster/ 
    [root@db03 /data/soft]# ll /opt/redis_cluster/
    total 0
    drwxrwxr-x 6 root root 309 May 17  2017 redis-3.2.9
    drwxr-xr-x 5 root root  41 Jul  8 15:17 redis_6379
    
    make安装Redis
    [root@db03 /data/soft]# cd /opt/redis_cluster/redis-3.2.9/
    [root@db03 /opt/redis_cluster/redis-3.2.9]#  make && make install #make install 可以在这里执行,也可以cd ./src 下面去执行 make install
    
    做软连接
    [root@db03 /opt/redis_cluster/redis-3.2.9]# ln -s /opt/redis_cluster/redis-3.2.9/ /opt/redis_cluster/redis
    [root@db03 /opt/redis_cluster/redis-3.2.9]# ll -ld /opt/redis_cluster/redis
    lrwxrwxrwx 1 root root 31 Jul  8 15:59 /opt/redis_cluster/redis -> /opt/redis_cluster/redis-3.2.9/
    
    安装完成后的可执行文件
    redis-benchmark  
    redis-check-aof  
    redis-check-rdb  
    redis-cli  			#客户端连接工具
    redis-sentinel  	#哨兵服务端
    redis-server		#服务端
    
    1. Redis的配置文件
    [root@db03 /opt/redis_cluster/redis]# grep "^[a-Z]" /opt/redis_cluster/redis/redis.conf 
    bind 127.0.0.1
    protected-mode yes
    port 6379
    tcp-backlog 511
    timeout 0
    tcp-keepalive 300
    daemonize yes
    supervised no
    pidfile /var/run/redis_6379.pid
    loglevel notice
    logfile ""
    databases 16
    save 900 1
    save 300 10
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb
    dir ./
    slave-serve-stale-data yes
    slave-read-only yes
    repl-diskless-sync no
    repl-diskless-sync-delay 5
    repl-disable-tcp-nodelay no
    slave-priority 100
    appendonly no
    appendfilename "appendonly.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    aof-load-truncated yes
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    latency-monitor-threshold 0
    notify-keyspace-events ""
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-size -2
    list-compress-depth 0
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    hll-sparse-max-bytes 3000
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    aof-rewrite-incremental-fsync yes
    
    按自己需求配置文件
    [root@db03 /opt/redis_cluster/redis]# cp redis.conf{,.bak}
    [root@db03 /opt/redis_cluster/redis]# cat > /opt/redis_cluster/redis_6379/conf/redis_6379.conf <<EOF 
    ### 以守护进程模式启动 
    daemonize yes 
    ### 绑定的主机地址 
    bind 10.4.7.51 127.0.0.1 
    ### 监听端口 
    port 6379 
    ### pid 文件和 log 文件的保存地址 
    pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid 
    logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log 
    ### 设置数据库的数量,默认数据库为 0 
    databases 16 
    ### 指定本地持久化文件的文件名,默认是 dump.rdb 
    dbfilename redis_6379.rdb 
    ### 本地数据库的目录 
    dir /data/redis_cluster/redis_6379 
    EOF
    
    1. 启动和关闭Redis服务
    启动:
    [root@db03 ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
    [root@db03 ~]# ss -luntp|grep 63
    tcp    LISTEN     0      511    127.0.0.1:6379                  *:*                   users:(("redis-server",pid=7998,fd=5))
    tcp    LISTEN     0      511    10.4.7.53:6379                  *:*                   users:(("redis-server",pid=7998,fd=4))
    
    关闭
    [root@db03 ~]# redis-cli -h db03 shutdown
    [root@db03 ~]# redis-cli -h 10.4.7.53  shutdown
    

    1.1.3 Redis 基本操作命令

    Redis 有 5 种数据结构,他们是键值对中的值,对于键来说有一些通用的命令.

    1. 字符串操作
      Redis 并不是简单地 key-value 存储,实际上他是一个数据结构服务器,支持不同类型的值
      Redis Strings 这是最简单的 Redis 类型,如果你只用这种类型,Redis 就像一个持久化的 memcache 服务器 (注:memcache 的数据仅保存在内存中,服务器重启后,数据将丢失.)
      通常用 SET command 和 GET command 来设置和获取字符串值
    [root@db03 ~]# redis-cli -h 10.4.7.53 
    10.4.7.53:6379> keys *             #查看所有的key
    (empty list or set) 
    10.4.7.53:6379> set name git       #设置key
    OK
    10.4.7.53:6379> get name           #检查key
    "git"
    
    也可以非交互式的操作
    [root@db03 ~]# redis-cli -h 10.4.7.53 set name hub
    OK
    [root@db03 ~]# redis-cli -h 10.4.7.53 get name 
    "hub"
    
    [root@db03 ~]# echo "你努力获得的,都是自己的,不容易忘掉。 星辰和大海都需要门票,诗和远方的路费都很贵。来人间一次,努力成为最好的自 己。人间值得,未来可期." >test.txt
    [root@db03 ~]# cat test.txt 
    你努力获得的,都是自己的,不容易忘掉。 星辰和大海都需要门票,诗和远方的路费都很贵。来人间一次,努力成为最好的自己。人间值得,未来可期.
    
    [root@db03 ~]# redis-cli -h 10.4.7.53 set txt "$(cat test.txt)"
    OK
    [root@db03 ~]# redis-cli -h 10.4.7.53 get txt
    "xe4xbdxa0xe5x8axaaxe5x8ax9bxe8x8exb7xe5xbex97xe7x9ax84xefxbcx8cxe9x83xbdxe6x98xafxe8x87xaaxe5xb7xb1xe7x9ax84xefxbcx8cxe4xb8x8dxe5xaexb9xe6x98x93xe5xbfx98xe6x8ex89xe3x80x82 xe6x98x9fxe8xbexb0xe5x92x8cxe5xa4xa7xe6xb5xb7xe9x83xbdxe9x9cx80xe8xa6x81xe9x97xa8xe7xa5xa8xefxbcx8cxe8xafx97xe5x92x8cxe8xbfx9cxe6x96xb9xe7x9ax84xe8xb7xafxe8xb4xb9xe9x83xbdxe5xbex88xe8xb4xb5xe3x80x82xe6x9dxa5xe4xbaxbaxe9x97xb4xe4xb8x80xe6xacxa1xefxbcx8cxe5x8axaaxe5x8ax9bxe6x88x90xe4xb8xbaxe6x9cx80xe5xa5xbdxe7x9ax84xe8x87xaaxe5xb7xb1xe3x80x82xe4xbaxbaxe9x97xb4xe5x80xbcxe5xbex97xefxbcx8cxe6x9cxaaxe6x9dxa5xe5x8fxafxe6x9cx9f."
    [root@db03 ~]# redis-cli  get txt >rad.log
    [root@db03 ~]# cat rad.log 
    你努力获得的,都是自己的,不容易忘掉。 星辰和大海都需要门票,诗和远方的路费都很贵。来人间一次,努力成为最好的自己。人间值得,未来可期.
    
    查找所有key (生产中不能使用)
    [root@db03 ~]# redis-cli  -h 10.4.7.53 keys "*"
    1) "txt"
    2) "read"
    3) "name"
    查找某一个key
    [root@db03 ~]# redis-cli  -h 10.4.7.53 keys name
    1) "name"
    
    统计可以的数量
    [root@db03 ~]# redis-cli  -h 10.4.7.53 dbsize
    (integer) 3
    
    查看某一个的类型
    [root@db03 ~]# redis-cli  -h 10.4.7.53 type name
    string
    
    INCR(加1)命令将字符串值解析成整型.将其加 1,最后结果保存为新的字符串,类似命令: INCRBY(加 n), DECR(减1),DECRBY(减 n)
    
    [root@db03 ~]# redis-cli  -h 10.4.7.53 
    10.4.7.53:6379> set num 100
    OK
    10.4.7.53:6379> get num
    "100"
    10.4.7.53:6379> type num
    string
    10.4.7.53:6379> incr num
    (integer) 101
    10.4.7.53:6379> incrby num 10
    (integer) 111
    10.4.7.53:6379> get num
    "111"
    
    10.4.7.53:6379> get num
    "111"
    10.4.7.53:6379> decr num
    (integer) 110
    10.4.7.53:6379> decrby num 10
    (integer) 100
    
    MSET 和 MGET 可以一次存储或获取多个 key 对应的值. 
    
    10.4.7.53:6379> mset k2 v2 k3 v3 k4 v4
    OK
    10.4.7.53:6379> mget k1 name  k2  k3  k4 
    1) (nil)
    2) "hub"
    3) "v2"
    4) "v3"
    5) "v4"
    
    EXISTS 命令返回 1(存在) 或 0(不存在) 标识给定 key 的值是否存在. 
    使用 DEL 命令可以删除 key 对应的值, 
    DEL 命令返回 1(存在且被删除) 或 0(不存在没被删除) 标识是被删除(值存在)或者没被删除(key 对应的值不存在). 
    
    查看某一个key存不存在
    
    10.4.7.53:6379> exists k9
    (integer) 0
    10.4.7.53:6379> exists k2
    (integer) 1
    
    删除key
    10.4.7.53:6379> del k9
    (integer) 0
    10.4.7.53:6379> del k2
    (integer) 1
    
    可以对 key 设置一个超时时间,当这个时间到达后被删除
    
    查看某个key的过期时间 ttl
    10.4.7.53:6379> ttl name
    (integer) -1    #- 表示永不过期
    
    给某一个key添加过期时间 expire
    10.4.7.53:6379> expire k3 10
    (integer) 1             
    10.4.7.53:6379> ttl k3
    (integer) 4
    10.4.7.53:6379> ttl k3
    (integer) 3
    10.4.7.53:6379> ttl k3
    (integer) 2
    10.4.7.53:6379> ttl k3
    (integer) 2
    10.4.7.53:6379> ttl k3
    (integer) -2    #表示已经过期并已删除key
    
    10.4.7.53:6379> get k3
    (nil)                    #已经不存在key值了,说明k3不存在
    
    PERSIST 命令去除超时时间
    
    10.4.7.53:6379> EXPIRE txt 100
    (integer) 1
    10.4.7.53:6379> ttl txt
    (integer) 94
    10.4.7.53:6379> ttl txt
    (integer) 92
    10.4.7.53:6379> ttl txt
    (integer) 91
    10.4.7.53:6379> ttl txt
    (integer) 89
    
    10.4.7.53:6379> PERSIST txt  #取消txt的超时时间
    (integer) 1
    10.4.7.53:6379> ttl txt 
    (integer) -1                 #-1 txt 永不过期
    
    1. 列表操作
      LPUSH 命令可向 list 的左边(头部)添加一个新元素
      LPOP 命令可向 list 的右边(尾部)删除一个新元素.
      RPUSH 命令可向 list 的右边(尾部)添加一个新元素.
      RPOP 命令可向 list 的右边(尾部)删除一个新元素.
      最后 LRANGE 可以从 list 中取出一定范围的元素
    10.4.7.53:6379> RPUSH list1  A
    (integer) 1
    10.4.7.53:6379> RPUSH list1  B
    (integer) 2
    10.4.7.53:6379> RPUSH list1  C
    (integer) 3
    
    0.4.7.53:6379> LPUSH list1 top1
    (integer) 4
    10.4.7.53:6379> LPUSH list1 top2
    (integer) 5
    
    10.4.7.53:6379> LRANGE list1 0 -1
    1) "top2"
    2) "top1"
    3) "A"
    4) "B"
    5) "C"
    
    10.4.7.53:6379> LRANGE list1 0 5
    1) "top2"
    2) "top1"
    3) "A"
    4) "B"
    5) "C"
    
    10.4.7.53:6379> RPOP list1
    "C"
    10.4.7.53:6379> LRANGE list1 0 -1
    1) "top2"
    2) "top1"
    3) "A"
    4) "B"
    
    10.4.7.53:6379> LPOP list1
    "top2"
    10.4.7.53:6379> LRANGE list1 0 -1
    1) "top1"
    2) "A"
    3) "B"
    
    1. 哈希操作
      Hash 看起来就像一个’hash’的样子.由键值对组成
      HMSET 指令设置 hash 中的多个域
      HGET 取回单个域.
      HMGET 取回一系列的值
    10.4.7.53:6379> HMSET user:100 username zhansan age 27 job it
    OK
    
    10.4.7.53:6379> HMGET user:100 username 
    1) "zhansan"
    10.4.7.53:6379> HMGET user:100 username age
    1) "zhansan"
    2) "27"
    10.4.7.53:6379> HMGET user:100 username age job
    1) "zhansan"
    2) "27"
    3) "it"
    
    10.4.7.53:6379> HGETALL user:100
    1) "username"
    2) "zhansan"
    3) "age"
    4) "27"
    5) "job"
    6) "it"
    
    10.4.7.53:6379> HMSET user:100 email 446424543@qq.com
    OK
    10.4.7.53:6379> HGETALL user:100
    1) "username"
    2) "zhansan"
    3) "age"
    4) "27"
    5) "job"
    6) "it"
    7) "email"
    8) "446424543@qq.com"
    
    1. 集合操作
      集合是字符串的无序排列,
      SADD 指令把新的元素添加到 set 中
    10.4.7.53:6379> SADD set1 1 2 3 5 7
    (integer) 5
    10.4.7.53:6379> SADD set1 11
    (integer) 1
    10.4.7.53:6379> SMEMBERS set1
    1) "1"
    2) "2"
    3) "3"
    4) "5"
    5) "7"
    6) "11"
    
    10.4.7.53:6379> SADD set2 3 6 8 5 7
    (integer) 5
    10.4.7.53:6379> SMEMBERS set2
    1) "3"
    2) "5"
    3) "6"
    4) "7"
    5) "8"
    
    Sdiff 计算集合的差异成员 
    10.4.7.53:6379> SDIFF set1 set2  
    1) "1"
    2) "2"
    3) "11"
    
    10.4.7.53:6379> SADD set3 1 5 12 9
    (integer) 4
    10.4.7.53:6379> SMEMBERS set3
    1) "1"
    2) "5"
    3) "9"
    4) "12"
    
    10.4.7.53:6379> SDIFF set1 set2 set3
    1) "2"
    2) "11"
    
    Sinter 计算集合的交集 
    10.4.7.53:6379> SINTER set1 set2 set3
    1) "5"
    
    10.4.7.53:6379> SINTER set1 set2 
    1) "3"
    2) "5"
    3) "7"
    
    10.4.7.53:6379> SINTER set2 set3 
    1) "5"
    
    10.4.7.53:6379> SINTER set1 set3 
    1) "1"
    2) "5"
    
    Srem 用来删除指定的值 
    10.4.7.53:6379> SREM set1 1
    (integer) 1
    10.4.7.53:6379> SMEMBERS set1
    1) "2"
    2) "3"
    3) "5"
    4) "7"
    5) "11"
    10.4.7.53:6379> SREM set1 11
    (integer) 1
    10.4.7.53:6379> SMEMBERS set1
    1) "2"
    2) "3"
    3) "5"
    4) "7"
    
    Sunion 计算集合并集 
    10.4.7.53:6379> SUNION set1 set2 set3
    1) "1"
    2) "2"
    3) "3"
    4) "5"
    5) "6"
    6) "7"
    7) "8"
    8) "9"
    9) "12"
    

    1.1.4 Redis 持久化配置

    1. Redis 持久化介绍

    可以在指定的时间间隔内生成数据集的 时间点快照(point-in-time snapshot)。
    优点:速度快,适合于用做备份,主从复制也是基于 RDB 持久化功能实现的。
    缺点:会有数据丢失

    1. 配置Redis持久化
    rdb持久化参数配置
    dbfilename redis_6379.rdb    #持久化文件名
    dir /data/redis_cluster/redis_6379  #本地数据库的目录 
    save 900 1                #900 秒(15 分钟)内有 1 个更改 
    save 300 10               #300 秒(5 分钟)内有 10 个更改 
    save 60 10000             #60 秒内有 10000 个更改   
    
    [root@db03 ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
    [root@db03 ~]# ss -luntp|grep 63
    tcp    LISTEN     0      511    127.0.0.1:6379                  *:*                   users:(("redis-server",pid=1804,fd=5))
    tcp    LISTEN     0      511    10.4.7.53:6379                  *:*                   users:(("redis-server",pid=1804,fd=4))
    
    10.4.7.53:6379> BGSAVE
    Background saving started
    
    测试:
    [root@db03 ~]# for i in {1..10000};do redis-cli -h 10.4.7.53 set k_${i} v_${i}; echo "k_${i} is ok";done
    OK
    k_1 is ok
    OK
    k_2 is ok
    OK
    k_3 is ok
    OK
    ....
    。
    在配置文件里定义数据目录下就会出现数据文件
    [root@db03 ~]# ll /data/redis_cluster/redis_6379/
    total 148
    -rw-r--r-- 1 root root 147877 Jul  9 13:54 redis_6379.rdb
    
    
    查看总共插入的数据
    [root@db03 ~]# redis-cli -h 10.4.7.53 
    10.4.7.53:6379> DBSIZE
    (integer) 10001
    
    查看信息
    10.4.7.53:6379> info
    # Server
    redis_version:3.2.9
    redis_git_sha1:00000000
    redis_git_dirty:0
    redis_build_id:7310ac1fcaf4a5a2
    redis_mode:standalone
    os:Linux 3.10.0-1062.18.1.el7.x86_64 x86_64
    arch_bits:64
    multiplexing_api:epoll
    gcc_version:4.8.5
    process_id:1804
    run_id:14be9cdc06d6867fd5ede7b533b0ab86bf5e9438
    tcp_port:6379
    uptime_in_seconds:785
    uptime_in_days:0
    hz:10
    lru_clock:436233
    executable:/root/redis-server
    config_file:/opt/redis_cluster/redis_6379/conf/redis_6379.conf
    
    # Clients
    connected_clients:1
    client_longest_output_list:0
    client_biggest_input_buf:0
    blocked_clients:0
    
    # Memory
    used_memory:1591944
    used_memory_human:1.52M
    used_memory_rss:7823360
    used_memory_rss_human:7.46M
    used_memory_peak:1591944
    used_memory_peak_human:1.52M
    total_system_memory:2076594176
    total_system_memory_human:1.93G
    used_memory_lua:37888
    used_memory_lua_human:37.00K
    maxmemory:0
    maxmemory_human:0B
    maxmemory_policy:noeviction
    mem_fragmentation_ratio:4.91
    mem_allocator:jemalloc-4.0.3
    
    # Persistence
    loading:0
    rdb_changes_since_last_save:0
    rdb_bgsave_in_progress:0
    rdb_last_save_time:1594271376
    rdb_last_bgsave_status:ok
    rdb_last_bgsave_time_sec:0
    rdb_current_bgsave_time_sec:-1
    aof_enabled:0
    aof_rewrite_in_progress:0
    aof_rewrite_scheduled:0
    aof_last_rewrite_time_sec:-1
    aof_current_rewrite_time_sec:-1
    aof_last_bgrewrite_status:ok
    aof_last_write_status:ok
    
    # Stats
    total_connections_received:11616
    total_commands_processed:11087
    instantaneous_ops_per_sec:0
    total_net_input_bytes:420076
    total_net_output_bytes:6157330
    instantaneous_input_kbps:0.00
    instantaneous_output_kbps:0.00
    rejected_connections:0
    sync_full:0
    sync_partial_ok:0
    sync_partial_err:0
    expired_keys:0
    evicted_keys:0
    keyspace_hits:0
    keyspace_misses:0
    pubsub_channels:0
    pubsub_patterns:0
    latest_fork_usec:306
    migrate_cached_sockets:0
    
    # Replication
    role:master
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    
    # CPU
    used_cpu_sys:1.88
    used_cpu_user:1.30
    used_cpu_sys_children:0.06
    used_cpu_user_children:0.00
    
    # Cluster
    cluster_enabled:0
    
    # Keyspace
    db0:keys=10001,expires=0,avg_ttl=0
    
    
    AOF 持久化配置 
    记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。  
    AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 
    优点:可以最大程度保证数据不丢 
    缺点:日志记录量级比较大 
     
    appendfilename "appendonly.aof"  #文件名
    appendonly yes      #是否打开 aof 日志功能 
    appendfsync always   #每 1 个命令,都立即同步到 aof 
    appendfsync everysec #每秒写 1 次 
    appendfsync no       #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到 aof.
    
    重启redis:
    [root@db03 ~]# !redis-server
    redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
    
    [root@db03 ~]# !ll
    ll /data/redis_cluster/redis_6379/
    total 1272
    -rw-r--r-- 1 root root 757811 Jul  9 14:37 appendonly.aof
    -rw-r--r-- 1 root root 317880 Jul  9 14:30 redis_6379.rdb
    
    [root@db03 ~]# redis-cli -h 10.4.7.53
    10.4.7.53:6379> keys *
        1) "k_3163"
        2) "k_4212"
        3) "k_19250"
        4) "k_8028"
        5) "k_18115"
    ....
    。
    #两种持久方式可以同时开启(并存)
    总结:
    持久化
    rdb 
    优点:恢复速度快,空间小
    缺点:可能会丢失
    
    aof 
    优点:数据安全,不容易丢失
    缺点:恢复速度慢,空间大
    
    Redis有个功能可以在线(热更新)某些配置参数(重启失效)
    使用CONFIG GET * 可以查看配置参数(包括手动和默认的)
    10.4.7.53:6379> CONFIG GET *
      1) "dbfilename"
      2) "redis_6379.rdb"
      3) "requirepass"
      4) ""
      5) "masterauth"
      6) ""
      7) "unixsocket"
      8) ""
      9) "logfile"
     10) "/opt/redis_cluster/redis_6379/logs/redis_6379.log"
     11) "pidfile"
     12) "/opt/redis_cluster/redis_6379/pid/redis_6379.pid"
     13) "slave-announce-ip"
     14) ""
     15) "maxmemory"
     16) "0"
     17) "maxmemory-samples"
     18) "5"
     19) "timeout"
     20) "0"
     21) "auto-aof-rewrite-percentage"
     22) "100"
     23) "auto-aof-rewrite-min-size"
     24) "67108864"
     25) "hash-max-ziplist-entries"
     26) "512"
     27) "hash-max-ziplist-value"
     28) "64"
     29) "list-max-ziplist-size"
     30) "-2"
     31) "list-compress-depth"
     32) "0"
     33) "set-max-intset-entries"
     34) "512"
     35) "zset-max-ziplist-entries"
     36) "128"
     37) "zset-max-ziplist-value"
     38) "64"
     39) "hll-sparse-max-bytes"
     40) "3000"
     41) "lua-time-limit"
     42) "5000"
     43) "slowlog-log-slower-than"
     44) "10000"
     45) "latency-monitor-threshold"
     46) "0"
     47) "slowlog-max-len"
     48) "128"
     49) "port"
     50) "6379"
     51) "tcp-backlog"
     52) "511"
     53) "databases"
     54) "16"
     55) "repl-ping-slave-period"
     56) "10"
     57) "repl-timeout"
     58) "60"
     59) "repl-backlog-size"
     60) "1048576"
     61) "repl-backlog-ttl"
     62) "3600"
     63) "maxclients"
     64) "10000"
     65) "watchdog-period"
     66) "0"
     67) "slave-priority"
     68) "100"
     69) "slave-announce-port"
     70) "0"
     71) "min-slaves-to-write"
     72) "0"
     73) "min-slaves-max-lag"
     74) "10"
     75) "hz"
     76) "10"
     77) "cluster-node-timeout"
     78) "15000"
     79) "cluster-migration-barrier"
     80) "1"
     81) "cluster-slave-validity-factor"
     82) "10"
     83) "repl-diskless-sync-delay"
     84) "5"
     85) "tcp-keepalive"
     86) "300"
     87) "cluster-require-full-coverage"
     88) "yes"
     89) "no-appendfsync-on-rewrite"
     90) "no"
     91) "slave-serve-stale-data"
     92) "yes"
     93) "slave-read-only"
     94) "yes"
     95) "stop-writes-on-bgsave-error"
     96) "yes"
     97) "daemonize"
     98) "yes"
     99) "rdbcompression"
    100) "yes"
    101) "rdbchecksum"
    102) "yes"
    103) "activerehashing"
    104) "yes"
    105) "protected-mode"
    106) "yes"
    107) "repl-disable-tcp-nodelay"
    108) "no"
    109) "repl-diskless-sync"
    110) "no"
    111) "aof-rewrite-incremental-fsync"
    112) "yes"
    113) "aof-load-truncated"
    114) "yes"
    115) "maxmemory-policy"
    116) "noeviction"
    117) "loglevel"
    118) "notice"
    119) "supervised"
    120) "no"
    121) "appendfsync"
    122) "no"
    123) "syslog-facility"
    124) "local0"
    125) "appendonly"
    126) "yes"
    127) "dir"
    128) "/data/redis_cluster/redis_6379"
    129) "save"
    130) ""
    131) "client-output-buffer-limit"
    132) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
    133) "unixsocketperm"
    134) "0"
    135) "slaveof"
    136) ""
    137) "notify-keyspace-events"
    138) ""
    139) "bind"
    140) "10.4.7.53 127.0.0.1"
    
    10.4.7.53:6379> CONFIG GET save
    1) "save"
    2) ""
    10.4.7.53:6379> CONFIG SET save "60 100 300 10 600 1"
    OK
    10.4.7.53:6379> CONFIG GET save
    1) "save"
    2) "60 100 300 10 600 1"
    

    1.1.5 Redis安全认证

    1. Redis安全认证
      redis 默认开启了保护模式,只允许本地回环地址登录并访问数据库。
    禁止 protected-mode 
    protected-mode yes/no (保护模式,是否只允许本地访问) 
    
    Bind :指定 IP 进行监听 
    [root@db03 ~]# vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
    bind 10.4.7.53  127.0.0.1 
    
    增加 requirepass  {password}  认证
    [root@db03 ~]# vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
    requirepass 123456
    
    第一种验证方法:
    [root@db03 ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
    [root@db03 ~]# redis-cli -h 10.4.7.53
    10.4.7.53:6379> keys *
    (error) NOAUTH Authentication required. #需要进行身份验证
    10.4.7.53:6379> AUTH 123456
    OK
    10.4.7.53:6379> set name zhangsan
    OK
    10.4.7.53:6379> get name
    "zhangsan"
    
    第二种验证方法:
    [root@db03 ~]# redis-cli -h 10.4.7.53 -a 123456
    10.4.7.53:6379> hmset user:100 username zhangsan age 27 job it
    OK
    10.4.7.53:6379> hmget user:100 username
    1) "zhangsan"
    
  • 相关阅读:
    淘淘商城项目分析报告
    LDAP入门
    spring APO的简单理解
    MySQL数据库的导入导出
    servlet CDI
    Result 架构
    java的设计模型
    JavaEE人力资源管理系统测试报告——许珍源、朱国辉小组
    部分代码片段——人力资源管理系统
    期末项目——人力资源管理系统需求分析
  • 原文地址:https://www.cnblogs.com/woaiyunwei/p/13275473.html
Copyright © 2011-2022 走看看