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

 
原文地址:https://www.cnblogs.com/imfjj/p/14992866.html