Linux——Redis安装+实战模拟

Redis知识

1.数据库分类

  • 关系型: mysql、oracle、sqlserver、db2、postgresql
  • 非关系型:redis、mongo、ES

2.Redis重要性

(1)速度快
c语言写的
代码优雅
单线程架构
(2)支持多种数据结构
字符串,哈希,列表,集合,有序集合
(3)丰富的功能
天然计数器
健过期功能
消息队列
(4)支持客户端语言多
php,java,python
(5)数据持久化
所有的数据都运行在内存中
支持2种格式持久化数据AOF RDB AOF&RDB
(6)自带多种高可用架构
主从
哨兵
集群

3.Redis应用场景

(1)缓存-键过期时间
把session会话存在redis,过期删除
缓存用户信息,缓存Mysql部分数据,用户先访问redis,redis没有再访问mysql,然后回写给redis
商城优惠卷过期时间
(2)排行榜-列表&有序集合
热度/点击数排行榜
直播间礼物积分排行
(3)计数器-天然支持计数器
帖子浏览数
视频播放数
评论数
点赞/踩
(4)社交网络-集合
粉丝
共同好友
兴趣爱好
标签
(5)消息队列-发布订阅
配合ELK缓存收集来的日志

环境

主机IP主机名
192.168.1.20redis-主
192.168.1.19redis-从

Redis安装

1.创建安装和数据目录

[root@redis-1 ~]# mkdir -p /data/soft
[root@redis-1 ~]# mkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}

2.下载redis安装包

[root@redis-1 ~]# cd /data/soft/
[root@redis-1 soft]# wget http://download.redis.io/releases/redis-5.0.7.tar.gz
--2020-07-27 14:02:06--  http://download.redis.io/releases/redis-5.0.7.tar.gz
正在解析主机 download.redis.io (download.redis.io)... 45.60.125.1
正在连接 download.redis.io (download.redis.io)|45.60.125.1|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1984203 (1.9M) [application/octet-stream]
正在保存至: “redis-5.0.7.tar.gz”

100%[==================>] 1,984,203   22.5KB/s 用时 95s    

2020-07-27 14:03:41 (20.4 KB/s) - 已保存 “redis-5.0.7.tar.gz” [1984203/1984203])

3.解压redis到数据目录

[root@redis-1 soft]# tar xf  redis-5.0.7.tar.gz -C /opt/redis_cluster/
[root@redis-1 soft]# ln -s /opt/redis_cluster/redis-5.0.7/ /opt/redis_cluster/redis   //创建软连接

4.编译安装redis

[root@redis-1 soft]# cd /opt/redis_cluster/redis
[root@redis-1 redis]# make && make install 
cd src && make all
make[1]: 进入目录“/opt/redis_cluster/redis-5.0.7/src”
    CC Makefile.dep
make[1]: 离开目录“/opt/redis_cluster/redis-5.0.7/src”
make[1]: 进入目录“/opt/redis_cluster/redis-5.0.7/src”
.......

5.编写配置文件

[root@redis-1 redis]# vim /opt/redis_cluster/redis_6379/conf/6379.conf
bind 127.0.0.1 192.168.1.20   
#填写本机的IP
port 6379
daemonize yes
pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
databases 16
dbfilename redis.rdb
dir /opt/redis_cluster/redis_6379
[root@redis-1 redis]# redis-server /opt/redis_cluster/redis_6379/conf/6379.conf   // 启动服务
[root@redis-1 redis]# netstat -anpt | grep redis   //查看端口
tcp        0      0 192.168.1.20:6379       0.0.0.0:*               LISTEN      60980/redis-server  
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      60980/redis-server  

Redis基本命令

进入redis命令行

[root@redis-1 ~]# redis-cli 
127.0.0.1:6379> 

1.全局命令

命令解释
MSET k1 1 k2 2 k3 3批量创建键值
KEYS *列出所有键值名,但在企业环境禁止使用
DBSIZE查看有多少键值数
EXISTS查看键值是否存在
EXPIRE k2 20设置K2过期时间为20秒,20秒后k2自动取消
PERSIST k2取消k2的过期时间
TTL k2查看k2的生命周期
TYPE查看数据类型
127.0.0.1:6379> MSET k1 1 k2 2 k3 3 k4 4
OK
127.0.0.1:6379> KEYS *
1) "k4"
2) "k2"
3) "k3"
4) "k1"
127.0.0.1:6379> EXISTS k1
(integer) 1
127.0.0.1:6379> EXISTS k2
(integer) 1
127.0.0.1:6379> EXPIRE k2 20
(integer) 1
127.0.0.1:6379> PERSIST k2
(integer) 1
127.0.0.1:6379> TTL k2
(integer) -1
127.0.0.1:6379> TYPE k2
string

2.字符串类型(string)

命令解释
SET k3 3创建键值
GET k3查看键值
DEL k2删除键值
INCR k3键值k3为整数,递增加1
INCRBY k3 10递增k3的量值10
MSET k4 v4 k5 v5 k6 v6 k7 v7批量创建键值
MGET k4 k5 k6 k7批量查看键值
127.0.0.1:6379> SET k3 3
OK
127.0.0.1:6379> GET k3
"3"
127.0.0.1:6379> DEL k3
(integer) 1
127.0.0.1:6379> INCR k3
(integer) 1
127.0.0.1:6379> INCRBY k3 10
(integer) 11
127.0.0.1:6379> MSET k1 2 k3 4 k5 6 
OK
127.0.0.1:6379> MGET k1 k3 k5 
1) "2"
2) "4"
3) "6"

3.列表(list)

命令解释
RPUSH list1 1 2 3 4创建列表list1,值为1 2 3 4
RPUSH list1 5 6 7 8在list1右侧添加5 6 7 8
LPUSH list1 0在list1左侧添加0
LRANGE list1 0 -1查看list1所有值
RPOP list1删除右侧最后一个值
LPOP list1删除左侧第一个值
LTRIM list1 0 2仅保留前3位,其他值删除
127.0.0.1:6379> RPUSH list1 1 2 3 4
(integer) 4
127.0.0.1:6379> RPUSH list1 5 6 7 8
(integer) 8
127.0.0.1:6379> LPUSH list1 0
(integer) 9
127.0.0.1:6379> LRANGE list1 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
8) "7"
9) "8"
127.0.0.1:6379> RPOP list1
"8"
127.0.0.1:6379> LPOP list1
"0"
127.0.0.1:6379> LTRIM list1 0 2
OK
127.0.0.1:6379> LRANGE list1 0 -1
1) "1"
2) "2"
3) "3"

4.哈希(hash)

命令解释
HMSET user:1000 username zhangsan age 17 job it创建hash键值user:1000
HGET user:1000 username查看键值中username参数
HGET user:1000 age查看键值中age参数
HGET user:1000 job查看键值中job参数
HMSET user:1000 tel 123456789添加值tel
127.0.0.1:6379> HMSET user:1000 username zhangsan age 17 job it 
OK
127.0.0.1:6379> HGET user:1000 username
"zhangsan"
127.0.0.1:6379> HGET user:1000 age
"17"
127.0.0.1:6379> HGET user:1000 job
"it"
127.0.0.1:6379> hmset user:1000 tel 123456789
OK
127.0.0.1:6379> HGET user:1000 tel
"123456789"

5.集合(set)

命令解释
SADD set1 1 2 3创建集合set1
SMEMBERS set1查看集合set1
SADD set1 1 4为集合set1添加值1 4 ,但集合特性是去除重复,所以1无法再添加
SREM set1 1 4删除集合的值1 4
sadd set2 1 4 5创建第二个集合set2
SDIFF set1 set2求差集
SINTER set1 set2求合集(交集)
SUNION set1 set2求并集
127.0.0.1:6379> SMEMBERS set1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SADD set 1 4
(integer) 2
127.0.0.1:6379> SREM set1 1 4
(integer) 1
127.0.0.1:6379> SADD set2 1 4 5
(integer) 2
127.0.0.1:6379> sdiff set1 set2			
1) "2"
2) "3"
127.0.0.1:6379> sdiff set2 set1			
1) "1"
2) "4"
3) "5"
127.0.0.1:6379> sinter set1 set2			
(empty list or set)
127.0.0.1:6379> sunion set1 set2			
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

Redis持久化

  • RDB:生成时间点快照,保存于硬盘
    • 优点:速度快,适合做备份,能做主从复制,单开子进程进行rdb操作不影响主业务
    • 缺点:会有部分数据丢失
  • AOF:记录所有写操作命令,通过再次执行这些命令还原数据
    • 优点:最大程度保证数据不丢失
    • 缺点:日志记录量太大

1.RDB配置

[root@redis-1 ~]# redis-cli 
127.0.0.1:6379> bgsave       //RDB保存
Background saving started
127.0.0.1:6379> exit
[root@redis-1 ~]# vim /opt/redis_cluster/redis_6379/conf/6379.conf 
最后添加:
save 900 1
#在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 330 10	
#在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000
#在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照

2.AOF配置

[root@redis-1 ~]# vim /opt/redis_cluster/redis_6379/conf/6379.conf 
最后添加:
appendonly yes
#启用AOF持久化
appendfilename "redis.aof"
#指定AOF文件名
appendfsync everysec
#每秒同步一次

3.重启redis服务

[root@redis-1 ~]# redis-cli shutdown  //关闭redis
[root@redis-1 ~]# redis-server /opt/redis_cluster/redis_6379/conf/6379.conf  //开启redis

模拟实战:redis主从复制

redis主从复制的特点:

​ 为解决单点故障把数据复制到一个或多个副本服务器(从服务器),实现故障恢复和负载均衡。

1.安装两台redis服务器

(1)第一台已安装好,把第一台的redis安装目录数据scp到第二台上。

[root@redis-1 ~]#  scp -rp /opt/redis_cluster/ root@192.168.1.103:/opt

(2)在第二台服务器上,编译安装redis

[root@redis-2 ~]# cd /opt/redis_cluster/redis
[root@redis-2 redis]# make && make install
cd src && make all
make[1]: 进入目录“/opt/redis_cluster/redis/src”

Hint: It's a good idea to run 'make test' ;)

make[1]: 离开目录“/opt/redis_cluster/redis/src”
cd src && make install
make[1]: 进入目录“/opt/redis_cluster/redis/src”

Hint: It's a good idea to run 'make test' ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
make[1]: 离开目录“/opt/redis_cluster/redis/src”

(3)更改配置文件,启动服务

[root@redis-2 redis]# vim /opt/redis_cluster/redis_6379/conf/6379.conf 
bind 127.0.0.1 192.168.1.19
#添写本机IP(从服务器)
slaveof 192.168.1.20 6379
#添加主服务器IP和端口
......
[root@redis-2 redis]# redis-server /opt/redis_cluster/redis_6379/conf/6379.conf 
[root@redis-2 redis]# netstat -anpt | grep redis
tcp        0      0 192.168.1.19:6379       0.0.0.0:*               LISTEN      76323/redis-server  
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      76323/redis-server  
tcp        0      0 192.168.1.19:59726      192.168.1.20:6379       ESTABLISHED 76323/redis-server  

2.测试主从复制

(1)主服务器上新建键值,测试从服务器自动同步

主服务器:
[root@redis-1 ~]# redis-cli 
127.0.0.1:6379> SET k8 8
OK
127.0.0.1:6379> GET k8
"8"

从服务器:
[root@redis-2 ~]# redis-cli 
127.0.0.1:6379> GET k8
"8"

(2)从服务器在同步过程中,只能复制主数据库的数据,不能手动添加修改数据;如果从服务器非要修改数据,需要断开同步。

[root@redis-2 ~]# redis-cli   //登录
127.0.0.1:6379> GET k8   //查看同步的键值
"8"
127.0.0.1:6379> set k7 1    //创建 失败
(error) READONLY You can't write against a read only replica.
127.0.0.1:6379> exit   //退出
[root@redis-2 ~]# redis-cli slaveof no one      //断开同步
OK
[root@redis-2 ~]# redis-cli    //登录redis
127.0.0.1:6379> SET k7 1   //创建键值 k7
OK
127.0.0.1:6379> GET k7        //查看键值k7
"1"
127.0.0.1:6379> exit			//退出
[root@redis-2 ~]# redis-cli  slaveof 192.168.1.20 6379    //重新连接主服务器
OK
[root@redis-2 ~]# redis-cli  //登录redis
127.0.0.1:6379> GET k7  //查看键值 k7 查看不到
(nil)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值