Redis

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: CentOS 7安装redis4.0.11 redis持久化机制RDB、AOF radis事务:MULTI、命令入列、EXEC、DISCARD、WATCH

一、安装

安装gcc

yum install -y gcc

安装tcl

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz  
sudo tar xzvf tcl8.6.1-src.tar.gz  -C /usr/local/  
cd  /usr/local/tcl8.6.1/unix/  
sudo ./configure  
sudo make  
sudo make install

安装redis

wget http://download.redis.io/releases/redis-4.0.11.tar.gz

tar -zxvf redis-4.0.11.tar.gz 

mv redis-4.0.11 /usr/local/redis

make MALLOC=libc

cd src && make install

启动与测试

#启动
cd /usr/local/redis/src
redis-server
#连接redis
cd /usr/local/redis/src
redis-cli

image

image

配置后台启动

mkdir etc && cp ./redis.conf  ./etc/
#将136中的daemonize no改为yes
vi ./etc/redis.conf

#指定配置文件启动
./redis-server /usr/local/redis/etc/redis.conf

image

image

image

为redis设置环境变量

vim /etc/profile (在文件的末尾添加这两行)
切换到任意目录,执行which redis-server
image

为客户端配置密码

修改redis.conf 其中500行,root为配置的密码
image

image

参考

https://github.com/timespacegroup/docs/blob/master/server-software/Redis-3.2.9-single.md


二、持久化

redis支持RDB和AOF两种持久化机制,持久化功能有效的避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。

RDB

RDB持久化是把当前进程数据,生成快照保存到硬盘的过程。
RDB是redis默认的持久化方案。会在指定目录下生成一个dump.rdb文件。
RDB的持久化方案分为手动触发和自动触发

配置RDB持久化

配置redis.conf,大致如下位置
image
1、15min内有一个key更改;5min内有10个key更改;1min内有10000个key更改会触发快照持久化。
2、可以选择注释所以策略,不进行持久化,也可以使用save ""来进行关闭持久化。

image

stop-writes-on-bgsave-error yes
参见:https://blog.csdn.net/hexieshangwang/article/details/47254087

RDB触发时机

1、满足配置的save策略(自动触发)
2、手动执行命令save或者是命令bgsave(手动触发)。
3、执行flushall命令,清空数据库所有数据,意义不大
4、执行shutdown命令,保证服务器正常关闭且不丢失任何数据,意义也不大。

save and bgsave

1、save为阻塞,bgsave为异步,一般使用bgsave。

操作演示

image
image

AOF

1、AOF采用日志的形式来记录每个写操作,已文本的形式存储每条写命令。
2、redis重启的会根据日志文件,从头至尾执行一次指令以完成数据的恢复

配置AOF

image

appendonly no
appendfilename "appendonly.aof"
# appendfsync always
appendfsync everysec
# appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no

AOF重写

AOF的工作原理是将写操作记录到文件,随着写操作越来越多,文件的冗余内容会越来越多,所有redis增加了AOF重写机制。
当AOF文件大小超过设定的阈值时,redis就会对AOF文件进行压缩。
重写的原理是:fork出新的进程,将当前内存的数据写入临时文件中,然后以临时文件替换庞大的旧的AOF文件。

参考:
https://segmentfault.com/a/1190000012908434
https://www.cnblogs.com/itdragon/p/7906481.html


三、事务

严格意义来讲,redis事务和我们理解的传统数据库的事务是不一样的。redis的事务实质上是命令的集合,在一个事务中要么所有的命令都被执行,要么所有的命令都不执行。一个事务从开始到执行会经历以下三个阶段:开始事务、命令入列、执行事务。redis事务涉及的命令有:MULTI、EXEC、DISCARD、WATCH。

MULTI

MULTI命令的执行标记着事务的开始,这个命令唯一的作用就是,将客户端的REDIS_MULTI选项打开,让客户端从非事务状态切换到事务状态。

127.0.0.1:6379> multi
OK

命令入列

当客户端处于非事务状态时,所有发送给服务器端的命令都会立即被服务器执行。
但是,当客户端进入事务状态后,服务器在收到来自客户端的命令时,不会立即执行命令,而是将这些命令全部放进一个事务队列里,然后返回QUEUED,表示命令已入队列。
image

[root@k8s-master-101 ~]# redis-cli -a root
Warning: Using a password with '-a' option on the command line interface may not be safe.
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a a
QUEUED
127.0.0.1:6379> set b b
QUEUED
127.0.0.1:6379> get a
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) "a"
127.0.0.1:6379> get a 
"a"
127.0.0.1:6379> get b
"b"
127.0.0.1:6379> 

执行事务

如果客户端处于事务状态, 在EXEC 命令执行时, 服务器根据客户端所保存的事务队列, 以先进先出(FIFO)的方式执行事务队列中的命令: 最先入队的命令最先执行, 而最后入队的命令最后执行。
相反的,DISCARD命令会清空队列取消命令的执行。
image
前面说到, 当客户端进入事务状态之后, 客户端发送的命令就会被放进事务队列里。

但其实并不是所有的命令都会被放进事务队列, 其中的例外就是 EXEC 、 DISCARD 、 MULTI 和 WATCH 这四个命令 —— 当这四个命令从客户端发送到服务器时, 它们会像客户端处于非事务状态一样, 直接被服务器执行

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a a
QUEUED
127.0.0.1:6379> set b b
QUEUED
127.0.0.1:6379> get a
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) "a"
127.0.0.1:6379> get a 
"a"
127.0.0.1:6379> get b
"b"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a aa
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get a
"a"
127.0.0.1:6379> 

WATCH

WATCH 命令用于在事务开始之前监视任意数量的键: 当调用 EXEC 命令执行事务时, 如果任意一个被监视的键已经被其他客户端修改了, 那么整个事务不再执行, 直接返回失败。

127.0.0.1:6379> WATCH a
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET a "aaa"
QUEUED
127.0.0.1:6379> exec
(nil)

在执行EXEC前,使用另一客户端执行set a a。

127.0.0.1:6379> set a a
OK

参考:https://redisbook.readthedocs.io/en/latest/feature/transaction.html?from=singlemessage


docker pull redis:5.0.3
docker run -d -p 6379:6379 --name redis redis:5.0.3

#-p 6379:6379 将宿主机的端口映射到容器
#-v /root/redis/data:/data 将本地目录挂载到容器的/data目录,redis使用此目录持久化
#-v /root/redis/redis.conf:/usr/local/etc/redis/redis.conf 映射配置文件
# --name redis redis:5.0.3 使用redis redis:5.0.3镜像创建name为redis的容器
#redis-server /usr/local/etc/redis/redis.conf --appendonly yes --requirepass "123456" 在容器中启动以指定的配置文件启动redis,密码为123456
docker run -d --privileged=true -p 6379:6379 -v /root/redis/data:/data -v /root/redis/redis.conf:/usr/local/etc/redis/redis.conf --name redis redis:5.0.3 redis-server /usr/local/etc/redis/redis.conf --appendonly yes --requirepass "123456"

#使用redisClient 连接容器的redis,创建key=dd value=dd的string类型的键值对

#进入容器 连接上redis,查看dd的值 
[root@localhost ~]# docker exec -it redis redis-cli -a '123456'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> get dd
"dd"
相关文章
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
271 116
|
18天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
12天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
663 219
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
360 34
Meta SAM3开源:让图像分割,听懂你的话
|
10天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1592 157
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
897 61
|
7天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
296 140