Redis7

134 阅读10分钟

Redis7

入门篇

一、是什么?

官网介绍:

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

WX20231024-091355@2x_WmJ6dYLTbG.png

Redis三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis优势:

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

总结:

Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,通常被用作数据库、缓存和消息中间件。

简单来说,Redis是一种高效的数据存储技术,它可以将数据保存在内存中,因此可以非常快速地读取和写入数据。它主要用于处理需要快速响应的应用程序,比如网站、移动应用程序等。

Redis的特点包括:

  1. 内存存储: Redis将数据存储在内存中,因此读写速度非常快。
  2. 支持多种数据结构: Redis支持字符串、列表、集合、哈希表等多种数据结构,这使得它在不同场景下都有很强的适用性。
  3. 持久化选项: Redis可以将数据持久化到磁盘,以防止数据丢失。
  4. 高并发性: Redis被设计为能够处理大量并发请求,这使得它非常适合于需要快速响应的应用。
  5. 支持分布式: Redis可以通过分片技术来实现分布式存储,从而提供更大规模的数据存储能力。

总的来说,Redis是一个功能强大且高效的数据存储系统,特别适用于需要快速响应和高并发的应用场景。

二、能干嘛?

  1. 缓存: Redis常用于缓存数据,以减轻后端数据库的负载。它能够快速读写数据,提供低延迟的数据访问,从而加速应用程序的性能。
  2. 会话存储: 许多Web应用程序使用Redis来存储用户会话数据,以实现用户认证和授权,同时保持会话数据的可伸缩性和高性能。
  3. 消息队列: Redis支持发布-订阅模式(Pub-Sub),可以用作消息队列系统,实现异步通信、任务排队和事件处理。
  4. 计数器和排行榜: Redis的数据结构可以轻松地用于计数器和排行榜应用,例如跟踪文章的点赞次数或用户的排名。
  5. 分布式锁: Redis可以用于实现分布式锁,帮助控制并发访问共享资源,避免竞态条件。
  6. 实时分析和数据处理: Redis的快速读写特性使其适合于实时数据处理,例如日志分析、实时仪表盘和数据缓存。
  7. 地理位置服务: Redis支持地理位置数据类型,可以用于构建位置相关的应用,如定位服务和附近的人功能。
  8. 存储配置信息: 开发人员经常使用Redis来存储应用程序的配置信息,以便在运行时进行动态调整。
  9. 临时性数据存储: Redis通常用于存储临时性数据,如临时会话、缓存数据等,这些数据不需要永久保存。

三、Redis7新特性

链接地址:https://github.com/redis/redis/releases/tag/7.0-rc1

1、新特性

新特性_AVjkVdCSYY.png

2、新的命令参数

新命令_OhvnFcUXNZ.png

3、新的管理命令

管理命令_JbqgFKyFcM.png

总体概述

新特性概述
多AOF文件支持7.0 版本中一个比较大的变化就是 aof 文件由一个变成了多个,主要分为两种类型:基本文件(base files)、增量文件(incr files),请注意这些文件名称是复数形式说明每一类文件不仅仅只有一个。在此之外还引入了一个清单文件(manifest) 用于跟踪文件以及文件的创建和应用顺序(恢复)
config命令增强对于Config Set 和Get命令,支持在一次调用过程中传递多个配置参数。例如,现在我们可以在执行一次Config Set命令中更改多个参数: config set maxmemory 10000001 maxmemory-clients 50% port 6399
限制客户端内存使用 Client-eviction一旦 Redis 连接较多,再加上每个连接的内存占用都比较大的时候, Redis总连接内存占用可能会达到maxmemory的上限,可以增加允许限制所有客户端的总内存使用量配置项,redis.config 中对应的配置项 // 两种配置形式:指定内存大小、基于 maxmemory 的百分比。 maxmemory-clients 1g maxmemory-clients 10%
listpack紧凑列表调整listpack 是用来替代 ziplist 的新数据结构,在 7.0 版本已经没有 ziplist 的配置了(6.0版本仅部分数据类型作为过渡阶段在使用)listpack 已经替换了 ziplist 类似 hash-max-ziplist-entries 的配置
访问安全性增强ACLV2在redis.conf配置文件中,protected-mode默认为yes,只有当你希望你的客户端在没有授权的情况下可以连接到Redis server的时候可以将protected-mode设置为no
Redis FunctionsRedis函数,一种新的通过服务端脚本扩展Redis的方式,函数与数据本身一起存储。 简言之,redis自己要去抢夺Lua脚本的饭碗
RDB保存时间调整将持久化文件RDB的保存规则发生了改变,尤其是时间记录频度变化
命令新增和变动Zset (有序集合)增加 ZMPOP、BZMPOP、ZINTERCARD 等命令 Set (集合)增加 SINTERCARD 命令 LIST (列表)增加 LMPOP、BLMPOP ,从提供的键名列表中的第一个非空列表键中弹出一个或多个元素。
性能资源利用率、安全、等改进自身底层部分优化改动,Redis核心在许多方面进行了重构和改进 主动碎片整理V2:增强版主动碎片整理,配合Jemalloc版本更新,更快更智能,延时更低 HyperLogLog改进:在Redis5.0中,HyperLogLog算法得到改进,优化了计数统计时的内存使用效率,7更加优秀 更好的内存统计报告

四、Redis十大数据类型

📌数据类型指的是value的类型,key的类型都是String

redis数据类型_Zek0O6kFSV.png

数据类型说明
String(字符串)string是redis最基本的类型,一个key对应一个value。 string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
List(列表)Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) 它的底层实际是个双端链表,最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)
Hash(哈希表)Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。 Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)
Set(集合)Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是 intset 或者 hashtable。 Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)
Zset(sorted set:有序集合)Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。 zset的成员是唯一的,但分数(score)却可以重复。 zset集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32 - 1
GEO (地理空间)Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,包括 添加地理位置的坐标。 获取地理位置的坐标。 计算两个位置之间的距离。 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合
HyperLogLog(基数统计)HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定且是很小的。 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
Bitmap(位图)由0和1状态表现的二进制位的bit数组
bitfield(位域)通过bitfield命令可以一次性操作多个比特位域(指的是连续的多个比特位),它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果。
StreamRedis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。

📌Redis操作命令链接:www.redis.net.cn/order/

1、Redis键Key相关操作

命令描述
keys *查看当前库所有的key
EXISTS key判断某个key是否存在
type key查看当前key的类型
del key删除当前key
UNLINK key [key ...]非阻塞删除,仅仅将key从keyspace中删除,后续的异步操作会真正的删除
TTL key查看key的过期时间,-1 : 永远不过期,-2 : 已过期
EXPIRE key seconds为key设置过期时间
MOVE key db[0-15]将当前数据的key移动到指定的db中
SELECT dbindex切换数据库[0-15],默认为0
DBSIZE查看当前数据库key的数量
FLUSHDB清空当前库
FLUSHALL清空全部库

2、数据类型命令操作参考官方文档:www.redis.net.cn/order/