• redis的安装与基础学习


    一安装

    1、下载redis
    下载地址在:redis.io
    比如把Redis安装到/usr/local/soft/
    
    cd /usr/local/soft/
    wget http://download.redis.io/releases/redis-5.0.5.tar.gz
    2、解压压缩包
    
    tar -zxvf redis-5.0.5.tar.gz
    3、安装gcc依赖
    Redis是C语言编写的,编译需要
    
    yum install gcc
    4、编译安装
    
    cd redis-5.0.5/src
    make MALLOC=libc
    make install
    安装成功的结果是src目录下面出现服务端和客户端的脚本
    redis-server
    redis-cli
    redis-sentinel
    
    5、修改配置文件
    默认的配置文件是/usr/local/soft/redis-5.0.5/redis.conf
    后台启动
    
    daemonize no
    改成
    
    daemonize yes
    下面一行必须改成 bind 0.0.0.0 或注释,否则只能在本机访问
    
    bind 127.0.0.1 
    如果需要密码访问,取消requirepass的注释
    
    requirepass yourpassword
    6、使用指定配置文件启动Redis(这个命令建议配置alias)
    
    /usr/local/soft/redis-5.0.5/src/redis-server /usr/local/soft/redis-5.0.5/redis.conf
    7、进入客户端(这个命令建议配置alias)
    
    /usr/local/soft/redis-5.0.5/src/redis-cli
    8、停止redis(在客户端中)
    
    redis> shutdown
    或
    
    ps -aux | grep redis
    kill -9 xxxx
    

      



    二.集合与命令
    1.String

    2.hash

    3.list

    4.set

    5.zset

     6.geo

    7.hll

     三.redis实现消息队列

    队列   channel   

    订阅命令:
    
    SUBSCRIBE channel1 channel2 channel3
    
    发布命令
    
    PUBLISH channel1 myMsg
    

    还可以用表达式订阅

    PSUBSCRIBE news*   订阅 news*开头的    PUBLISH news-low   haha 能收到       
    PSUBSCRIBE *eat      订阅吃结尾的  PUBLISH hbgeat haha能收到
    PSUBSCRIBE loveAndPeace 全匹配和爱与和平 PUBLISH loveAndPeace  haha 能收到

    四.redis可以实现事务

    重点学习关键字  multi discard  exec watch

    实现a转账b 100元的

    127.0.0.1:6379> set a 1000
    OK
    127.0.0.1:6379> set b 1000
    OK
    127.0.0.1:6379> MULTI    -- 开启事务
    OK
    127.0.0.1:6379(TX)> DECRBY a 100   --加入事务队列
    QUEUED
    127.0.0.1:6379(TX)> INCRBY b 100   --加入事务队列
    QUEUED
    127.0.0.1:6379(TX)> exec   -- 执行事务     
    1) (integer) 900
    2) (integer) 1100
    127.0.0.1:6379> 
    

    取消事务

    127.0.0.1:6379(TX)> set a 1
    QUEUED
    127.0.0.1:6379(TX)> set b 2
    QUEUED
    127.0.0.1:6379(TX)> DISCARD  --取消事务
    OK
    127.0.0.1:6379> get a
    "900"
    127.0.0.1:6379> get b
    "1100"
    127.0.0.1:6379> 
    

    监听某一个值,修改后事务提交不了

    127.0.0.1:6379> get a
    "900"
    127.0.0.1:6379> WATCH a    --在此时我开启另一个窗口 修改a的值 127.0.0.1:6379> set a 2000
    OK
    127.0.0.1:6379> MULTI
    OK
    127.0.0.1:6379(TX)> set a 5000
    QUEUED
    127.0.0.1:6379(TX)> EXEC
    (nil)    --- 由于被另一个窗口修改了 报错
    127.0.0.1:6379> 
    

      

    思考 事务非人为取消发生执行不下去,会有什么情况

    分两种:

    exce 执行之前

    exce执行之后

      

    127.0.0.1:6379> MULTI
    OK
    127.0.0.1:6379(TX)> set a 1000
    QUEUED
    127.0.0.1:6379(TX)> HSET a 2000
    (error) ERR wrong number of arguments for 'hset' command 

    127.0.0.1:6379(TX)> EXEC
    (error) EXECABORT Transaction discarded because of previous errors. --- 发生在exce执行之前编译不成功,会回滚 

    127.0.0.1:6379(TX)> set c 1000
    QUEUED
    127.0.0.1:6379(TX)> hset c d f  -- 编译通过
    QUEUED
    127.0.0.1:6379(TX)> EXEC
    1) OK
    2) (error) WRONGTYPE Operation against a key holding the wrong kind of value  -- 执行失败
    127.0.0.1:6379> get c   -- c操作还是可以获取到值,说明没有回滚
    "1000"
    127.0.0.1:6379> 
    

      

      

    五.redis的集群部署

     5.1.主从复制

     主从有三种方式:

      都是在从节点进行配置

      1.从节点的配置文件配置: slaveof master的ip:端口 

      2.启动后 在redis-cli slaveof master的ip:端口 

      3.启动从节点时, ./redis.server -- slaveof master的ip:端口    

    从节点启动查看信息

    127.0.0.1:6379> set a 1   ---在设置为从节点之前可以写操作
    OK

    127.0.0.1:6379> SLAVEOF 47.112.99.31 9376
    OK

    127.0.0.1:6379> info replication   -- 查看从节点信息

    # Replication
    role:slave
    master_host:47.112.99.31
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:2
    master_sync_in_progress:0
    slave_repl_offset:167
    slave_priority:100
    slave_read_only:1
    replica_announced:1
    connected_slaves:0
    master_failover_state:no-failover
    master_replid:1f2ab47f55fd91686c7294f91afc0dcaca4385bc
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:167
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:168
    repl_backlog_histlen:0


    127.0.0.1:6379> set b 1
    (error) READONLY You can't write against a read only replica.      -- 设置从节点之后不能设置

    此时主节点

    127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=120.78.167.130,port=6379,state=online,offset=14,lag=1
    master_failover_state:no-failover
    master_replid:1f2ab47f55fd91686c7294f91afc0dcaca4385bc
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:14
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:14

    从节点的如果要断开可以

    127.0.0.1:6379> SLAVEOF no one
    OK

     5.2 sentinel 哨兵

    架构图如下

    由于机器有限,我做一个一主一从(问题:之前没有故障转移都是因为sentinel的ip没有写对)

    sentinel.conf配置文件内容,两台机器相同

    daemonize yes
    port 26379
    protected-mode no
    dir "/usr/local/soft/redis-6.0.9/sentinel-tmp"
    sentinel monitor redis-master 47.112.99.31 6379 1   --- 1代表当个sentinel实例认为master失效时,正式失效
    sentinel down-after-milliseconds redis-master 30000
    sentinel failover-timeout redis-master 180000
    sentinel parallel-syncs redis-master 1





    在2台机器上分别启动Redis和Sentinel

    ./redis-server ../redis.conf
    ./redis-sentinel ../sentinel.conf
    

    哨兵节点的另一种启动方式:

    ./redis-server ../sentinel.conf --sentinel


    参照:https://gper.club/articles/7e7e7f7ff3g5bgccg68

    后续还会写..

    问题:

    ubuntu的命令 

     netstat -anp |grep 端口号 或者 ps -ef | grep redis   查找到redis并  kill -9 pid ,这样子是杀不掉的

    可以  /etc/init.d/redis-server stop 出现 

    [ ok ] Stopping redis-server (via systemctl): redis-server.service.

    代表成功杀掉了

    问题2

    从节点连接主节点的时候,连接不上

    1)在从节点redis.conf要配置master的密码,masterauth<master-password>

    2)在主节点要把阿里云的安全组通过redis的6379端口

    大问题3:

    模拟一主二从哨兵模式

    主节点 47.112.99.31

    从节点 120.78.167.130

    从节点 45.40.234.80

    启动对应的sentinel节点 

    daemonize yes
    sentinel announce-ip 47.112.99.31 -- 刚开始没有加这句,导致出现很多master节点挂点 选举不成功的情况,其次20.78.167.130配置replicaof的 指定错了(本应该是47的主节点,写到了45)
    port 26379
    protected-mode no
    dir "/opt/soft/redis-6.2.4/sentinel-tmp"
    sentinel monitor redis-master 47.112.99.31 6379 2
    sentinel down-after-milliseconds redis-master 5000
    sentinel failover-timeout redis-master 30000
    sentinel parallel-syncs redis-master 1

     
  • 相关阅读:
    0541-leetcode算法实现之反转字符串II-reverseStrII-python&golang实现
    helm 入门简介与安装(1)
    ubuntu18.04 netplan 设置dns,dns不生效
    服务器报错WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    0344-leetcode算法实现之反转字符串-reverse-string-python&golang实现
    python os模块常用方法总结
    0076-leeycode算法实现之最小覆盖子串-minimum-window-substring-python&golang实现
    0904-leetcode算法实现之水果成篮-fruit-into-baskets-python&golang实现
    0209-leetcode算法实现之长度最小子数组-minimum-size-subarray-sum-python&golang实现
    0977-leetcode算法实现之有序数组的平方sqaure-of-a-sorted-array-python&golang实现
  • 原文地址:https://www.cnblogs.com/imfjj/p/14992866.html
Copyright © 2020-2023  润新知