Redis基础

什么是NOSQL

  • Not Only SQL 通常指的是非关系型数据库,通常用于提升数据查询的速度,有时也叫缓存。Redis是非关系型数据库的一种。非关系型数据库不能代替关系型数据库,只是关系型数据库的补充。

    • 非关系数据库的本质:内存存储(数据库存储运行在内存中)。如果不持久化,那么数据就会丢失。

    • 数据之间不存在对应关系

  • 关系型数据库:MySQL,Oracle,SQL Server等。数据与数据之间是有关系的:1对1,1对多,多对多。表中还有各种约束,数据添加进去的时候,约束的检查,关系型数据库还是事务控制。如果数据库中数据越来越多的时候,查询速度越来越慢。

    • 数据存储本质:把数据存储在硬盘上(持久化存储)

    • 使用数据表存储数据(表与表之间存在关联关系)

非关系型数据库

非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。

优点

  1. 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型,例如字符、整数类型。
  2. 速度快:nosql可以使用硬盘或者随机存储器RAM(也叫主存,是与CPU直接交换数据的内部存储器)作为载体,而关系型数据库只能使用硬盘;
  3. 成本低:nosql数据库部署简单,基本都是开源软件。

缺点

  1. 不提供sql支持,学习和使用成本较高;
  2. 无事务处理;(高版本也逐渐开始支持事务了)
  3. 数据结构相对复杂,复杂查询方面不方便。

为什么要使用NOSQL

具体表现为对如下三高问题的解决:

  1. High Performance - 数据库高并发访问

    在同一个时间点,同时有海量的用户并发访问。往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。

    • 如天猫的双11,从凌晨0点到2点这段时间,每秒达到上千万次的访问量。
    • 12306春运期间,过年回家买火车抢票的时间,用户不断查询有没有剩余票。
  2. Huge Storage - 海量数据的存储

    数据库中数据量特别大,数据库表中每天产生海量的数据

    • 类似QQ,微信,微博,每天用户产生海量的用户动态,每天产生几千万条记录。对于关系数据库来说,在一张几亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。
  3. High Scalability && High Availability- 高可扩展性和高可用性的需求

    • 关系型数据库进行扩展和升级是比较麻烦的一件事,对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。
    • 非关系型数据库可以通过不断的添加服务器节点来实现扩展,而不需对原有的数据库进行维护。

Redis的目录结构

目录或文件作用
redis-benchmark.exe性能测试的工具
redis-check-aof.exe对AOF文件进行检查和修改工具
redis-check-dump.exe对RDB文件进行检查和修改工具
redis-cli.exe命令行方式客户端连接工具
redis-server.exe服务器启动文件
redis.window.confredis在window下的配置文件,这是个文本文件

Redis的启动与关闭

服务端:

  • 启动方式: 运行redis-server.exe文件就可以启动服务器
    • 端口号:6379

使用客户端测试Redis服务端

客户端启动方式:运行redis-cli.exe程序
输入命令:ping
如果出现PONG,说明客户端成功连接到了服务器端

Redis数据类型

Redis是一种高级的key-value的存储系统,键是string类型,其中value支持五种数据类型。

  • 键(key):

    1. key值不能重复
    2. 作用:标识存储的数据
    3. 数据类型:string
    4. 命名规则:
      • 不能太长:因为查询的效率低,查询起来不方便
      • 不能太短:容易重复,同时可读性也差
      • 参照规范:HEIMA_STU_LIST
  • **值(value):**支持5种数据类型

值的数据类型值的格式说明
string字符串类型,类似于Java中String
hash由键值对组成,类似于Java中Map
list列表类型,类似于Java中List,元素是有序,可以重复。
set集合类型,类似于Java中Set,元素是无序,不可重复
sorted set/zset有序的集合类型,每个元素有一个分数用来决定它的顺序。

string类型

字符串类型string是Redis中最为基础的数据存储类型,它在Redis中以二进制保存。无论存入的是字符串、整数、浮点类型都会以字符串写入。

在Redis中字符串类型的值最多可以容纳的数据长度是512M,这是以后最常用的数据类型。

常用命令介绍

命令功能
set 键 值添加或修改一个键和值,键不存在就是添加,存在就是修改
get 键获取值,如果存在就返回值,不存在返回nil(就是C语言中NULL)
del 键删除指定的键和值,返回删除的个数
补充:
批量操作:
mset  name lisi   addr sh
mget name  age addr
del  name age 

hash类型

Redis中的Hash类型可以看成是键和值都是String类型的Map容器,每一个Hash可以存储4G个键值对。
该类型非常适合于存储对象的信息。如一个用户有姓名,密码,年龄等信息,则可以有username、password和age等键。它的存储结构如下:

请添加图片描述

常用命令介绍

命令功能
hset 键 字段 值添加键,字段,值
hget 键 字段通过键,字段得到值
hmset 键 字段 值 字段 值multiply多个,一次添加多个字段和值
hmget 键 字段 字段通过键,获取多个字段和值
hdel 键 字段 字段删除一个或多个字段的值
hgetall 键得到这个键下所有的字段和值

list类型

在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部(left)和右部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4G个。

常用命令介绍

命令行为
lpush 键 元素 元素…left 从左边向指定的键中添加1个或多个元素,返回列表中元素的个数
rpush 键 元素 元素…right 从右边向指定的键中添加1个或多个元素
lpop 键从左边删除一个元素,返回被删除的元素
rpop 键从右边删除一个元素,返回被删除的元素
lrange 键 开始 结束得到键中指定范围的元素的数据
每个元素都有一个索引号,从左向右0~n
从右向左索引号:-1~-(n+1),每个元素有2个索引号
如果要取出整个列表中所有的元素,索引号应该是:0~-1
lindex 键 索引值查询指定索引的元素
llen 键获取列表的长度

set类型

在Redis中,可以将Set类型看作为没有排序的字符集合,和List类型一样,也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。Set可包含的最大元素数量是4G,和List类型不同的是,Set集合中不允许出现重复的元素。

常用命令介绍

命令行为
sadd 键 元素 元素…向一个键中添加1个或多个元素
smembers 键得到这个集合中所有的元素
sismember 键 元素判断指定的元素在集合中是否存在,存在返回1,不存在返回0
srem 键 元素 元素…通过键删除一个或多个元素

zset/sorted set类型

Redis有序集合和set集合一样也是无序不可以重复。不同的是每个元素都会关联一个分数(排序因子)。

redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可存储40多亿个成员。

常用命令介绍

命令行为
zadd 分数 分数 添加1个或多个元素,每个元素都有一个分数
zrange 开始索引 结束索引获取指定范围的元素,得到所有的元素,索引是0到-1
zrange 键 开始索引 结束索引 withscores查询指定的元素和对应的分数
zrevrange 键 开始索引 结束索引 withscores按照分数倒序获取指定的元素和对应的分数
zrem 键 值 值删除一个或多个值
zcard 得到元素个数
zrank 得到元素的索引号
zscore 键 值得到元素的分数

redis通用命令

命令功能
keys 匹配字符查询所有的键,可以使用通配符
***** 匹配多个字符
? 匹配1个字符
del 键1 键2删除任何的值类型,而且可以同时删除多个键
exists 判断指定的键是否存在
type 判断指定的键,值的类型。返回是类型的名字
select 数据库编号选择其它的数据库
move 数据库编号将当前数据库中指定的键移动到另一个数据库中
expire 键 时间为当前key设置过期时间(单位是秒)

Redis:jedis的API介绍

Jedis类常用方法

注:每个方法就是redis中的命令名,方法的参数就是命令的参数。

在每次访问Redis数据库的时候,都需要创建一个Jedis对象。每个Jedis对象似于JDBC中Connection对象,类似于mybatis中session对象。

连接和关闭功能
new Jedis(host, port)创建Jedis连接对象,参数:
host: 服务器地址
port:端口号6379
void close()关闭连接
对string操作的方法说明
set(String key,String value)添加字符串类型的键和值
String get(String key)通过键得到字符串的值
del(String … keys)删除一个或多个键
对hash操作的方法说明
hset(String key,String field,String value)添加一个hash类型的键,字段和值
Map<String,String> hgetall(String key)通过一个键得到所有的字段和值,返回Map
对list操作的方法说明
lpush(String key,String…values)从左边添加多个值到list中
List<String> lrange(String key,long start,long end)通过键得到指定范围的元素
对set操作的方法说明
sadd(String key,String…values)添加一个或多个元素
Set<String> smembers(String key)通过键得到集合所有的元素
对zset操作的方法说明
zadd(String key, double score, String member)添加一个键,分数和值
Set<String> zrange(String key, long start, long end)查询一个指定范围的元素

jedis连接池的概念

使用jedis连接redis数据库服务器的时候,创建和销毁连接是很消耗程序性能的。尤其是频繁多次操作redis数据库,性能会更低。所以jedis为我们提供了jedis的连接池技术,jedis连接池在创建时初始化一些连接对象存储到连接池中,使用jedis连接资源时不需要自己创建jedis对象,而是从连接池中获取一个资源进行对redis的操作。使用完毕后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用。

jedis连接池的API

JedisPoolConfig配置类功能说明
JedisPoolConfig()创建一个配置对象
void setMaxTotal()设置连接池的最大连接数
void setMaxWaitMillis()设置最长等待时间
JedisPool连接池类说明
JedisPool(配置对象,服务器名,端口号)创建一个连接池,参数:
1. 上面的配置对象
2. 服务器名
3. 端口号
Jedis getResource()从连接池中得到一个连接对象Jedis

jedis连接池的配置参数

之前的代码在创建连接池对象的时候使用的都是连接池的默认参数,接下来我们需要学习几个关于连接池比较重要的参数。

注意:演示参数的的时候请不要将jedis的连接关闭。这样才可以看到效果

参考代码:

  /*
        说明:
        1.默认连接池中最多有8个连接
        2.我们可以通过查看JedisPoolConfig源码查看默认最大连接数,然后对其进行修改
            JedisPoolConfig的父类GenericObjectPoolConfig类中的成员变量
             public static final int DEFAULT_MAX_TOTAL = 8;
             DEFAULT_MAX_TOTAL表示默认的最大连接数是8,我们可以使用方法对其更改:
                public void setMaxTotal(int maxTotal)
        3.我们发现如果连接池中的连接都被获取了,还想获取只能等待,如果不设置就会一直等待,
            我们可以通过方法进行设置最大等待时间:public void setMaxWaitMillis(long maxWaitMillis)
            最大等待时间到了,没有获取到就会报错:
            redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
        4.通过查看源码我们发现最大空闲连接数maxIdle和最大连接数值是一致的maxTotal
            如果我们设置最大空闲连接数最好也要和最大连接数一致

     */
    @Test
    public void test03() {
        //在测试方法中创建连接池的配置对象 **JedisPoolConfig()**
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //设置最大连接数
        jedisPoolConfig.setMaxTotal(10);
        //最大等待时间 最大等待时间到了,没有获取到就会报错
        jedisPoolConfig.setMaxWaitMillis(2000);
        //最大空闲连接数
        jedisPoolConfig.setMaxIdle(10);
        //创建连接池 **JedisPool(配置对象,服务器名,端口号)**
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379);
//        for (int i = 0; i < 10; i++) {
        for (int i = 0; i < 12; i++) {
            //从连接池中获取连接
            Jedis jedis = jedisPool.getResource();
            System.out.println(i+"....jedis = " + jedis);
            //关闭连接
            jedis.close();
        }
        //使用完毕后把连接还回连接池中
        //关闭连接
//        jedis.close();
    }

说明:
1.默认连接池中最多有8个连接
2.我们可以通过查看JedisPoolConfig源码查看默认最大连接数,然后对其进行修改
JedisPoolConfig的父类GenericObjectPoolConfig类中的成员变量
public static final int DEFAULT_MAX_TOTAL = 8;
DEFAULT_MAX_TOTAL表示默认的最大连接数是8,我们可以使用方法对其更改:
public void setMaxTotal(int maxTotal)
3.我们发现如果连接池中的连接都被获取了,还想获取只能等待,如果不设置就会一直等待,
我们可以通过方法进行设置最大等待时间:public void setMaxWaitMillis(long maxWaitMillis)
最大等待时间到了,没有获取到就会报错:
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
4.通过查看源码我们发现最大空闲连接数maxIdle和最大连接数值是一致的maxTotal
如果我们设置最大空闲连接数最好也要和最大连接数一致

问题:为什么最大空闲连接数最好也要和最大连接数一致?

请添加图片描述
注意:假设maxTotal是100,maxIdle是50,那么连接池刚开始初始化时是50个连接和最大空闲连接一样的。那么如果突然有70个并发的请求,那么连接池中少了20个连接,此时连接池还可以使用50个连接,可以在创建20个连接,但是我们要注意创建新的连接很消耗性能的。那么会造成20个连接等待时间较长,有可能会造成系统并发性很大。所以我们将maxIdle设置为最大连接数就可以了。如果并发数大于最大连接数,那么只能等待了。

ResourceBundle类

  • 作用:简化了Java属性配置文件的读取
java.util.ResourceBundle类功能
static ResourceBundle getBundle(“配置文件名”)读取指定的配置文件
返回ResourceBundler对象
只需要指定主文件名即可,不用指定扩展名。
String getString(“键名”)读取配置文件中指定的键,返回相应的值

Redis:持久化机制-RDB

问题:把服务端关闭了,再重新开启服务器,数据会不会丢失?

  • 答案:会部分丢失,因为默认redis服务器每隔一段时间写入一次内存中数据到硬盘上。

持久化概述

什么是Redis的持久化:

  • Redis是一个内存存储的数据库,内存必须在通电的情况下才能够对数据进行存储。如果 ,在使用redis的过程中突然发生断电,数据就会丢失。为了防止数据丢失,redis提供了数据持久化的支持。

持久化:把内存中的数据保存到硬盘上。
作用:防止数据在断电的情况下丢失。

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。

Redis持久化的两种方式:

  1. RDB:Redis DataBase 默认的持久化方式,以二进制的方式将数据写入文件中。每隔一段时间写入一次。
  2. AOF:Append Only File 以文本文件的方式记录用户的每次操作,数据还原时候,读取AOF文件,模拟用户的操作,将数据还原。

注意:redis将内存中数据,写在硬盘文件上。服务器关闭,电脑重启数据也不会丢失。

RBD持久化配置

RDB是默认的持久化方式。这种方式就是将内存中数据以快照的方式写入到二进制文件中

  • 快照:当前内存中数据的状态

可以通过配置设置自动做快照持久化

请添加图片描述
默认的文件名为:dump.rdb

配置RDB方式数据持久化,必须两个条件都满足的情况下才进行持久化的操作:

关键字时间(秒)修改键数解释
save9001到了15分钟修改了1个键,则发起快照保存
save30010到了5分钟修改了10个键,则发起快照保存
save6010000到了1分钟,修改了1万个键,则发起快照保存

我们发现很难模拟上面的配置方式,所以我们这里要自己对配置文件进行一个修改。

下面详细介绍快照保存过程:

1.在redis.windows.conf配置文件中有如下说明:

语法说明
save <时间间隔> <修改键数>过多久(单位是秒),修改了多少个键(增删改)

2.修改redis.windows.conf 文件的101行
添加1行:save 20 3 (表示20秒内修改3个键,则写入到dump.rdb文件中)

save 900 1
save 300 10
save 60 10000
save 20 3

3.使用指定的配置文件启动服务器:redis-server redis.windows.conf

打开dos窗口,使用命令redis-server加载redis.windows.conf 配置文件
请添加图片描述
4.打开客户端,向数据库中增加三个键

set name zhangsan
set age 18
set addr sh

直接关闭服务器窗口。然后打开dos窗口,使用命令redis-server加载redis.windows.conf 配置文件,再开启服务器,查看所有的键:
请添加图片描述
数据没有丢失。表示关闭redis数据库服务器的时候,数据被写入到数据库dump.rdb文件中了。再次启动redis服务器将dump.rdb文件中的数据加载到redis服务器中。

说明:RDB持久化机制,不能完全避免数据丢失

  • 因为RDB是每隔一段时间写入数据,所以系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。

Redis:持久化机制-AOF

AOF持久化介绍

由于快照方式是在一定间隔时间做一次的,所以如果redis宕机,就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话,可以采用AOF持久化方式。

AOF指的是Append only file,使用AOF持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认是appendonly.aof),当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
请添加图片描述
请添加图片描述

AOF持久化机制配置

1、开启AOF持久化

AOF默认是关闭的,首先需要开启AOF模式

参数配置说明
appendonly no/yes默认是no,关闭。如果要打开,设置成yes。
如果打开的AOF,RDB中存储的数据读取不出来。

2、AOF持久化时机

关键字持久化时机解释
appendfsynceverysec每秒记录
appendfsyncalways每修改记录
appendfsyncno不记录

everysec:每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中。

always:收到写命令就立即写入磁盘,最慢,但是保证完全的持久化。

no:完全依赖操作系统,性能最好,持久化无法保证。

3、AOF的持久化

  1. 打开AOF的配置文件redis.windows.conf,找到APPEND ONLY MODE配置块,392行。设置appendonly yes

    请添加图片描述
    通过redis-server redis.windows.conf 启动服务器,在服务器目录下出现appendonly.aof文件。大小是0个字节。

请添加图片描述
添加3个键和值

请添加图片描述

打开appendonly.aof文件,查看文件的变化。会发现文件记录了所有操作的过程

请添加图片描述

说明:

  • *2表示有两个命令 select 0 选择第一个数据库
  • $6表示select 有六个字符 $1 表示0有一个字符

5.再次打开redis服务器,查看结果。redis-server redis.windows.conf 启动服务器

  • 保存的数据依然存在。

Redis:AOF重写机制介绍

为什么需要AOD重写

随着命令不断从AOF缓存中写入到AOF文件中,AOF文件会越来越大,为了解决AOF文件体积膨胀的问题,Redis提供了AOF重写功能:Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个文件所保存的数据库状态是相同的,但是新的AOF文件不会包含任何浪费空间的冗余命令,通常体积会较旧AOF文件小很多。简单来说redis引入了AOF重写机制就是来压缩AOF文件的。

请添加图片描述

AOF重写触发的方式

手动触发

  • 用户通过调用bgrewriteaof命令手动触发。
命令:  bgrewriteaof
解释说明:
      bg:background 后台
      re:repeat 重复
      write:写

在客户端直接书写bgrewriteaof命令,如下:

请添加图片描述

这里我们只关注appendonly.aof文件即可。不用关注旧的文件了。请添加图片描述
自动触发

  • 如果全部满足的话,就触发自动的AOF重写操作。

请添加图片描述

​ 全部满足自动触发的条件:

  1. 没有RDB持久化/AOF持久化在执行,没有bgrewriteaof在进行;

  2. 当前AOF文件大小要大于redis.windows.conf配置的auto-aof-rewrite-min-size大小;

  3. 当前AOF文件大小和最后一次重写后的大小之间的比率等于或者等于指定的增长百分比(在配置文件设置了auto-aof-rewrite-percentage参数,不设置默认为100%)

    原来的数据:
    请添加图片描述

演示:AOF后台自动重写

1、关闭服务器,删除生成的aof和rdb文件

2、修改redis.windows.conf配置文件如下:

# 大于原来的10%就自动重写
auto-aof-rewrite-percentage 10
# 自动重写的最小尺寸
auto-aof-rewrite-min-size 10b

请添加图片描述

3.带配置文件启动服务器: redis-server redis.windows.conf
请添加图片描述
4.进行如下操作
请添加图片描述

5.生成的重写文件
请添加图片描述

6.服务器端的输出请添加图片描述
7.数据库结果
请添加图片描述
8.生成的appendonly.aof文件内容如下:

请添加图片描述

AOF 文件重写的实现原理

AOF重写并不需要对原有AOF文件进行任何的读取,写入,分析等操作,这个功能是通过读取服务器当前的数据库状态来实现的。

# 假设服务器对键list执行了以下命令
127.0.0.1:6379> RPUSH list "A" "B"
(integer) 2
127.0.0.1:6379> RPUSH list "C"
(integer) 3
127.0.0.1:6379> RPUSH list "D" "E"
(integer) 5
127.0.0.1:6379> LPOP list
"A"
127.0.0.1:6379> LPOP list
"B"
127.0.0.1:6379> RPUSH list "F" "G"
(integer) 5
127.0.0.1:6379> LRANGE list 0 -1
1) "C"
2) "D"
3) "E"
4) "F"
5) "G"
127.0.0.1:6379>

结果

当前列表键list在数据库中的值就为[“C”,“D”, “E”, “F”, “G”]。要使用尽量少的命令来记录list键的状态,最简单的方式不是去读取和分析现有AOF文件的内容,而是直接读取list键在数据库中的当前值,然后用一条RPUSH
list “C” “D” “E” “F” "G"代替前面的6条命令。

结论

因为AOF如果记录每一步操作,文件会越来越大,通过AOF的重写,可以缩小AOF文件的尺寸。同样可以达到数据还原效果

Redis:RDB和AOF的区别

RDB持久化机制优点和缺点

优点

1、方便备份与恢复

整个Redis数据库将只包含一个文件,默认是dump.rdb,这对于文件备份和恢复而言是非常完美的。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。一旦系统出现灾难性故障,我们可以非常容易的进行恢复。

2、启动效率更高

相比于AOF机制,如果数据集很大,RDB的启动效率会更高。因为RDB文件中存储的是数据,启动的时候直接加载数据即可,而AOF是将操作数据库的命令存放到AOF文件中,然后启动redis数据库服务器的时候会将很多个命令执行加载数据。如果数据量特别大的时候,那么RDB由于直接加载数据启动效率会比AOF执行命令加载数据更高。

3、性能最大化

对于Redis的服务进程而言,在开始持久化时,会在后台开辟子线程,由子线程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。

缺点

1、不能完全避免数据丢失

因为RDB是每隔一段时间写入数据,所以系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。

2、会导致服务器暂停的现象

由于RDB是通过子线程来协助完成数据持久化工作的,因此当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

就是数据量过大,会开辟过多的子线程进行持久化操作,那么会占用服务器端的大量资源,那么有可能会造成服务器端卡顿。同时会造成服务器停止几百毫秒甚至一秒。

AOF持久化机制优点和缺点

优点

AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。也可以通过该文件完成数据的重建。该机制可以带来更高的数据安全性,所有的操作都是异步完成的。

缺点

  1. 运行效率比RDB更慢:根据同步策略的不同,AOF在运行效率上往往会慢于RDB。

  2. 文件比RDB更大:对于相同数量的数据集而言,AOF文件通常要大于RDB文件。

一般在企业开发中两种持久化机制会配合着使用。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于学习Redis基础知识,可以按照以下思路进行学习: 1. 了解Redis的概念和特点:首先需要了解Redis是什么,它的主要特点是什么,它为什么被广泛应用于缓存、消息队列、会话管理等场景。 2. 安装和配置Redis:根据你的操作系统,安装Redis并进行相关配置。可以参考Redis官方文档或其他教程来完成这一步。 3. 学习Redis的数据结构:Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。了解每种数据结构的特点、用途和操作命令,并通过实际操作来加深理解。 4. 掌握Redis的常用命令:学习Redis的常用命令,如get、set、hget、hset、lpush、lrange、sadd、smembers等,了解每个命令的具体用法和参数含义。 5. 理解Redis的持久化机制:了解Redis的RDB和AOF两种持久化方式,以及它们的优缺点。学习如何进行备份和恢复数据。 6. 学习Redis的事务和Lua脚本:了解Redis事务的基本概念和使用方法,以及如何使用Lua脚本来进行复杂的操作。 7. 深入了解Redis的性能优化和高可用方案:学习如何优化Redis的性能,包括配置调优、使用合适的数据结构、合理地使用缓存等。同时了解Redis的高可用方案,如主从复制、哨兵模式和集群模式。 8. 学习Redis与其他技术的结合:了解Redis如何与其他技术进行结合,如与Python、Java等编程语言的配合使用,以及与Spring、Django等框架的整合。 以上是学习Redis基础知识的一个思路,你可以根据自己的实际情况和需求进行学习和拓展。推荐参考一些经典的Redis教程和实战案例,通过实际操作和项目实践来提升自己的技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值