Redis入门笔记

目录

前言

Redis基础

Redis简介

常用的Redis通用命令

Redis的数据类型

1.String

2.List

3.Hash

 4.Set

5.Sorted Set

6.Stream

7.Bitmap

8.Geospatial index

9.Bitfield

10.HyperLogLog

数据安全与性能保障

Redis的持久化

RDB持久化

AOF持久化

Redis在Spring Boot中的应用

Java端对象的存储


前言

本笔记来自以下资源,不分先后:

  • 黑马程序员Redis入门到实战
  • Redis官方文档
  • 《Redis实战》
  • 《Redis6开发与实战》

Redis基础

Redis简介

Redis的目标:让键值能够支持更多高级复杂的数据类型。

Redis 的核心:提供一系列原生数据类型,帮助我们解决从缓存、队列到事件处理等各种问题。

Redis可以将内存中的数据持久化到硬盘中,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能。所谓分片是将数据分为多个部分的方法,通过对数据分片,用户可以将数据存储到多台机器中,也可以从多台数据中获取数据。

常用的Redis通用命令

  • KEYS:返回和模板匹配的所有键。不建议在生产环境设备上使用。

查询所有key

  • DEL:删除一个指定的key

  • EXISTS:判断key是否存在

  • EXPIRE:设置KEY的有效期,过期后自动删除
  • TTL:查看一个KEY的剩余有效期。-1为永久有效。-2为key不存在

EXPIRE 命令支持一系列选项(但在6.2.5的版本中expire提示指令中没有提示该选项):

NX -- 仅在密钥没有过期时设置过期时间
XX -- 仅当密钥已有有效期时设置有效期
GT -- 仅在新到期日大于当前到期日时设置到期日
LT -- 仅当新的有效期小于当前有效期时才设置有效期
就 GT 和 LT 而言,非易失密钥被视为无限 TTL。GT、LT 和 NX 选项是互斥的。

Redis的数据类型

常见的5种数据类型

1.String

与string类型相关的指令,可通过Redis的官方文档查看:

也可通过Redis命令行查看:

2.List

Redis对链表结构(linked-list)的支持使得它在键值存储的世界中独树一帜。一个列表可以有序地存储多个字符串。

常见命令:LPUSH、RPUSH、LPOP、RPOP、LRANGE、BLPOP、BRPOP

redis> RPUSH mylist "one" "two" "three" "four" "five"
(integer) 5
redis> LPOP mylist
"one"
redis> LPOP mylist 2
1) "two"
2) "three"
redis> LRANGE mylist 0 -1
1) "four"
2) "five"
redis> 

BLPOP指令的参数为0时,代表无限期阻塞。

3.Hash

可以存储多个键值对的映射。

常见命令:

HSET、HGET

redis> HSET myhash field1 "foo"
(integer) 1
redis> HGET myhash field1
"foo"
redis> HGET myhash field2
(nil)
redis> 

HMSET:批量设定。此命令会覆盖散列中已存在的指定字段。如果 key 不存在,则会创建一个新的散列键。

redis> HMSET myhash field1 "Hello" field2 "World"
"OK"
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"
redis> 

HGETALL:返回hash存储结构中的所有字段以及字段对应的值

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"

HVALS:返回存在hash键中的所有值

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HVALS myhash
1) "Hello"
2) "World"
redis> 

 4.Set

集合与列表不同之处在于列表可以存储重复的值,但集合只能存储不同值。集合基于散列表来保证自己存储的每个字符都是不相同的。集合使用无序的存储方式,列表使用有序存储。

常见命令:SINTER、SDIFF、SUNION、SCARD(返回集合中元素的个数)

key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SINTER key1 key2 key3 = {c}
SDIFF key1 key2 key3 = {b,d}
SUNION key1 key2 key3 = {a,b,c,d,e}
redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SCARD myset
(integer) 2

5.Sorted Set

可排序的set类型.。有序集合的KEY被称为成员,每个成员都是各不相同的。而有序集合的值被称为分值,分值必须为浮点数。有序集合是Redis唯一一个既可以根据成员来访问元素又可以根据分值或分值的排序顺序来访问元素的结构。

6.Stream

7.Bitmap

8.Geospatial index

地理空间索引

9.Bitfield

10.HyperLogLog

数据安全与性能保障

Redis的持久化

持久化机制的作用:Redis的所有数据都保存在内存中,如果没有配置持久化功能,Redis重启后数据就会全部丢失,而开启Redis的持久化功能后,数据可以借此保存到磁盘上,实现数据持久化。

Redis的2种持久化方式,快照和只追加文件,即RDB+AOF(append-only file)。这2种方法可以同时使用,也可以单独使用,甚至都不使用。

RDB持久化

在指定的时间间隔内定时地将内存中的数据写入磁盘,把内存中的数据保存到RDB文件中。此为默认的持久化方式。

Redis快照的过程:首先将Redis服务器使用fork函数复制一份当前进程的副本,然后当前进程继续接收并处理客户端发来的指令,而副本则负责将内存中的数据写入硬盘的RDB临时文件。当副本写入所有的数据后会用RDB临时文件覆盖旧的RDB文件。

快照的不足:系统崩溃时总会丢失部分数据,因此这种方式适用于丢失一部分数据也无所谓的的应用程序。因此引出AOF持久化。

AOF持久化

在执行写命令时,将被执行的写命令复制到硬盘中。AOP持久化技术会将写命令写入AOF文件的末尾,以此来记录数据发生的变化。

文件同步至少会发生的3件事:

  • 用户可调用write()方法,将文件写入到缓存区。
  • 用户可调用plush()方法请求操作系统尽快将缓存区数据写入硬盘内,但具体什么时候执行是操作系统来决定。
  • 用户可命令操作系统将文件同步到硬盘中,同步操作会一直阻塞到指定的文件写入硬盘为止。

指定写入策略

  •  always:每次收到Redis客户端的写命令就立即强制写入到AOF文件。
  • everysec:每秒向AOF文件写入一次Redis客户端的写操作
  • no:由操作系统来决定什么时候写入AOF文件,一般为30秒左右一次。

AOF的不足:Redis会不断地将写命令记录到AOF文件中,随着Redis不断运行,AOF的文件体积也会不断地增大,在极端情况下,Redis会用光硬盘所有的可用空间。为了解决这个问题,引入日志重写。

日志重写

随着写操作不断增加,AOF文件会越来越大,Redis可以在不中断服务的情况下在后台重建AOF文件。

日志重写的工作原理,与创建快照的原理非常相似:

  • Redis操作端会调用fork()函数,产生一个子进程
  • 子进程将新的AOF文件写入一个临时文件
  • 父进程把最新的指令写入内存的缓存区,同时也会把这些指令写入旧的AOF文件,保证了重写失败也能保证数据的安全
  • 子进程复写结束后,父进程会获得一个信号,然后把内存里的缓冲区的内容加到子进程新加的AOF文件中。

Redis在Spring Boot中的应用

Java端对象的存储

自动序列化

示例: 

手动序列化 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值