zoukankan      html  css  js  c++  java
  • redis配置

    1.redis 安装部署.

    下载:
    wget http://download.redis.io/releases/redis-3.2.10.tar.gz
    解压:
    上传至/usr/local
    tar xzf redis-3.2.10.tar.gz
    mv redis-3.2.10 redis
    安装:
    cd redis
    make
    启动:
    src/redis-server
    
    修改环境变量:
    vim /root/.bash_profile
    
    添加以下配置:
    export PATH=/server/tools/redis/src:$PATH
    
    
    配置完成后应用配置
    source /root/.bash_profile
    
    关闭redis:
    
    redis-cli shutdown
    
    启动redis-server 
    
    redis-server &
    
    ------------------------------
    redis 配置文件的使用:
    
    1、创建必要目录:
    
    mkdir -p /data/6379/
    
    2、生成配置文件
    vim /data/6379/redis.conf
    
    daemonize  yes
    port 6379                
    logfile /var/log/redis.log
    dbfilename dump.rdb
    dir /data/6379
    
    3、使用配置文件
    (1)关闭原有redis
    redis-cli shutdown 
    (2)使用配置文件启动
    redis-server /data/6379/redis.conf
    
     
    4、redis安全控制
    vim /data/6379/redis.conf 
    
    bind  127.0.0.1 10.0.0.7
    requirepass 123
    
    
    重启redis生效
    [root@python-cnb ~]# redis-cli shutdown
    [root@python-cnb ~]# redis-server /data/6379/redis.conf 
    连接测试:
     redis-cli -a 123
     或者:
    redis-cli
    127.0.0.1:6379> auth 123

    2. redis持久化

    1)介绍
        默认持久化是没有开启的。
    (2)持久化类型
    RDB
    point in time snapshot
    基于时间点的快照技术
    优点: 持久化速度快,需要的磁盘较少
    缺点:只能将数据定格在一个时间点,不能记录数据变化过程
    用处:作为备份来使用,主从复制基于RDB功能的。
    
    AOF:
    Append Only Logfile
    只追加的日志文件,保存所有键值对修改的变化过程
    优点:记录数据的变化过程,更加安全
    缺点:持久化速度相对慢,需要更多的磁盘空间
    用处:需要数据安全性和一致性要求更高业务场景,Redis分布式架构基于AOF来实现高可用。
    
    (3)RDB持久化开启
    
    dbfilename dump.rdb
    dir /data/6379
    
    save 900 1
    save 300 10
    save 60 100004)AOF持久化的开启
    
    appendonly yes
    appendfsync always

    3. redis的数据类型

    1、普通键值对
    2、计数器
    incr num
    incrby num 10000
    decr  num
    decrby num 5000
    -------------set mykey "test"               为键设置新值,并覆盖原有值
    getset mycounter 0               设置值,取值同时进行
    setex mykey 10 "hello"          设置指定 Key 的过期时间为10秒,在存活时间可以获取value
    setnx mykey "hello"               若该键不存在,则为键设置新值
    mset key3  "zyx"  key4 "xyz"      批量设置键
    
    删
    del mykey                      删除已有键
    
    改
    append mykey "hello"              若该键并不存在,返回当前 Value 的长度
                                  该键已经存在,返回追加后 Value的长度
    incr mykey                   值增加1,若该key不存在,创建key,初始值设为0,增加后结果为1
    decrby  mykey  5               值减少5
    setrange mykey 20 dd              把第21和22个字节,替换为dd, 超过value长度,自动补0
    
    查  
    exists mykey                     判断该键是否存在,存在返回 1,否则返回0
    get mykey                    获取Key对应的value
    strlen mykey                  获取指定 Key 的字符长度
    ttl mykey                     查看一下指定 Key 的剩余存活时间(秒数)
    getrange mykey 1 20              获取第2到第20个字节,若20超过value长度,则截取第2个和后面所有的
    mget key3 key4                   批量获取键
    
        
    -------------------
    hash类型:
    
    hmset stu1 id 101 name  zhangsan  gender male
    
    hgetall stu1 
    
    hmget stu1 id  name 
    
    增
    hset myhash field1 "s"    
    若字段field1不存在,创建该键及与其关联的Hashes, Hashes中,key为field1 ,并设value为s ,若存在会覆盖原value
    hsetnx myhash field1 s    
    若字段field1不存在,创建该键及与其关联的Hashes, Hashes中,key为field1 ,并设value为s, 若字段field1存在,则无效
    hmset myhash field1 "hello" field2 "world       一次性设置多个字段
    删
    hdel myhash field1                       删除 myhash 键中字段名为 field1 的字段
    del myhash                          删除键
    改  
    hincrby myhash field 1                  给field的值加1
    
    查
    hget myhash field1                       获取键值为 myhash,字段为 field1 的值
    hlen myhash                           获取myhash键的字段数量
    hexists myhash field1                     判断 myhash 键中是否存在字段名为 field1 的字段
    hmget myhash field1 field2 field3              一次性获取多个字段
    hgetall myhash                           返回 myhash 键的所有字段及其值
    hkeys myhash                          获取myhash 键中所有字段的名字
    hvals myhash                           获取 myhash 键中所有字段的值
    
    ------------------------
    
    List 列表
    
    
    
    增 
    lpush mykey a b              若key不存在,创建该键及与其关联的List,依次插入a ,b, 若List类型的key存在,则插入value中
    lpushx mykey2 e              若key不存在,此命令无效, 若key存在,则插入value中
    linsert mykey before a a1      在 a 的前面插入新元素 a1
    linsert mykey after e e2       在e 的后面插入新元素 e2
    rpush mykey a b             在链表尾部先插入b,在插入a
    rpushx mykey e              若key存在,在尾部插入e, 若key不存在,则无效
    rpoplpush mykey mykey2       将mykey的尾部元素弹出,再插入到mykey2 的头部(原子性的操作)
    删
    del mykey                  删除已有键 
    lrem mykey 2 a               从头部开始找,按先后顺序,值为a的元素,删除数量为2个,若存在第3个,则不删除
    ltrim mykey 0 2              从头开始,索引为0,1,2的3个元素,其余全部删除
    改
    lset mykey 1 e               从头开始, 将索引为1的元素值,设置为新值 e,若索引越界,则返回错误信息
    rpoplpush mykey mykey          将 mykey 中的尾部元素移到其头部
    查
    lrange mykey 0 -1          取链表中的全部元素,其中0表示第一个元素,-1表示最后一个元素。
    lrange mykey 0 2            从头开始,取索引为0,1,2的元素
    lrange mykey 0 0            从头开始,取第一个元素,从第0个开始,到第0个结束
    lpop mykey                  获取头部元素,并且弹出头部元素,出栈
    lindex mykey 6              从头开始,获取索引为6的元素 若下标越界,则返回nil 
    
    
    
    ------------------
    set 集合
    
    127.0.0.1:6379> sadd lxl pg1 pg2 pg3 mr ms 
    (integer) 5
    127.0.0.1:6379> sadd jnl baoqiang pg2 yf xh oldboy alex wusir
    (integer) 7
    127.0.0.1:6379> 
    127.0.0.1:6379> 
    127.0.0.1:6379> SUNION lxl jnl
     1) "wusir"
     2) "mr"
     3) "baoqiang"
     4) "pg2"
     5) "ms"
     6) "pg1"
     7) "alex"
     8) "yf"
     9) "pg3"
    10) "oldboy"
    11) "xh"
    127.0.0.1:6379> 
    127.0.0.1:6379> 
    127.0.0.1:6379> SINTER lxl jnl 
    1) "pg2"
    127.0.0.1:6379> SDIFF lxl jnl
    1) "pg3"
    2) "pg1"
    3) "mr"
    4) "ms"
    127.0.0.1:6379> SDIFF  jnl  lxl
    1) "xh"
    2) "wusir"
    3) "baoqiang"
    4) "oldboy"
    5) "alex"
    6) "yf"
    127.0.0.1:6379> SUNIONSTORE qj lxl jnl
    (integer) 11
    127.0.0.1:6379> 
    127.0.0.1:6379> 
    127.0.0.1:6379> 
    127.0.0.1:6379> SMEMBERS qj
     1) "pg2"
     2) "ms"
     3) "pg1"
     4) "wusir"
     5) "alex"
     6) "baoqiang"
     7) "yf"
     8) "pg3"
     9) "oldboy"
    10) "mr"
    11) "xh"
    
    --------------------
    SortedSet(有序集合)
    
    127.0.0.1:6379> ZREVRANGE music 0 -1  withsocres
    
    
     

    4. Redis发布订阅和事务

    发布订阅
    
    发布者:PUBLISH fm1039 "hi~~"
    频道
    订阅者 :
    SUBSCRIBE fm1039    
    PSUBSCRIBE fm1039
    
    
    
    -=-----------------
    Redis 事务
    
    基于队列实现的。multi触发开启事务,将事务中所有语句先放到队列中,
    并没有真正执行,而是需要EXEC触发命令运行。使用discard命令取消事务。
    
    
    multi
    
    exec
    
    discard
    
    --------------------
    InnoDB   表锁   行锁 
    
    悲观锁
    
    乐观锁
    
    ----------------------------
    Redis 高可用及分布式架构

     5.基于Sentinel的redis高可用集群

    端口号规划:
    sentinel:26380
    主:6380
    从:63816382
    
    目录规划:
    sentinel:/data/26380
    主:/data/6380
    从:/data/6381  /data/6382
    
    
    1、准备目录
    mkdir -p /data/638{0..2}
    mkdir -p /data/26380
    
    
    2、准备redis三个节点的配置文件
    vim /data/6380/redis.conf
    
    bind 127.0.0.1 10.0.0.7
    port 6380
    daemonize yes
    pidfile /data/6380/redis.pid
    loglevel notice
    logfile "/data/6380/redis.log"
    dbfilename dump.rdb
    dir /data/6380
    
    vim /data/6381/redis.conf
    
    bind 127.0.0.1 10.0.0.7
    port 6381
    daemonize yes
    pidfile /data/6381/redis.pid
    loglevel notice
    logfile "/data/6381/redis.log"
    dbfilename dump.rdb
    dir /data/6381
    
    vim /data/6382/redis.conf
    
    bind 127.0.0.1 10.0.0.7
    port 6382
    daemonize yes
    pidfile /data/6382/redis.pid
    loglevel notice
    logfile "/data/6382/redis.log"
    dbfilename dump.rdb
    dir /data/6382
    
    
    3、启动三个redis节点
    
    redis-server /data/6380/redis.conf
    redis-server /data/6381/redis.conf
    redis-server /data/6382/redis.conf
    
    4、构建主从关系
    redis-cli -p 6381
    SLAVEOF 127.0.0.1 6380
    exit
    
    redis-cli -p 6382
    SLAVEOF 127.0.0.1 6380
    5、检查主从关系
    
    redis-cli -p 6381
    info replication
    exit
    
    redis-cli -p 6382
    info replication 
    
    
    
    6、sentinel构建
    
    vim /data/26380/sentinel.conf
    
    port 26380
    dir "/tmp"
    sentinel monitor mymaster 127.0.0.1 6380 1
    sentinel down-after-milliseconds mymaster 60000
    sentinel config-epoch mymaster 0
    
    
    
    启动
    redis-sentinel /data/26380/sentinel.conf 

    6.Python 3.5在linux安装

     

    ---------------------------
    Python 3.5在linux安装
    
    上传Python-3.5.2.tar.xz软件到 /server/tools 中
    
    解压 :
    tar xf   Python-3.5.2.tar.xz
    
    编译安装
    cd Python-3.5.2
    ./configure 
    make 
    make install
    
    
    检查python版本
    
    python3 --version
    
    --------------------------
    安装redis  for python驱动
    
    cd /server/tools
    unzip redis-py-master.zip
    
    cd  redis-py-master
    python3  setup.py install
    
    安装集群驱动
    cd /server/tools
    unzip redis-py-cluster-unstable.zip
    cd redis-py-cluster-unstable
    python3  setup.py install
    
    
    ------------------------------------------
    1、python3 连接单机redis:
    
    import redis  
    r = redis.StrictRedis(host='127.0.0.1', port=6379,password='123') 
    r.get("name")
    r.set("name","123")
    
    
    ------------------------------------------------------------
    ----
    sentinel模式:
    
    >>> from redis.sentinel import Sentinel  
    >>> sentinel = Sentinel([('127.0.0.1', 26380)], socket_timeout=0.1)  
    
    >>> sentinel.discover_master('mymaster')  
    >>> sentinel.discover_slaves('mymaster')  
    
    配置读写分离:
    
    >>> master = sentinel.master_for('mymaster', socket_timeout=0.1)  
    >>> slave = sentinel.slave_for('mymaster', socket_timeout=0.1)  
    >>> master.set('foo', 'bar')  
    >>> slave.get('foo')  
    
    ------------------------------------------------------------------
    cluster模式
    ------
    (1) redis-py并没有提供redis-cluster的支持,去github找了一下,有个叫redis-py-cluster的源码,
    但是和redis-py不是一个作者,地址为:https://github.com/Grokzen/redis-py-cluster
    watch,star,fork还算可以。
    ----    
    (2) 安装
       Latest stable release from pypi
    
    $ pip install redis-py-cluster  
        or from source
    
    $ python setup.py install
    ---
     (3) 使用
    
    >>> from rediscluster import StrictRedisCluster  
    >>> startup_nodes = [{"host": "127.0.0.1", "port": "7000"}]  
    >>> rc = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True)  
    >>> rc.set("foo", "bar")  
    True  
    >>> print(rc.get("foo"))  
    'bar'  
    
    
    
    =-------------------------------------------
    安装redis cluster
    
    EPEL源安装ruby支持
    yum install ruby rubygems -y
    
    使用国内源
    gem sources -a http://mirrors.aliyun.com/rubygems/ 
    gem sources  --remove http://rubygems.org/
    gem install redis -v 3.3.3
    
    
    -------------------
    准备集群环境:
    
    2、集群节点准备
    
    mkdir /nosql/700{0..5}
    
    vim /nosql/7000/redis.conf
    
    port 7000
    daemonize yes
    pidfile /nosql/7000/redis.pid
    loglevel notice
    logfile "/nosql/7000/redis.log"
    dbfilename dump.rdb
    dir /nosql/7000
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    
    
    vim /nosql/7001/redis.conf
    port 7001
    daemonize yes
    pidfile /nosql/7001/redis.pid
    loglevel notice
    logfile "/nosql/7001/redis.log"
    dbfilename dump.rdb
    dir /nosql/7001
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    
    
    vim /nosql/7002/redis.conf
    port 7002
    daemonize yes
    pidfile /nosql/7002/redis.pid
    loglevel notice
    logfile "/nosql/7002/redis.log"
    dbfilename dump.rdb
    dir /nosql/7002
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    
    
    
    vim /nosql/7003/redis.conf
    port 7003
    daemonize yes
    pidfile /nosql/7003/redis.pid
    loglevel notice
    logfile "/nosql/7003/redis.log"
    dbfilename dump.rdb
    dir /nosql/7003
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    
    
    
    vim /nosql/7004/redis.conf
    port 7004
    daemonize yes
    pidfile /nosql/7004/redis.pid
    loglevel notice
    logfile "/nosql/7004/redis.log"
    dbfilename dump.rdb
    dir /nosql/7004
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    
    
    vim /nosql/7005/redis.conf
    port 7005
    daemonize yes
    pidfile /nosql/7005/redis.pid
    loglevel notice
    logfile "/nosql/7005/redis.log"
    dbfilename dump.rdb
    dir /nosql/7005
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    
    
    启动节点:
    
    redis-server /nosql/7000/redis.conf 
    redis-server /nosql/7001/redis.conf 
    redis-server /nosql/7002/redis.conf 
    redis-server /nosql/7003/redis.conf 
    redis-server /nosql/7004/redis.conf 
    redis-server /nosql/7005/redis.conf 
    
    
    
    [root@db01 ~]# ps -ef |grep redis
    root       8854      1  0 03:56 ?        00:00:00 redis-server *:7000 [cluster]     
    root       8858      1  0 03:56 ?        00:00:00 redis-server *:7001 [cluster]     
    root       8860      1  0 03:56 ?        00:00:00 redis-server *:7002 [cluster]     
    root       8864      1  0 03:56 ?        00:00:00 redis-server *:7003 [cluster]     
    root       8866      1  0 03:56 ?        00:00:00 redis-server *:7004 [cluster]     
    root       8874      1  0 03:56 ?        00:00:00 redis-server *:7005 [cluster]  
    
    
    3、将节点加入集群管理
    
    redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 
    127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
    
    
    4、集群状态查看
    
    集群主节点状态
    redis-cli -p 7000 cluster nodes | grep master
    集群从节点状态
    redis-cli -p 7000 cluster nodes | grep slave

    1. redis.conf 文件的配置

    2. redis 的安全配置

     

  • 相关阅读:
    DS博客作业03--栈和队列
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客作业06--结构体&文件
    DS博客作业08--课程总结
    DS博客作业07--查找
    DS博客作业06--图
    DS博客作业05--树
    DS博客大作业--树 (陈梓灿组)
    DS博客作业03--栈和队列
  • 原文地址:https://www.cnblogs.com/mengbin0546/p/10745445.html
Copyright © 2011-2022 走看看