一、redis概述
NoSQL(非关系型数据库、内存存储)
类型
文档型数据库(Document-oriented database)如MongoDB;
列族数据库(Column-family database)如HBase、Cassandra等;
图形数据库(Graph database)如Neo4j、ArangoDB等;
键值对数据库(Key-value database)如Redis、Memcached等;
对象数据库(Object-oriented database)如db4o等。
应用场景
缓存:Redis最常用的应用场景就是缓存,它可以缓存各种类型的数据,如数据库查询结果、API返回结果等,以提高应用程序的响应速度和并发性能。
分布式锁:Redis的分布式锁可以确保在分布式系统中对某个资源的互斥访问,避免多个节点出现并发操作的问题。
计数器:Redis支持对计数器的操作,能够方便地实现各种计数器的功能,如网站访问次数计数、订单数量计数等。
会话管理:Redis可以用来管理会话信息,实现会话的状态存储和共享,避免了单点故障的问题。
消息队列:Redis支持发布订阅模式,可以作为一个轻量级的消息队列使用,实现异步消息处理和任务派发等功能。
Redis(远程字典服务)
监听端口号:6379
全称:Remote Dictionary Server
内存存储、持久化、键值对存储
官网:Redis中文网
数据类型:字符串(string)、哈希值(hash)、列表(list)、集合(set)、位图(bitmap)
二、安装方式
编译安装
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
解压进入目录后
make && make install
修改配置文件redis.conf
# no 表示关闭保护模式
protected-mode no
# yes表示以守护进程的方式运行(会占用一个终端)
daemonize yes
启动Redis命令:./src/redis-server
[root@localhost redis-5.0.8]# ./src/redis-server
8123:C 08 Aug 2023 14:50:08.278 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8123:C 08 Aug 2023 14:50:08.278 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=8123, just started
8123:C 08 Aug 2023 14:50:08.278 # Warning: no config file specified, using the default config. In order to specify a config file use ./src/redis-server /path/to/redis.conf
8123:M 08 Aug 2023 14:50:08.279 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.8 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 8123
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
8123:M 08 Aug 2023 14:50:08.279 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
8123:M 08 Aug 2023 14:50:08.279 # Server initialized
8123:M 08 Aug 2023 14:50:08.279 # 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.
8123:M 08 Aug 2023 14:50:08.279 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
8123:M 08 Aug 2023 14:50:08.279 * Ready to accept connections
后台启动redis命令:nohup ./src/redis-server &
查看进程:ps -ef | grep redis
[root@localhost redis-5.0.8]# nohup ./src/redis-server &
[1] 8153
nohup: 忽略输入并把输出追加到"nohup.out"
[root@localhost redis-5.0.8]# ps -ef | grep redis
root 8153 3688 0 14:52 pts/0 00:00:00 ./src/redis-server *:6379
root 8168 3688 0 14:52 pts/0 00:00:00 grep --color=auto redis
[root@localhost redis-5.0.8]#
进入redis数据库
[root@localhost redis-5.0.8]# ./src/redis-cli
查看所有键
语法错误需要加s
127.0.0.1:6379> key *
'(error) ERR unknown command `key`, with args beginning with: `*`,
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>
select切换数据库
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "zhangsan"
设置键值对
127.0.0.1:6379> set key value [expiration EX seconds|PX milliseconds] [NX|XX]
设置键zhangsan 值为123
get 取出/查看键对 键不存在则返回空
127.0.0.1:6379> set zhangsan 123
OK
127.0.0.1:6379> keys *
1) "zhangsan"
127.0.0.1:6379> get zhangsan
"123"
删除键值对
del key
127.0.0.1:6379> keys *
1) "zhangsan"
127.0.0.1:6379> del zhangsan
(integer) 1
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>
rename 重命名键名称 rename oldkey newkey
不论更名后的键是否存在都会覆盖原有键,并将改名前的键的值富裕改名后的键
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set zhangsan 123
OK
127.0.0.1:6379> rename zhangsan lisi
OK
127.0.0.1:6379> keys *
1) "lisi"
127.0.0.1:6379> get lisi
"123"
127.0.0.1:6379> set wangwu 456
OK
127.0.0.1:6379> keys *
1) "wangwu"
2) "lisi"
127.0.0.1:6379> rename lisi wangwu
OK
127.0.0.1:6379> get wangwu
"123"
127.0.0.1:6379>
renamenx 重命名键名称
假如改名后键名称存在则更改不成功
renamenx oldkey newkey
127.0.0.1:6379> keys *
1) "wangwu"
2) "lisi"
127.0.0.1:6379> renamenx lisi wangwu
(integer) 0
move 移动键值对到指定数据库
假如目标数据库中存在同名键则移动失败
127.0.0.1:6379> move lisi 1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "lisi"
ttl 查看键值对的生命周期
ttl key
-1 永久 -2 已过期
expire 设置键值对的存储周期
expire key seconds
lisi为永久
127.0.0.1:6379[1]> ttl lisi
(integer) -1
设置lisi 180秒后过期
127.0.0.1:6379[1]> expire lisi 180
(integer) 1
查看过期时间 还有67秒过期
127.0.0.1:6379[1]> ttl lisi
(integer) 67
已过期
127.0.0.1:6379[1]> ttl lisi
(integer) -2
rpm源码安装
安装epel源如果没有去官网下载
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm
yum install -y epel-release
yum install -y redis
下载epel源
[root@localhost ~]# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm
\--2023-08-08 18:53:49-- http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm
正在解析主机 dl.fedoraproject.org (dl.fedoraproject.org)... 38.145.60.23, 38.145.60.24, 38.145.60.22
正在连接 dl.fedoraproject.org (dl.fedoraproject.org)|38.145.60.23|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:15608 (15K) [application/x-rpm]
正在保存至: “epel-release-7-14.noarch.rpm”
100%[======================================>] 15,608 50.6KB/s 用时 0.3s
2023-08-08 18:53:50 (50.6 KB/s) - 已保存 “epel-release-7-14.noarch.rpm” [15608/15608])
[root@localhost ~]# ls
epel-release-7-14.noarch.rpm
下载完后安装
[root@localhost ~]# yum install epel-release-7-14.noarch.rpm -y
已加载插件:fastestmirror, langpacks
正在检查 epel-release-7-14.noarch.rpm: epel-release-7-14.noarch
epel-release-7-14.noarch.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 epel-release.noarch.0.7-14 将被 安装
--> 解决依赖关系完成
local | 3.6 kB 00:00
依赖关系解决
================================================================================
Package 架构 版本 源 大小
================================================================================
正在安装:
epel-release noarch 7-14 /epel-release-7-14.noarch 25 k
事务概要
================================================================================
安装 1 软件包
总计:25 k
安装大小:25 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : epel-release-7-14.noarch 1/1
验证中 : epel-release-7-14.noarch 1/1
已安装:
epel-release.noarch 0:7-14
完毕!
安装redis
[root@localhost ~]# yum install -y redis
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 6.1 kB 00:00
* epel: mirrors.bfsu.edu.cn
epel | 4.7 kB 00:00
local | 3.6 kB 00:00
(1/3): epel/x86_64/group_gz | 99 kB 00:00
epel/x86_64/updateinfo FAILED
https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/repodata/43fd207679e4a5a870ce853bffb53fdcc2a8d73fb85ba1d9bad7db2c8a7e723b-updateinfo.xml.bz2: [Errno 14] HTTPS Error 404 - Not Found
正在尝试其它镜像。
To address this issue please refer to the below wiki article
https://wiki.centos.org/yum-errors
If above article doesn't help to resolve this issue please use https://bugs.centos.org/.
epel/x86_64/primary_db FAILED
https://mirrors.cqu.edu.cn/epel/7/x86_64/repodata/d05e409278f3f3af0c829c7f2aff0a194f152a4b4c1cd50b584005193ea1f777-primary.sqlite.bz2: [Errno 14] HTTPS Error 404 - Not Found
正在尝试其它镜像。
(2/3): epel/x86_64/updateinfo | 1.0 MB 00:00
epel/x86_64/primary_db FAILED
https://ftp.riken.jp/Linux/fedora/epel/7/x86_64/repodata/d05e409278f3f3af0c829c7f2aff0a194f152a4b4c1cd50b584005193ea1f777-primary.sqlite.bz2: [Errno 14] HTTPS Error 404 - Not Found
正在尝试其它镜像。
(3/3): epel/x86_64/primary_db | 7.0 MB 00:00
正在解决依赖关系
--> 正在检查事务
---> 软件包 redis.x86_64.0.3.2.12-2.el7 将被 安装
--> 正在处理依赖关系 libjemalloc.so.1()(64bit),它被软件包 redis-3.2.12-2.el7.x86_64 需要
--> 正在检查事务
---> 软件包 jemalloc.x86_64.0.3.6.0-1.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
================================================================================
Package 架构 版本 源 大小
================================================================================
正在安装:
redis x86_64 3.2.12-2.el7 epel 544 k
为依赖而安装:
jemalloc x86_64 3.6.0-1.el7 epel 105 k
事务概要
================================================================================
安装 1 软件包 (+1 依赖软件包)
总下载量:648 k
安装大小:1.7 M
Downloading packages:
警告:/var/cache/yum/x86_64/7/epel/packages/jemalloc-3.6.0-1.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
jemalloc-3.6.0-1.el7.x86_64.rpm 的公钥尚未安装
(1/2): jemalloc-3.6.0-1.el7.x86_64.rpm | 105 kB 00:00
(2/2): redis-3.2.12-2.el7.x86_64.rpm | 544 kB 00:00
--------------------------------------------------------------------------------
总计 1.7 MB/s | 648 kB 00:00
从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 检索密钥
导入 GPG key 0x352C64E5:
用户ID : "Fedora EPEL (7) <epel@fedoraproject.org>"
指纹 : 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
软件包 : epel-release-7-14.noarch (@/epel-release-7-14.noarch)
来自 : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : jemalloc-3.6.0-1.el7.x86_64 1/2
正在安装 : redis-3.2.12-2.el7.x86_64 2/2
验证中 : redis-3.2.12-2.el7.x86_64 1/2
验证中 : jemalloc-3.6.0-1.el7.x86_64 2/2
已安装:
redis.x86_64 0:3.2.12-2.el7
作为依赖被安装:
jemalloc.x86_64 0:3.6.0-1.el7
完毕!
启动redis默认监听127.0.0.1地址
[root@localhost ~]# systemctl start redis
[root@localhost ~]# netstat -anptu | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 64355/redis-server
[root@localhost ~]#
目录结构 | |||
/etc/redis.conf | 主配置文件 | bind 127.0.0.1 | 修改监听地址 |
port 6379 | 修改监听端口号 | ||
pidfile | 指定通过该配置文件启动 reids进程后的PID文件名称 | ||
loglevel | 定义日志级别 | ||
logfile | 定义日志存储路径 | ||
databases | 指定默认数据库数量 | ||
save | 定义单位时间内key的改变次数 | ||
dbfilename | 定义存储RDB持久化数据的文件名称 | ||
dir | 定义RDB与AOF文件的存储目录 | ||
appendonly | AOF的启停 | ||
appendfilename | 定义AOF持久化文件的名称 | ||
appendfsync | 定义AOF数据同步间隔 | ||
requirepass | 设置登录redis的密码 | ||
/var/lib/redis | 持久化文件存储目录 | ||
/var/log/redis | 日志文件存储目录 | ||
/var/run/redis | PID文件存储目录 |
命令解析 | |||
redis-server | redis启动命令 | ||
redis-cli | redis登陆命令 | -h | redis服务器IP |
-p | 指定访问端口号 | ||
-a | 指定登录密码 | ||
-n | 指定数据库编号 | ||
redis-check-rdb | 检查RDB文件 | ||
redis-check-aof | 检查AOF文件 |
redis登陆更改 | |||
问题 | 更改完port后,systemctl启动redis异常 | ||
解决办法 | 使用redis-server /etc/redis.conf | ||
若要redis后台运需修改配置文件 daemonize yes |
本地登陆
监听本地网卡地址
redis-cli -h ip -p 端口号
三、Redis持久化
/var/lib/redis/
RDB模式
默认持久化
dump.rdb 数据库启动时会读取
触发条件
redis进程退出(宕机、redis程序崩溃)
手动保存(触发RDB)save
AOF模式
默认关闭
appendonly.aof 默认进程启动时读取
开启 appendonly yes
可以与RDB同时使用