Linux 安装Redis-6.2.5,配置及使用(RDB与AOF持久化、sentinel机制、主从复制、Spring Boot 集成 Redis)

CentOS 7 安装Redis-6.2.5版本

Redis采用的是基于内存的单进程 单线程模型 的KV数据库,由C语言编写。官方提供的数据是可以达到100000+的qps

应用场景:

  1. 令牌(Token)生成
  2. 短信验证码
  3. 发布订阅
  4. 分布式锁
  5. 计数器
  6. 缓存(热点数据)

官网地址:https://redis.io
在这里插入图片描述

获取Redis安装包

# 使用wget命令下载安装包,安装wget命令下载工具
yum -y install wget
# 创建redis目录
mkdir /usr/local/redis -p
cd /usr/local/redis
# 下载安装包
wget http://download.redis.io/releases/redis-6.2.5.tar.gz

官网下载地址,及安装启动教程:https://redis.io/download
在这里插入图片描述

通过官网下载指定版本,然后使用传输文件工具上传到Linux服务器的/usr/local/redis 路径上(没有创建mkdir /usr/local/redis -p)
https://download.redis.io/releases

在这里插入图片描述

安装gcc/g++编译器(要大于>4.8.5版本),及make编译

#使用命令查看gcc/g++版本
gcc -v
g++ -v
#gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)

# 先进入此目录
cd /etc/scl/conf

# 使用SCL管理, Red Hat 软件包源
yum -y install centos-release-scl
# 安装devtoolset-9依赖包
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
# 临时有效,退出 shell 或重启会恢复原 gcc 版本
scl enable devtoolset-9 bash
# 永久有效
# echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile

# 查看gcc/g++版本
gcc -v
g++ -v
#gcc version 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC)



# 回到redis目录
cd /usr/local/redis
# 解压redis安装包
tar -zxvf redis-6.2.5.tar.gz

# make编译
cd redis-6.2.5
make
# 编译成功
#Hint: It's a good idea to run 'make test' ;)


# 当前终端运行redis服务进程
./src/redis-server
#29211:C 23 Dec 2021 13:58:49.608 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
#29211:C 23 Dec 2021 13:58:49.608 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=29211, just started
#29211:C 23 Dec 2021 13:58:49.608 # Warning: no config file specified, using the default config. In order to specify a config file use ./src/redis-server /path/to/redis.conf
#29211:M 23 Dec 2021 13:58:49.613 * Increased maximum number of open files to 10032 (it was originally set to 1024).
#29211:M 23 Dec 2021 13:58:49.613 * monotonic clock: POSIX clock_gettime
#                _._                                                  
#           _.-``__ ''-._                                             
#      _.-``    `.  `_.  ''-._           Redis 6.2.5 (00000000/0) 64 bit
#  .-`` .-```.  ```\/    _.,_ ''-._                                  
# (    '      ,       .-`  | `,    )     Running in standalone mode
# |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
# |    `-._   `._    /     _.-'    |     PID: 29211
#  `-._    `-._  `-./  _.-'    _.-'                                   
# |`-._`-._    `-.__.-'    _.-'_.-'|                                  
# |    `-._`-._        _.-'_.-'    |           https://redis.io       
#  `-._    `-._`-.__.-'_.-'    _.-'                                   
# |`-._`-._    `-.__.-'    _.-'_.-'|                                  
# |    `-._`-._        _.-'_.-'    |                                  
#  `-._    `-._`-.__.-'_.-'    _.-'                                   
#      `-._    `-.__.-'    _.-'                                       
#          `-._        _.-'                                           
#              `-.__.-'                                               
#
#29211:M 23 Dec 2021 13:58:49.616 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
#29211:M 23 Dec 2021 13:58:49.616 # Server initialized
#29211:M 23 Dec 2021 13:58:49.616 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
#29211:M 23 Dec 2021 13:58:49.616 * Ready to accept connections
# 按键Ctrl + C 终止Redis服务进程(先不要按)
#Redis is now ready to exit, bye bye...

打开另外一个终端

# 打开另外一个终端
# 查看进程信息,一行color=auto 6379(没有运行),两行才算运行
ps aux | grep redis
#root      29211  0.1  0.2 162480 10256 pts/0    Sl+  13:58   0:02 ./src/redis-server *:6379
#root      29536  0.0  0.0 112724   984 pts/1    S+   14:21   0:00 grep --color=auto redis

# 查看端口是否在运行,显示行数是在运行,没显示(没运行)
netstat -tunlp | grep 6379
#tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      29211/./src/redis-s 
#tcp6       0      0 :::6379                 :::*                    LISTEN      29211/./src/redis-s

回到原来的终端

# 回到原来的终端,终止redis服务进程
按键Ctrl + C
#Redis is now ready to exit, bye bye...

# 修改redis.conf文件,按键/ 输入需要查看修改的内容,然后回车,如:/protected-mode
vim redis.conf
#运行远程连接需要调整,注释掉#bind 127.0.0.1 -::1
#bind 127.0.0.1 -::1
#关闭密码验证,yes 修改为 no
protected-mode no
#设置后端启动 no 修改为 yes
daemonize yes

# 占时不设置密码
#(无需)关闭redis设置密码(默认是注释掉的,就是关闭)
# requirepass foobared
#(需要)开启redis设置密码,还要开启密码验证
requirepass 123
#开启密码验证,no 修改为 yes
protected-mode yes


# 运行redis服务 加上redis.conf配置文件
./src/redis-server redis.conf

# 查看redis服务进程信息,以及 端口是否在运行
ps aux | grep redis && netstat -tunlp | grep 6379
#root      32082  0.2  0.2 162480  9900 ?        Ssl  15:22   0:00 ./src/redis-server *:6379
#root      32114  0.0  0.0 112724   984 pts/1    S+   15:23   0:00 grep --color=auto redis
#tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      32082/./src/redis-s 
#tcp6       0      0 :::6379                 :::*                    LISTEN      32082/./src/redis-s


# 关闭防火墙,自己玩没必要开启防火墙
# 查看防火状态(Active: inactive (dead)无效; Active: failed关闭; Active: active (running)运行)
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 禁用开机启动
systemctl disable firewalld

# 启动防火墙
#systemctl start firewalld 
# 开启开机启动
#systemctl enable firewalld
# 重启防火墙
#systemctl restart firewalld


# 要开启防火墙远程访问,需要开放redis端口 6379
# 查看是否开放端口
firewall-cmd  --list-port
# 开放6379端口
firewall-cmd --add-port=6379/tcp --permanent
#success
# 关闭6379端口
firewall-cmd --remove-port=6379/tcp --permanent
# 重新加载信息
firewall-cmd --reload
#success

Redis可视化工具 Redis Desktop Manager

使用Redis可视化工具 Redis Desktop Manager v.0.8.8.384,网上找一个多的很,使用的版本号是v.0.8.8.384在这里插入图片描述

# 先关闭redis服务 pwd /usr/local/redis/redis-6.2.5
./src/redis-cli -p 6379 shutdown
# 查看redis服务是否关闭
ps aux | grep redis && netstat -tunlp | grep 6379
#已关闭
#root      35336  0.0  0.0 112724   988 pts/1    S+   17:35   0:00 grep --color=auto redis


# 设置开机自动启动Redis服务(systemd对应的进程管理命令是systemctl)
vim /etc/systemd/system/redis-server.service
# 输入内容:
[Unit]
Description=redis-server
After=network.tartget

[Service]
Type=forking
ExecStart=/usr/local/redis/redis-6.2.5/src/redis-server /usr/local/redis/redis-6.2.5/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# 开机自动启动redis-server 与 redis-server重启
systemctl daemon-reload
systemctl enable redis-server
systemctl restart redis-server
systemctl status redis-server
#● redis-server.service - redis-server
#   Loaded: loaded (/etc/systemd/system/redis-server.service; enabled; vendor preset: disabled)
#   Active: active (running) since 四 2021-12-23 17:45:09 CST; 2s ago
#  Process: 35518 ExecStart=/usr/local/redis/redis-6.2.5/src/redis-server /usr/local/redis/redis-6.2.5/redis.conf (code=exited, status=0/SUCCESS)
# Main PID: 35521 (redis-server)
#    Tasks: 5
#   Memory: 8.3M
#   CGroup: /system.slice/redis-server.service
#           └─35521 /usr/local/redis/redis-6.2.5/src/redis-server *:6379
#
#12月 23 17:45:09 localhost.localdomain systemd[1]: Starting redis-server...
#12月 23 17:45:09 localhost.localdomain systemd[1]: Started redis-server.


# 启动服务 与 查看状态
systemctl start redis-server
systemctl status redis-server
# 停止 与 重启
systemctl stop redis-server
systemctl restart redis-server
# 开启开机启动 与 禁用开机启动
systemctl enable redis-server
systemctl disable redis-server

Redis的6种数据类型

String(字符串)

  • string在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
  • 类似java中的Map<String,String>
  • 应用场景:可以做验证码
# redis-cli客户端连接redis-server服务器
/usr/local/redis/redis-6.2.5/src/redis-cli -p 6379
# 新增或修改指定key的值
set key val
# 获取指定key的值
get key
# 删除指定key的值
del key

List(列表)

  • list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
  • 类似Java Map<String,Linked < String > >
  • 应用场景非常多:如twitter的关注列表、粉丝列表等都可以用Redis的list结构来实现;再如有的应用使用Redis的list类型实现一个简单的轻量级消息队列,生产者push,消费者pop/bpop;
# 从头部开始添加
lpush key v1 v2 ....
# 从尾部添加
rpush key v1 v2 ...
# 查看列表 lrange key start end (start从0开始,负数表示到链表尾部的位置,-1链表尾部,-2尾部倒数第二)
lrange key 0 -1
# 删除链表第一个元素
lpop key
# 删除链表倒数第一个元素
rpop key
# 获取链表元素个数
llen key
# 扩展命令(lpushx头部/rpushx) 仅当参数中指定的key存在时,向关联的list的头部或尾部插入value。如果不存在,将不进行插入
lpushx key value
rpushx key value

Hash(字典)

  • hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
  • 类似Java Map<String,HashMap<String,String>>
# 添加或修改指定key
hset key field val
# 设置多个key
hmset key f1 v1 f2 v2
# 获取值
hget key field
# 获取多个值
hmget key f1 f2
# 删除指定值
hdel key f1 f2
# 删除整个列表
del key

Set(集合)

  • set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
  • 时间复杂度的优劣对比常见的数量级大小:越小表示算法的执行时间频度越短,则越优;
  • O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)//2的n方<O(n!)<O(nn)//n的n方
# 添加删除元素
sadd k m1 m2
srem k m1 m2
# 获取set中所有成员
smembers k
# 求差集合(A、B两个集合,获取属于A但是B中没有的元素)
sdiff A B
# 求交集(A、B两个集合,AB两个集合都有的元素)
sinter A B
# 求并集
sunion A B

Sorted Set(有序集合)

  • 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
  • 不同的是每个元素都会关联整数值或双精度浮点数double类型的分数。redis正是通过整数或浮点数来为集合中的成员进行从小到大的排序。
  • 有序集合的成员是唯一的,但整数值或双精度浮点数(score)却可以重复。
  • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
  • 应用场景:热点排行榜
#添加元素
zadd ke 10 m1 9 m2 8 m3
#获得元素,
#获取指定成员对应的分数
zscore ke m1
#获取集合元素个数
zcard ke
#删除元素
zrem ke m1

#范围查询
#zrange key start stop [withscores],加withscores参数表明返回的成员包含其分数。
zrange ke 0 -1
zrange ke 0 -1 withscores
#照元素分数从大到小的顺序 zrevrange key start stop [withscores] 返回索引从start到stop之间的所有元素(包含两端的元素)
zrevrange ke 0 -1 withscores
 
#按照排名范围删除元素zremrangebyrank key start stop,移除下标 0 至 1 区间内的成员
zremrangebyrank ke 0 1
#按照数值范围删除元素zremrangebyscore key min max,移除所有数值在 1 到 10 内的成员
zremrangebyscore ke 1 10

Steam(日志数据结构)

  • strea
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值