redis删除key模糊匹配_Linux For Java - Redis学习 Day23

本文介绍了Redis的安装过程,包括源码编译、安装、配置等步骤,并详细讲解了Redis的数据结构,如键值对、字符串、列表、集合、散列等,以及其在实际业务中的应用。同时,讨论了Redis的持久化机制,包括RDB和AOF两种方式,分析了它们的优缺点和触发条件。
摘要由CSDN通过智能技术生成

1 要讲的内容

(1)Redis概述

(2)Redis安装和部署(难点)

(3)Redis数据结构类型(重点)

(4)Jedis操作Redis(掌握)

(5)Redis持久化机制(了解)

2 Redis简介

2.1 Redis是什么

Redis是一个开源的,使用ANSI C 编写,高性能的Key-Value的NoSQL数据库。

2.2 Redis特点

(1)基于内存

(2)可持久化数据

(3)具有丰富的数据结构类型,适应非关系型数据的存储需求

(4)支持绝大多数主流开发语言,如C、C++、Java、Python、R、JavaScript等。

(5)支持集群模式,高效、稳定。

2.3 数据模型(重点)

(1)键值对形式。

(2)Redis的数据结构类型,指的就是Redis值的结构类型。

7099ca57939ce19b8e16cb64a46281da.png

2.4 Redis作用

(1)本质是数据库,能存储数据。

Redis能灵活处理非关系型数据的读、写问题,是对MySQL等关系型数据库的补充。

新浪微博就是使用Redis集群做数据库。

(2)缓存数据。

所谓缓存,就是将数据加载到内存中后直接使用,而不是每次都通过IO流从磁盘上读取。好处:读写效率高。

而Redis则是将数据直接存储在内存中,只有当内存空间不足时,将部分数据持久化到磁盘上。

3 Redis安装

3.1 说明

本课程是在Linux上安装Redis。

而Redis官方只提供了源码,并没有提供经过编译之后的安装包。

因此,安装Redis,要先编译、后安装。(即源码安装方式)

3.2 redis安装步骤

1)、下载,上传到Linux服务器,并解压

2)、预编译(实际上是检查编译环境的过程)

进入目录: cd /opt/soft/redis-3.2.9/deps/jemalloc

执行预编译 ./configure

在预编译的过程中,会检测安装redis所需的相关依赖,依次安装即可。

(a)缺少c编译环境 yum -y install gcc-c++

预编译不是必须的步骤,它只是在检查编译过程中需要的环境是否满足。

通常源码包中,都有一个可执行的configure脚本,这个脚本执行预编译的脚本。但是有一些源码包中,没有该文件,可以省略预编译步骤。

3)、编译 进入/opt/soft/redis-3.2.9/src

Make

4)、安装 进入/opt/soft/redis-3.2.9/src

Make install

5)、启动redis服务端(指定配置文件)

拷贝redis.conf文件到/etc 目录下,方便管理。

cp /opt/soft/redis-3.2.9/redis.conf /etc/

/usr/local/bin/redis-server /etc/redis.conf

b6097a8218c67e65c0fb7d254140db25.png

6)、启动redis客户端,登陆 /usr/local/bin/redis-cli

7678dd67d5108e2b156468f2aec05abe.png

7)、安装成功

3.3 redis.conf常用配置说明

3.3.1 requirepass foobar

给redis设置密码

ef5c165a13c0bd69ecb254c411354134.png

在客户端使用auth命令,验证密码。

9a180c8f25dd9322cda8764790d922f9.png

3.3.2 databases 16

Redis默认有16个数据库,寻址角标从0开始。

默认连接db0

797fca6be290cbac947f26f1961156db.png

客户端使用select命令,切换数据库

b0cf33af431b8d540358cb437ab5b28e.png

3.3.3 port 6379

指定redis的服务端口,默认6379.

a159de5726c87a8bb027723c9689258e.png

3.3.4 daemonize no

Redis默认关闭后台进程模式,该成yes,redis服务在后台启动。

fd9cd6a145b0adee2075829cb60a3713.png

3.3.5 loglevel notice(了解)

043c26b214cd98917309bc64806594e1.png

3.3.6 logfile “ ”

Redis日志输出目录,默认不输出日志到文件。

c82d86ea750891d3034c137ea27cd1f3.png

3.3.7 dbfilename dump.rdb、dir ./

指定数据持久化的文件名及目录。

de553975e96abf031e4709d75a47ae41.png

3.4 将redis添加为系统服务

3.4.1 第一步:开启后台模式

修改配置文件,将daemonize改为yes

3.4.2 第二步:创建shell脚本

说明:Linux系统服务,在/etc/init.d目录下创建redis脚本

###########################
#chkconfig: 2345 10 90
#description: Start and Stop redis
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
 
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli
 
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis.conf"
PASSWORD=$(cat $CONF|grep '^s*requirepass'|awk '{print $2}'|sed 's/"//g')
 
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ]
        then
              echo "Redis is running..."
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
if [ -z $PASSWORD ]
then
    $CLIEXEC -p $REDISPORT shutdown
else
    $CLIEXEC -a $PASSWORD -p $REDISPORT shutdown
fi
                #$REDIS_CLI -p $REDISPORT SHUTDOWN
                while [ -x ${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|force-reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac
##############################

3.4.3 第三步:添加shell脚本可执行权限

[root@node0927 ~]chmod +x /etc/init.d/redis

3.4.4 第四步:添加Redis开机启动

[root@node0927 ~]chkconfig redis on

4 Redis的键key

4.1 key的类型

redis的key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。

空字符串也是有效key值。

redis建议使用字符串做为key的类型

4.2 key取值规范

(1)键值不需要太长,消耗内存,在数据中查找这类键值的计算成本较高

(2)键值不宜过短,可读性较差,通常建议见名知意

4.2.1 取值举例

将如下数据库表中的数据,转换为redis的key-value存储

89ce9d839ea274e896a8c5c7ca089865.png
127.0.0.1:6379> set user:id:1:username lisi
OK
127.0.0.1:6379> set user:id:1:password 111111
OK
127.0.0.1:6379> set user:id:1:email lisi@163.com
OK
 
127.0.0.1:6379> keys user:id:1* #查找有几个属性
1) "user:id:1:password"
2) "user:id:1:username"
3) "user:id:1:email"
127.0.0.1:6379>

4.3 Key命令

exists key 
检查给定key是否存在。
del key
删除一个key
 
del key1 key2 key3  删除多个key
 
keys pattern (模糊查找)
查找所有符合给定模式 pattern 的 key 。
keys * 匹配数据库中所有 key 。
keys n?me 匹配 name、neme、nfme 等。
keys n* 匹配 name、neme、naaaaame等。
keys n[ae]me 只能匹配 name、neme。
 
expire key seconds
指定key的过期时间。
新添加的key,如果没有指定过期时间,则会一直保存。
可以对一个已经带有生存时间的key执行EXPIRE命令,新指定的生存时间会取代旧的生存时间。
ttl key   (time to live)
查看某个key的剩余过期时间,返回值:
-2 表示这个key已经过期,删除掉
-1 表示没有设置过期时间
其它 表示剩余的生存时间,单位为秒。
rename
语法格式:rename key newkey
将 key 改名为 newkey 。
当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
当 newkey 已经存在时, RENAME 命令将覆盖旧值。
 
type key
查看key对应的value的数据结构类型。
其它key命令见redis帮助文档   http://doc.redisfans.com/

5 Redis的值value(数据结构类型)

Redis的数据结构类型,指的就是redis的值value的类型

Redis常用的数据结构类型:string、list、set、sortedSet、hash

5.1 string类型

string类型是redis最常用的数据结构类型,存储的值为字符串。

5.1.1 String相关命令

set key value
设置一个key,值为value,类型为String类型;如果这个key已经存在,则更新这个key的值。
返回值
1 表示成功
0 表示失败
 
setnx key value
如果这个key不存在,则设置一个key,值为value;如果key存在,则不做更新。
返回值
1 表示成功
0 表示失败
 
get key
获取key对应的value值;如果key不存在,则返回nil
 
 
mget key1 key2 key3
一次获取多个key的值,如果对应key不存在,则对应返回nil。
 
incr key
将 key 中储存的数字值增一,然后返回。
如果这个key不存在,那么key的值会先被初始化为0,然后再执行INCR
操作。
    如果这个key对应的value值,不能表示数字,则会返回一个错误。
incrby key increment
    将key增加指定的步长值。
decr key
将 key 中储存的数字值减一,然后返回。
如果这个key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。
如果这个key对应的value值,不能表示数字,则会返回一个错误。
 
Redis的key是单线程模式,这就意味一瞬间只有一个线程能够持有这个key,所以可以使用redis解决部分涉及线程安全的业务。比如,在初级时候通过多线程模拟卖票,使用加锁的方式,保证只有一个线程能够持有锁,进行买票业务。
 
decrby key decrement
将key减少对应的步长值。
 
append key value
如果key已经存在,则将value追加到这个key原先的value值的末尾。
    如果这个key不存在,则执行set操作。
 
127.0.0.1:6379> help @string 查看string类型的帮助文档
127.0.0.1:6379> help set   查看set命令的帮助文档

5.1.2 String类型的应用场景

(1)做与统计有关的业务,如新浪微博(微信朋友圈)中的点赞功能

257d1308fa444997f9b448dd77129df9.png

(2)解决多线程的线程安全问题。

Redis的key是单线程模式,这就意味一瞬间只有一个线程能够持有这个key,所以可以使用redis解决部分涉及线程安全的业务,比如说抢购、秒杀。

再比如初级的时候学习多线程模拟买票窗口的卖票业务。

5.2 List类型

5.2.1 特点

(1)、基于Linked List实现

(2)、元素是字符串类型

(3)、列表头尾增删快,中间增删慢,增删元素是常态

(4)、元素可以重复出现

(5)、最多包含2^32-1元素

2d5ef5a6648a3a45c776bdf2c3463eac.png

列表的索引

 从左至右,从0开始

 从右至左,从-1开始

34f931c7a86a1b0dc43db942b86bc294.png

5.2.2 List类型相关命令

lpush key value [value ...]
将一个或多个值value插入到列表key的表头(即从左边插入);
如果有多个value值,那么各个value值按从左到右的顺序依次插入到表头:比如说,对空列表mylist执行命令LPUSH mylist a b c,列表的值将是 c b a 这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令;
如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
当 key 存在但不是列表类型时,返回一个错误。
 
rpush key value [value ...]
  尾部添加(从右向左),操作同上。
 
llen key
返回key对应list的长度,key不存在返回0,如果key对应类型不是list返回错误
 
lindex key index
index元素在list列表中的下角标,从0开始;
lindex  是从左到右取元素
lrange key start stop
获取指定区间的所有元素;
下角标从0开始,0表示第一个元素,1表示第二个,依次类推;
-1表示最后一个元素,-2表示倒数第二个元素,依次类推;
lpop key  
移除并返回列表中的第一个元素
rpop key                     
移除并返回列表中的最后一个元素。

5.2.3 List类型应用场景

(1)处理排名类业务。如新浪微博评论、论坛回帖楼层等。

(2)聊天室

5.3 Hash类型(散列)

5.3.1 特点

13e494ac68a3d357cad66a50b5671134.png

(1)由Field和与之关联的value组成map键值对

(2)field和value是字符串类型

(3)一个hash中最多包含2^32-1键值对。

5.3.2 Hash相关命令

hset key field value
设置hash field为指定值,如果key不存在,则先创建
如果field已经存在,那么将更新这个field的值。
 
hget key field 
获取指定的hash field
 
hmget key filed1....fieldN
获取全部指定的hash filed
 
hmset key filed1 value1 ... filedN valueN
同时设置hash的多个field
 
hexists key field
测试指定field是否存在
 
hdel key field
删除指定的hash field
 
hlen key
返回指定hash的field数量
 
hkeys key
返回hash的所有field
 
hvals key
返回hash的所有value
 
hgetall
返回hash的所有filed和value

5.3.3 Hash的用途(能使用hash的时候尽量使用hash)

节约内存空间:

redis每创建一个键,都会为这个键储存一些附加的管理信息(比如这个键的类型,这个键最后一次被访问的时间等等)

redis的key相对于值来说,更珍贵!!!

所以数据库里面的键越多,redis数据库服务器在储存附加管理信息方面耗费的内存就越多,在获取key对应的value值时cpu的开销也会更多

Hash结构可以将具有关联关系的一组key-value,存储到同一个hash结构中,从而减少key的数量。

d2f9f9501a198b85a9bef1ab269e80ea.png

5.3.4 hash不适用的场景

需要设置键过期功能的key:

Redis的key的过期功能只能对键操作,而Hash结构不能单独对某一个filed设置过期功能。

说明:在实际开发中,能使用hash的时候,尽量使用hash!!

5.4 Set类型(集合)

5.4.1 特点

5873ee8f362e76c238b34215851fff53.png

(1)无序的、去重的;

(2)元素是字符串类型;

(3)最多包含2^32-1元素。

5.4.2 Set相关命令

sadd key member [member ...](无序不重复)
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
假如 key 不存在,则创建一个只包含 member 元素作成员的集合。
当 key 不是集合类型时,返回一个错误。
 
smembers key
返回集合 key 中的所有成员。
不存在的 key 被视为空集合。
 
spop key
移除并返回集合中的一个随机元素。
被移除的随机元素。
当key不存在或key是空集时,返回nil。
 
scard key
返回集合key的基数(集合中元素的数量)。
集合的基数。       
当key不存在时,返回0。
 
交集、并集、差集sinter sunion sdiff
sinter key [key ...]
返回一个集合的全部成员,该集合是所有给定集合的交集。
不存在的 key 被视为空集。
 
sunion key [key ...]
返回一个集合的全部成员,该集合是所有给定集合的并集。
不存在的 key 被视为空集。
 
sdiff key [key ...]
返回一个集合的全部成员,该集合是所有给定集合之间的差集。
不存在的 key 被视为空集。

5.4.3 应用场景

(1)新浪微博的共同关注

3106c95665e012d238bef9350bc0d248.png

需求:当用户访问另一个用户的时候,会显示出两个用户共同关注哪些相同的用户

设计:将每个用户关注的用户放在集合中,求交集即可

实现如下:

peter={'john','jack','may'}

ben={'john','jack','tom'}

那么peter和ben的共同关注为:

SINTER peter ben 结果为{'john','jack'}

5.5 SortedSet类型

5.5.1 特点

eb9db6fe42e2d818ed4850b0100ec043.png

(1)类似Set集合;

(2)有序的、去重的;

(3)元素是字符串类型;

(4)每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同

(5)最多包含2^32-1元素

5.5.2 适用场景

适用于需要有序且唯一的业务或操作:

(1)网易音乐排行榜

eb0f1db312901014f631ebee94250089.png

分析:

每首歌的歌名作为元素(唯一、不重复)

每首歌的播放次数作为分值

ZREVRANGE来获取播放次数最多的歌曲(就是最多播放榜了,云音乐热歌榜,没有竞价,没有权重)

6 Jedis连接redis服务器

6.1 项目结构

5ed978204ccf579b1127f85040acf9c7.png

6.2 Jedis连接redis服务端

import java.util.Set;
 
import org.junit.Test;
 
import redis.clients.jedis.Jedis;
 
public class TestJedis {
 
 @Test
 public void testJedisConnect(){
 // 连接redis服务器端(使用host)
 @SuppressWarnings("resource")
       Jedis jedis = new Jedis("192.168.56.128");
       System.out.println("连接redis服务端成功!");
 //测试redis服务器是否正在运行
       System.out.println("redis服务器正在运行吗?"+ jedis.ping());
       System.out.println("redis服务器信息?n"+ jedis.info());
    }
}
 

Tips:使用jedis连接redis可能会出现的问题及解决方案:

1)ip绑定问题
Connection refused: connect
把Redis的配置文件redis.conf里的
bind localhost(或者bind 127.0.0.1,表明只有该主机才能访问)注释掉。

037cd1f97489bd88051194eda05b47fb.png
或者修改为:
bind ip     表明,只能通过ip访问。
 
 
2)、保护模式
DENIED Redis is running in protected mode because protected mode is enabled…
redis处于保护模式,只能本地链接,我们需要修改配置文件redis.conf,将protected-mode yes改成no

d19c9fcbbe448f28fc76ca67c9a08411.png

6.3 Key测试

@Test
 public void testKey(){
 @SuppressWarnings("resource")
       Jedis jedis = new Jedis("192.168.56.128");
       System.out.println("连接redis服务端成功!");
 //测试redis服务器是否正在运行
       System.out.println("redis服务器正在运行吗?"+ jedis.ping());
 
       jedis.set("jediskey", "apple");
 
       String value = jedis.get("jediskey");
 
       System.out.println(value);
 
       Set<String> keys = jedis.keys("*");
 
 for (String string : keys) {
           System.out.println(string);
       }
 
    }

6.4 List测试

@Test
 public void testList(){
 @SuppressWarnings("resource")
       Jedis jedis = new Jedis("192.168.56.128");
       System.out.println("连接redis服务端成功!");
 //测试redis服务器是否正在运行
       System.out.println("redis服务器正在运行吗?"+ jedis.ping());
 
       jedis.lpush("list01", "string1");
       jedis.lpush("list01", "string2");
       jedis.lpush("list01", "string3");
       List<String> listString = jedis.lrange("list01", 0, 2);
 for (String string : listString) {
           System.out.println(string);
       }
    }

6.5 Set测试

@Test
 public void testSet(){
 @SuppressWarnings("resource")
       Jedis jedis = new Jedis("192.168.56.128");
       System.out.println("连接redis服务端成功!");
 //测试redis服务器是否正在运行
       System.out.println("redis服务器正在运行吗?"+ jedis.ping());
 
       jedis.sadd("jedisset", "mysql");
       jedis.sadd("jedisset", "oracle","mongodb");
       Set<String> set = jedis.sunion("jedisset");
 for (String string : set) {
           System.out.println(string);
       }
    }

6.6 Hash测试

@Test
 public void testHash(){
 @SuppressWarnings("resource")
       Jedis jedis = new Jedis("192.168.56.128");
       System.out.println("连接redis服务端成功!");
 //测试redis服务器是否正在运行
       System.out.println("redis服务器正在运行吗?"+ jedis.ping());
 
       jedis.hset("hash01", "name", "zhangsan");
       jedis.hset("hash01", "age", "18");
       jedis.hset("hash01", "phone", "18627738874");
       List<String> hashString = jedis.hmget("hash01", "name","age","phone");
 for (String string : hashString) {
           System.out.println(string);
       }
    }

7 Redis持久化

Redis持久化,就是将内存中的数据,永久保存到磁盘上。

Redis持久化有两种方式:RDB(Redis DB)、AOF(AppendOnlyFile)

7.1 RDB(快照模式)

在默认情况下,Redis 将数据库快照保存在名字为dump.rdb的二进制文件中,可以在redis.conf配置文件中修改持久化信息。

333422b36b6be84c0d61942459b72d57.png

7.1.1 策略

(1)自动:BGSAVE

按照配置文件中的条件满足就执行BGSAVE;

非阻塞,Redis服务正常接收处理客户端请求;

Redis会folk()一个新的子进程来创建RDB文件,子进程处理完后会向父进程发送一个信号,通知它处理完毕;

父进程用新的dump.rdb替代旧文件。

8b814055cbc75837816a809a5e66e417.png

ae2663861420cb7cdc77313fe32e09a7.png

(2)手动:SAVE

客户端(redis-cli)发起SAVE命令;

 阻塞Redis服务,无法响应客户端请求;

 创建新的dump.rdb替代旧文件。

05e824990c14d0734540b614e7b1fdc6.png

7.1.2 优点

(1)执行效率高;

(2)恢复大数据集速度较AOF快。

7.1.3 缺点

(1)会丢失最近写入、修改的而未能持久化的数据;

(2)folk过程非常耗时,会造成毫秒级不能响应客户端请求。

7.2 AOF(追加模式、文本重演)

7.2.1 特点

Append only file,采用追加的方式保存,默认文件appendonly.aof;

记录所有的写操作命令,在服务启动的时候使用这些命令就可以还原数据库;

AOF默认关闭,需要在配置文件中手动开启。

ae6909b04a298d610ed7120aa1504efc.png

3193697c8bced2bd023f341e6b5d95d3.png

a4458f16c67ab1af00b28008a53d7fae.png

7.2.2 写入机制

说明:AOF机制,添加了一个内存缓冲区(buffer)。

(1)将内容写入缓冲区

(2)当缓冲区被填满、或者用户手动执行fsync、或者系统根据指定的写入磁盘策略自动调用fdatasync命令,才将缓冲区里的内容真正写入磁盘里。

(3)在缓冲区里的内容未写入磁盘之前,可能会丢失。

7.2.3 写入磁盘的策略

appendfsync选项,这个选项的值可以是always、everysec或者no

245d957abc856db6e00f0572cbf42010.png

Always:服务器每写入一个命令,就调用一次fdatasync,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,也不会丢失任何已经成功执行的命令数据

Everysec(默认):服务器每一秒重调用一次fdatasync,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,最多只丢失一秒钟内的执行的命令数据

No:服务器不主动调用fdatasync,由操作系统决定何时将缓冲区里面的命令写入到硬盘。这种模式下,服务器遭遇意外停机时,丢失命令的数量是不确定的

运行速度:always的速度慢,everysec和no都很快

7.2.4 aof重写机制

AOF文件过大,合并重复的操作,AOF会使用尽可能少的命令来记录。

7.2.4.1 重写过程

(1)folk一个子进程负责重写AOF文件

(2)子进程会创建一个临时文件写入AOF信息

(3)父进程会开辟一个内存缓冲区接收新的写命令

(4)子进程重写完成后,父进程会获得一个信号,将父进程接收到的新的写操作由子进程写入到临时文件中

(5)新文件替代旧文件

重写的本质:就是将操作同一个键的命令,合并。从而减小AOF文件的体积

9f4b49d0b14d125154c9537758005b0e.png

7.2.4.2 aof重写触发机制

(1)手动:

客户端向服务器发送BGREWRITEAOF命令

(2)自动:

配置文件中的选项,自动执行BGREWRITEAOF命令

ea4d60496365437eb9c86158bbf83c03.png

auto-aof-rewrite-min-size <size>,

触发AOF重写所需的最小体积:只要在AOF文件的体积大于等于size时,才会考虑是否需要进行AOF重写,这个选项用于避免对体积过小的AOF文件进行重写

auto-aof-rewrite-percentage <percent>

指定触发重写所需的AOF文件体积百分比:当AOF文件的体积大于auto-aof-rewrite-min-size指定的体积,并且超过上一次重写之后的AOF文件体积的percent %时,就会触发AOF重写。(如果服务器刚刚启动不久,还没有进行过AOF重写,那么使用服务器启动时载入的AOF文件的体积来作为基准值)。将这个值设置为0表示关闭自动AOF重写。

7.2.5 优点

写入机制,默认fysnc每秒执行,性能很好不阻塞服务,最多丢失一秒的数据;

重写机制,优化AOF文件;

如果误操作了(FLUSHALL等),只要AOF未被重写,停止服务移除AOF文件尾部FLUSHALL命令,重启Redis,可以将数据集恢复到FLUSHALL 执行之前的状态。

7.2.6 缺点

相同数据集,AOF文件体积较RDB大了很多;

恢复数据库速度较RDB慢(文本,命令重演)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值