zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    A1023 Have Fun with Numbers (20分)(大整数四则运算)
    A1096 Consecutive Factors (20分)(质数分解)
    A1078 Hashing (25分)(哈希表、平方探测法)
    A1015 Reversible Primes (20分)(素数判断,进制转换)
    A1081 Rational Sum (20分)
    A1088 Rational Arithmetic (20分)
    A1049 Counting Ones (30分)
    A1008 Elevator (20分)
    A1059 Prime Factors (25分)
    A1155 Heap Paths (30分)
  • 原文地址:https://www.cnblogs.com/imfjj/p/14992866.html
Copyright © 2011-2022 走看看