zoukankan      html  css  js  c++  java
  • redis实战

    介绍

    redis:缓存数据库

    速度快,数据全放在内存中,支持多种数据结构,string list hash set, storted set(有序集合型)

    持久化

    主从复制

    支持过期时间

    支持事物

    消息订阅

    支持虚拟内存

    运用场景:

    数据缓存 提高访问性能

    会话缓存 保存web会话信息 seseion cache

    排行榜 计数器 nginx+lua+redis 计数器进行IP自动封禁

    消息队列 构建实时消息系统,聊天,群聊

    yum安装

    yum install epel-release  -y  安装epel扩展源

    yum install redis -y 安装redis

    systemctl start redis

    redis-cli

    安装

    源码包安装

    cd cd /etc/yum.repos.d/

    rz  epel.repo

     mkdir /data && cd /data

    tar xf redis-5.0.5.tar.gz

    yum install gcc* -y

    cd redis-5.0.5/

    make MALLOC=libc

    mkdir /data/redis6379

    cp redis.conf /data/redis6379/

    cp src/redis-server /data/redis6379/

    cd /data/redis6379/

    grep '^[^$|#]' redis.conf > 2

    mv redis.conf redis.conf.bak

    mv 2 redis.conf

    bind 192.168.81.20 绑定主机IP

    daemonize yes 后台启动

    appendonly yes  二进制日志开关 记录数据变化

    logfile “redis.log” 指定日志文件

    dbfilename dump.rdb  持久化数据文件

    服务启动

    ./redis-server ./redis.conf &

    https://www.cnblogs.com/bug1024/p/8989649.html  搭建redis常见错误参考

    拷贝命令

    cd /data/redis-5.0.5/src

    cp redis-cli /usr/bin/

    redis-cli --help

    192.168.81.20:6379> set foo ghj 创建键值对

    192.168.81.20:6379> get foo 获取value

    192.168.81.20:6379> keys * 获取所有的key

    192.168.81.20:6379> SHUTDOWN 关闭redis服务

    redis保护模式

    protected-mode yes

    requirepass root 设置验证密码

    [root@node1 ~]# redis-cli -h 192.168.81.20

    192.168.81.20:6379> auth root  认证

    192.168.81.20:6379> set name lwb

    192.168.81.20:6379> get name

    192.168.81.20:6379> CONFIG GET * 查看配置

    192.168.81.20:6379> CONFIG GET loglevel

    192.168.81.20:6379> CONFIG SET loglevel "notice" 变更当前运行配置

    redis数据存储 内存  ---->  硬盘  数据文件.rdb  更新日志.aof(二进制文件)

                       持久化

    aof记录写的命令

    持久化策略:

    databases 16

    always-show-logo yes

    save 900 1

        900秒内有一次改动 进行保存

    save 300 10

        300秒内有10次改动 保存

    save 60 10000

    60秒内有1000次改动 保存到硬盘

    rdbcompression yes 启用压缩

    appendfsync everysec  每秒保存数据  no: 30秒同步一次将缓存写到磁盘  always:每次更新操作调用fsync将数据写到磁盘 everysec:每一秒同步一次

    redis操作:

    string

    192.168.81.20:6379> type name  一个键最大能保存512M

    192.168.81.20:6379> append name 123 最加

    192.168.81.20:6379> mset name lwb foo oldboy 同时设置

    192.168.81.20:6379> MGET name foo 同时取

    192.168.81.20:6379> STRLEN name value长度

    integer

    192.168.81.20:6379> set age 12

    192.168.81.20:6379> INCR age 整数加1 计数器使用

    192.168.81.20:6379> decr age 1

    192.168.81.20:6379> exists name 检查数据是否存在

    192.168.81.20:6379> INCRBY age 10 每次加10

    192.168.81.20:6379> DECRBY age 10 每次减10

    hash 一个hash用于存储多个键值对

    192.168.81.20:6379> HSET user:1 name lwb

    192.168.81.20:6379> type user:1

    192.168.81.20:6379> HSET user:1 age 22

    192.168.81.20:6379> HSET user:1 sex male

    192.168.81.20:6379> hgetall user:1  获取hash的所有键值对

    192.168.81.20:6379> HGET user:1 age 获取单个键值对

    192.168.81.20:6379> HMGET user:1 name age 查询多个键值对

    192.168.81.20:6379> del foo 删除键值对

    192.168.81.20:6379> HDEL user:1 age 删除hash的单个键值对

    192.168.81.20:6379> HSET user:1 age 22

    192.168.81.20:6379> HINCRBY user:1 age 5 hash的键值对增量

    list

    192.168.81.20:6379> LPUSH list1 bmw benz totato honda  创建list1列表

    192.168.81.20:6379> TYPE list1

    192.168.81.20:6379> LRANGE list1 0 10  取第1到第10的列表数

    192.168.81.20:6379> LPUSH list1 volvo 插在列表左边

    192.168.81.20:6379> RPUSH list1 byd 插在列表右边

    192.168.81.20:6379> RPOP list1 移除列表最右边的并输出打印

    192.168.81.20:6379> LPOP list1 移除列表最左边的并输出打印

    192.168.81.20:6379> LLEN list1 列表的长度

    192.168.81.20:6379> LREM list1 1 volvo 删除左边第一个volvo

    192.168.81.20:6379> LRANGE list1 0 -1 获取列表所有的数据

    192.168.81.20:6379> LSET list1 0 HONDA 设置左边第1个下标的值

    192.168.81.20:6379> LINDEX list1 1 列表第2个索引值

    192.168.81.20:6379> LINSERT list1 after benz mashaladi benz后面插入mashaladi

    set, sort set 的操作看以前的文档

    高级运用

    发布订阅

    终端1

    192.168.81.20:6379> SUBSCRIBE CCTV1  订阅频道

    终端2

    192.168.81.20:6379> SUBSCRIBE CCTV1 订阅相同的频道

    终端3 发布消息

    192.168.81.20:6379> PUBLISH  CCTV1  "hello this is sz"  CCTV1频道上发布消息

    事物

    192.168.81.20:6379> zadd salary 3000 lwb 5000 oldboy

    192.168.81.20:6379> MULTI  开启一个事物

    192.168.81.20:6379> ZINCRBY salary 1000 lwb

    192.168.81.20:6379> ZINCRBY salary -1000 oldboy

    192.168.81.20:6379> exec 执行事物内的命令

    服务器命令

    192.168.81.20:6379> info  查看服务器情况

    192.168.81.20:6379> client list  查看客户端

    192.168.81.20:6379> save 立刻保存数据到磁盘

    192.168.81.20:6379> monitor 监控客户端的操作

    慢日志查询

    redis.conf

    slowlog-log-slower-than 10000 超过10000毫秒的查询操作定义为慢查询

    slowlog-max-len 128 最多保存128条慢查询记录

    192.168.81.20:6379> CONFIG GET slow*

    save的操作

    redis.conf

    appendonly no 关闭持久化

    192.168.81.20:6379> shutdown 

    rm -rf appendonly.aof dump.rdb 删除持久化数据

    [root@node1 redis6379]# ./redis-server ./redis.conf 重启

    192.168.81.20:6379> set name hkl

    192.168.81.20:6379> save

    192.168.81.20:6379> shutdown

    [root@node1 redis6379]# mv  dump.rdb /root/ 备份 重启服务之后数据就没了

    [root@node1 redis6379]# ./redis-server ./redis.conf 重启

    cp ~/dump.rdb ./

    192.168.81.20:6379> SHUTDOWN

    [root@node1 redis6379]# ./redis-server ./redis.conf 重启数据恢复

    互为主从搭建

    主从同步原理:https://www.cnblogs.com/lukexwang/p/4711977.html?from=singlemessage&isappinstalled=0

    主从搭建及sentinel参考: https://www.cnblogs.com/carrychan/p/9396997.html

    主节点

    vim redis.conf

    port  6379      

    daemonize  yes

    masterauth 123456

    bind  192.168.81.20

    requirepass 123456

    slaveof  192.168.81.30  6380

    pidfile   /var/run/redis-6379.pid

    logfile   /var/log/redis/redis-6379.log

    从节点

    port 6380         

    daemonize  yes

    bind  192.168.81.30 6380

    requirepass 123456

    masterauth 123456

    pidfile   /var/run/redis-6380pid

    logfile   /var/log/redis/redis-6380.log

    slaveof  192.168.81.20 6379

    测试

    192.168.81.20:6379> INFO replication

    192.168.81.20:6379> set test4 www

    192.168.81.20:6379> shutdown

    192.168.81.30:6380> INFO replication

    主从切换

    192.168.81.30:6379> SLAVEOF no one 让自己变成master

    192.168.81.20:6380> SLAVEOF 192.168.81.30 6379 切换到 192.168.81.30master

    搭建redis-sentinel系统 每个节点同样部署

    ha高可用解决方案,实现主备切换

    sentinel.conf

    protected-mode no

    daemonize yes

    port  6800

    sentinel monitor mymaster 192.168.81.30 6379  1(集群中有多少台 sentinel同意切换才切换)

    sentinel auth-pass mymaster 123456

    sentinel down-after-milliseconds mymaster 5000  #5秒内192.168.81.30没有响应,就认为master DOWN了

    sentinel failover-timeout mymaster 15000 主从多久没切换成功之后认为切换失败

    logfile  sentinel.log

    pidfile  sentinel.pid

    # Generated by CONFIG REWRITE

    protected-mode no

    sentinel leader-epoch mymaster 5

    sentinel known-replica mymaster 192.168.81.20 6379 切到哪个master

    sentinel current-epoch 5

    启动redis-sentinel

    ./bin/redis-sentinel  ./sentinel.conf

    redis集群

    16384hash

    依赖:yum install ruby rubygems -y

    安装ruby参考https://blog.csdn.net/Gushiyuta/article/details/90770681

    gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

    gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/

    gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D695610

    curl -L get.rvm.io | bash -s stable

    source /usr/local/rvm/scripts/rvm

    rvm install 2.3.3 安装

    ruby --version 查询版本

    gem install redis  安装redis集群组件

    gem source -

    部署集群

    cd /data

    for i in 0 1 2 3 4 5;do cp -r redis6379  700$i;done  部署6redis

    for i in 0 1 2 3 4 5;do rm -rf 700$i/dump.rdb;done  删除rdb

    chang_file.sh

    #!/bin/sh

    for i in 0 1 2 3 4 5

    do

        file=redis.conf

        cd /data/700$i

        sed -i "s/port 6379/port 700$i/g" $file

        echo "cluster-enabled yes" >> $file

        echo "cluster-config-file nodes.conf"  >> $file

        echo "cluster-node-timeout 5000" >> $file

        sed -i "s/appendonly no/appendonly yes/g" $file

        sed -i "s/redis_6379.pid/redis_700$i.pid/g" $file

        sed -i "/^dir/d" $file

        echo "dir './'" >> $file

    done

    批量启动

    for i in 0 1 2 3 4 5;do cd /data/700$i && ./redis-server ./redis.conf;done

    创建集群

    redis-cli --cluster create 192.168.81.20:7000 192.168.81.20:7001 192.168.81.20:7002 192.168.81.20:7003 192.168.81.20:7004 192.168.81.20:7005 --cluster-replicas 1

    : --cluster-replicas 1 为集群中的每个几点创建一个从节点

    登录集群

    redis-cli -c -p 7000 -h 192.168.81.20

    192.168.81.20:7000> set ssh:1 192.168.85.20

    192.168.81.20:7004> get ssh:1

    -> Redirected to slot [5147] located at 192.168.81.20:7000  定向到存储该key的槽位slot

    redis-cli -p 7001 -h 192.168.81.20 cluster nodes 查看集群状态

    redis-cli --cluster reshard 192.168.81.20:7000 重新分片

  • 相关阅读:
    分页功能
    四个内置对象的作用范围
    include和application
    jsp中的session
    IDC机房的相关常识
    使用dm-cache组合SSD与HDD实现高性价比存储
    负载均衡基本原理与lvs
    秒级别执行脚本的方法
    Tomcat调优
    Nginx调优
  • 原文地址:https://www.cnblogs.com/leiwenbin627/p/11408636.html
Copyright © 2011-2022 走看看