文章目录
- 0. Redis介绍
- 1. Centos下Redis安装
- 2. redis.conf配置文件介绍
- 3. redis相关命令
- 4. 启动
- 3.2 **命令行操作**
- 3.3 Redis压测命令
- 4.redis中发布订阅和事务
- 4.1 发布订阅(Pub/Sub)
- 4.2 事务
- 5. redis封装系统服务
- 6. 问题与解决
- 6.1 启动Redis报错:Could not create Server TCP listening socket *:6379: bind: Address already in use
- 6.2 Could not connect to Redis at 127.0.0.1:6379: Connection refused
0. Redis介绍
Redis(Remote Dictionary Server)
是一个开源的、使用ANSI C语言编写的 Key-Value 数据库。
- Redis被称为
远程字典服务
,因为它提供了一种类似于字典的数据结构
,但可以通过网络
进行远程访问和操作。
/来源:
Redis出现的原因是作为缓存数据库,解决MySQL数据库在大量并发
请求下的性能问题。
特点
1. 支持数据持久化
- Redis是内存数据库,但从Redis 2.0版本开始,它引入了持久化机制。持久化是数据库系统的一个关键特性,它允许数据库在系统崩溃后能够恢复到崩溃前的状态。
持久化方法:
- 快照:是Redis的默认持久化方式。通过将数据写入磁盘,可以记录每一次对数据库的修改。当你重启Redis时,可以通过加载快照文件来恢复数据。
- AOF(只追加文件):与快照方式不同,AOF持久化是记录每次修改数据库的命令,并在重启时逐个执行这些命令,从而恢复数据
2. 支持多种数据类型
- Redis支持五种主要数据类型,分别是字符串、列表、集合、有序集合和散列
3. 支持丰富的操作类型
4. 支持分布式
- 通过开启Redis集群模式来实现。在集群模式下,Redis会自动将数据根据键哈希值分散到不同的节点上,实现数据的分布式存储。
数据类型 | 说明 | 实现类型 | 操作 |
---|---|---|---|
字符串 | Redis最基本的数据类型,是二进制安全的数据序列(即:它可以包含任何数据 甚至是应该图片) | 数字、字符串、二进制数据 | SET(设置 )、GET(获取 )、INCR(自增 )、DECR(自减 ) |
列表 | 简单的字符串列表,按照插入顺序排序 | 数组 | LPUSH(左侧插入 )、RPUSH(右插 )、LPOP(左侧弹出 )、RPOP(右侧弹出 )等 |
集合 | 无序且不重复的字符串集合 | 集合 | SADD(添加元素 )、SMEMBERS(获取元素 ) |
有序集合 | 有序集合与集合类似,但每个元素都有一个分数,根据分数排序。 | 有序集合 | ZADD(添加元素 )、ZRANGE(获取元素 )等 |
散列 | 散列是键值对的集合(类似于map) | 散列 | HSET(设置哈希字段和值 )、HGET(获取 )、HDEL(删除 )等 |
1. Centos下Redis安装
Linux_Study 目录:5.2 https://blog.csdn.net/meini32/article/details/128562114
2. redis.conf配置文件介绍
https://blog.csdn.net/w15558056319/article/details/121414742
redis.conf配置
#(Network)修改访问:运行任何服务器访问redis
bind 0.0.0.0#(General)允许后台执行
daeminize yes#(se)设置密码
requirepass 123456
3. redis相关命令
4. 启动
#启动redis
redis-server redis.conf#查看相关进程
ps -ef | grep redis#进入命令行界面(本地启动)
redis-cli#远程启动
redis-cli -h host -p port -a password
3.2 命令行操作
#查看redis信息
info#查看redis端口信息
config get port#退出命令行界面
exit#重启并保存修改
#重启不保存
shutdown save
shutdown no save#redis 如果有密码(登录)
auth 123456#查看主机地址端口
config get bind#插入应该数据
set ky 10#删除数据
del ky#序列化操作
(将给定的key值序列化,结果是一个二进制串,代表可以将其持久化到磁盘或者在网络上传输)
DUMP ky#判断存在
EXISTS ky#查看key的有效时间 :-2表示已过期或不存在、-1表示永久有效
TTL ky #s
PTTL ky #ms#设置有效时间(30s)
EXPIRE ky 30#设置永久有效
PERSIST ky#获取满足给定模式所有key
KEYS *
#set和get127.0.0.1:6379> set ky1 23
OK
127.0.0.1:6379> set ky2 nini
OK
127.0.0.1:6379> get ky1
"23"
127.0.0.1:6379> get ky2
"nini"
3.3 Redis压测命令
redis-benchmark [-h <host>] [-p <port>] [-c <concurrent>] [-n <requests>] [-d <size>] [-k] [-r] [-t <tests>] [-i <interval>] [--csv] [--latency] [--raw] [--quiet]-h <host>:Redis服务器的主机名,默认为127.0.0.1。
-p <port>:Redis服务器的端口号,默认为6379。
-c <concurrent>:并发数,即同时执行的请求数,默认为50。
-n <requests>:请求数,即总共发送的请求数,默认为10000。
-d <size>:数据包大小,默认为3字节。
-k:使用keepalive长连接。
-r:随机Key。
-t <tests>:测试方法,默认为ping、set、get、incr等。
-i <interval>:打印结果间隔时间,默认为1秒。
--csv:输出csv格式文件。
--latency:输出延迟数据。
--raw:输出原始数据。
--quiet:静默输出结果。#100个并发请求,1000000个请求
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n100000
4.redis中发布订阅和事务
4.1 发布订阅(Pub/Sub)
发布订阅(Pub/Sub)是一种消息通信模式,其中发布者(publisher)发布消息,而订阅者(subscriber)接收消息。
- 这是一个非持久性的消息系统,因为当没有订阅者在线时,发布的消息将会丢失。
- 发布者和订阅者都可以是任何Redis客户端。
- 发布者可以将消息发送到特定的频道,而订阅者可以通过订阅一个或多个频道来接收消息。
命令 | 说明 | 格式 |
---|---|---|
PUBLISH: | 将指定的消息发送到指定的频道 | PUBLISH channel message。 |
SUBSCRIBE: | 订阅指定的频道。当该频道有消息发布时,订阅者将会收到消息。 | SUBSCRIBE channel [channel …] |
UNSUBSCRIBE | 取消订阅指定的频道 | UNSUBSCRIBE channel [channel …] |
PUBSUB: | 用于获取有关给定键的信息 | 可以获取发布者和订阅者数量、发布次数等。 |
4.2 事务
Redis事务是一组命令的集合,这些命令被打包成一个整体并原子性地执行。这意味着在事务执行过程中,其他客户端提交的命令请求不会插入到事务执行命令序列中。
- Redis事务的概念类似于数据库事务,具有原子性、一致性和隔离性。
redis中的事务和mysql中的事务有什么区别?
- 默认状态
Redis:Redis默认开启事务,即默认情况下,每一条写命令都会被放入一个未命名的队列中,只有当执行EXEC命令时,队列中的命令才会被执行。
MySQL:MySQL默认开启事务,但每一条SQL语句都会立即执行,无法排队执行。- 四大特性
都是有ACID的特性,但是redis并不能保证事务的隔离性(因为Redis使用单一线程的模型来执行事务)
以下的表格列出了Redis事务相关的命令:
命令 | 描述 |
---|---|
MULTI | 标记一个事务块的开始。 |
EXEC | 执行所有事务块内的命令。 |
DISCARD | 取消事务,放弃执行事务块内的所有命令。 |
WATCH | 监视一个或多个键,如果在事务执行之前这个(或这些)键被其他命令所改动,那么事务将被打断。 |
5. redis封装系统服务
工具所在位置
/home/vagrant/soft/redis/redis-7.0.2/utils/install_server.sh
#列出所有以"redis"为名的服务及其启动状态。
chkconfig --list | grep redis
systemctl是一个用于管理系统进程的命令行工具,是Systemd系统管理工具的一部分。Systemd是一个用于初始化系统、管理进程和服务的系统管理工具。
启动服务:systemctl start service_name
停止服务:systemctl stop service_name
重启服务:systemctl restart service_name
查看服务状态:systemctl status service_name
启用开机自启动服务:systemctl enable service_name
停用开机自启动服务:systemctl disable service_name
查看服务是否为开机自启动:systemctl is-enabled service_name
查看所有服务状态:systemctl list-units --type=service
查看所有已启用的服务:systemctl list-unit-files --type=service --state=enabled
6. 问题与解决
6.1 启动Redis报错:Could not create Server TCP listening socket *:6379: bind: Address already in use
解决办法:添加链接描述
6.2 Could not connect to Redis at 127.0.0.1:6379: Connection refused
添加链接描述