你好,这里是网络技术联盟站。 redis是目前出场率最高的NoSQL数据库,同时也是一个开源的数据结构存储系统,在缓存、数据库、消息处理等场景使用的非常多,本文瑞哥就带着大家用一篇文章入门这个强大的开源数据库——Redis。 让我们直接开始! redis的英文全称为 Redis 是用 ANSI C 语言编写的,它可以在大多数 POSIX 系统中运行,例如 BSD、Linux、OS X,而无需任何外部依赖,OS X 和 Linux 被认为是 Redis 开发和测试最多的两个操作系统。 Redis 通常被称为数据结构服务器,因为它的核心数据类型类似于字符串、列表、字典(或哈希)、集合和排序集合等编程语言中的数据类型。稍微新版的Redis还有近似计数、地理定位和流处理等高级功能。 Redis 将数据存储在内存中,默认情况下具有周期性磁盘持久性,由于 Redis 将数据持久化到磁盘,因此它可以用作许多用例的经典数据库以及缓存。 redis的官网有redis安装的详细说明,包括有: 网址: 大家可以根据自己的系统进行选择安装。 Redis安装好了,需要一些基础的命令对redis进行管理,比如启动redis、关闭redis等。 在Windows安装完Redis后,只需要双击 windows没啥好讲的,如果是开发或者生产环境,几乎没人会在windows上部署redis,bug简直不是一般的多。 这个还得看你安装的方式。 停止redis有好多种办法,比如通过直接杀死进程的方式: 查询redis-server 的进程 ID: 杀死redis-server进程: 也可以通过 redis-cli 命令进行停止: 停止redis: 重启redis: 启动redis: 停止redis: 重启redis: 启动redis: 停止redis: 重启redis: redis一般就是五大类型: 但是随着数据量的激增,加上场景定制化越来越多,redis的数据结构也随之丰富起来,目前redis支持的所有类型如下: 下面我们来一一介绍一下。 Strings是最基本的一种Redis数据类型,被认为是二进制安全的,这意味着它们可以包含任何类型的数据,例如 JPEG 格式的图像,最多可以保存 512MB 的值。 列表其实就是按插入顺序排序的字符串列表,新的元素过来的时候,会将元素推到列表的左侧或右侧。 集合类似于列表,但集合不能包含重复值并且未排序,集合可以使用并集、交集和减法。 Hashes是表示对象的最重要的数据类型,它们是string值和字段之间的映射。 哈希内部实现结构也与Java的HashMap一致,同样是数组+链表的二维结构,当数组的散列元素串联时,会使用数组第一维的碰撞位置。 哈希可以容纳多达 40 亿个字段,因此,哈希为单个 Redis 实例提供了一种有效的方式来保存大量对象并对其进行操作。 集合也可以有序的,不过有序的集合称作有序集合,按进行分数排,在排序集中,分数可以重复。 Streams 是一种简单但用途广泛且功能强大的数据结构,Streams 是 Redis 5.0 版本的内置类型,可以帮助消除日志数据结构的限制,广泛应用于实时消息传递 (RTM)、消息代理等。 Redis 中的地理空间数据以经度和纬度表示,Redis GeoSpatial数据集实际上只是 Redis 中的 Sorted Sets。 Geospatial有两个特别重要的命令: HyperLogLog是一种概率数据结构,用于计算唯一值,这些值可以是任何值:例如,网站访问者的 IP 地址、搜索词或电子邮件地址。 以精确的精度计算唯一值需要与唯一值的数量成比例的内存量,HyperLogLog 通过允许用内存消耗换取精度来解决这个问题。 HyperLogLogs 从 2.8.9 版本开始在 Redis 中可用,是 Redis 一种高级数据结构。Redis HyperLogLog 最多消耗 12 KB 的内存,并产生标准误差为 0.81% 的近似值,12 KB 不包括存储实际密钥所需的字节。 位图或位集是一个由 0 和 1 组成的数组,位集中的位可以设置为0或1,并且数组中的每个位置称为偏移量。诸如逻辑与、或、异或等操作。 Bitmap 不是 Redis 中的原生数据类型,它的底层实现是基于字符串数据类型的,它是一组基于 String 数据类型的功能,理解位图的最简单方法是将其视为位数组,我们称Redis位图中的数组索引为“偏移”。 BITFIELD可以在单个命令调用中对多个位字段进行操作,它需要一个操作列表来执行并返回一个响应数组,其中每个数组对应于参数列表中的相应操作。 Redis 是一个内存存储,这意味着它的所有数据都存储在服务器 RAM 中,并且只有在服务器运行时才可用,这种操作方式的缺点是 RAM 是易失性的,如果 Redis 进程或其主机发生事故,您可能会遭受数据丢失。为了防止重要数据丢失,Redis 支持两种主要的持久化模式:RDB 和 AOF。 RDB,英文全称: 每隔一段时间,将内存中的数据作为快照写入磁盘上的临时文件,恢复时将快照文件读入内存。如果机器停机并重新启动,内存中将没有数据,再次启动redis后,就会恢复。 AOF,英文全称: RDB会丢失上次备份的RDB文件,如果整体数据完整性要求不高还可以,但是如果追求数据完整性,就要考虑使用AOF了。 AOF支持三种写入策略: 建议策略是everysec,因为它既非常快又非常安全。 AOF持久化是通过存储执行的写命令来记录数据库状态的,随着服务器运行时间越来越长,AOF文件的内容会越来越大,如果放任不管,一个过大的AOF文件很可能会对Redi服务器甚至整个主机造成影响计算机。 AOF文件越大,使用该AOF文件执行数据恢复所需的时间就越多。 举个例子,在某段时间内redis执行了如下操作: 上面的三个命令浓缩了redis的重复操作,其实三个命令都是朝某个list键中添加新元素,现在是3个命令,假如有300个这样的命令呢? 所以当 AOF 太大时,Redis 会简单地将它从头开始重写到一个临时文件中。重写不是通过读取旧的来执行,而是直接访问内存中的数据,这样 Redis 可以创建可能生成的最短 AOF,并且在写入新的时不需要读取磁盘访问。 重写结束后,临时文件会在磁盘上与 fsync 同步,并用于覆盖旧的 AOF 文件。 那么经过重写后,上面三个命令可以直接合并为一条命令: 由于遗留原因、特定场景使用了默认了持久化策略:RDB,现在想从RDB迁移到AOF,这个时候应该怎么做? 这种情况,首先要确定的是需要重启redis服务器。 迁移步骤: 重写 AOF 指令可以大大减少命令的数量,但是,Redis 需要在启动时执行才能恢复其先前的状态,而且它仍然不如 RDB 紧凑,所以假如RDB+AOF组合会极大加快日志压缩和恢复。 配置也非常简单: 启用后,appendonly.aof 文件将以“RDB preamble”为前缀,这样的话redis 将记录每个写入操作,然后在指定的时间间隔执行快照,redis 启动时,会使用 AOF 文件而不是 RDB 来重构数据,因为它保证是最完整的。 启用 aof-use-rdb-preamble,可以获得了 RDB 带来的许多好处,也能确保更好的持久性。 redis命令其实是跟redis的类型相关联的,每个类型包含了若干个命令,由于命令实在有点多,所以我这边不做具体解释,但是我教大家如何去查询你要的命令,并且熟能生巧。 这里首先给大家安利一个redis的命令网站,网址为: 我们看到该界面包含了redis所有的命令列表,你可以有几种筛选策略: 前两个没啥要说的,我们来看下根据类型列举: 比如我们想要看看字符串类型包含了哪些命令: 可以清晰的看到字符串相关的命令就那么多,一共22个,其实也不多,常用的也就那几个,比如set、get、mset、mget、setnx等。 每个命令副标题都是对这个命令的简单介绍,我们拿set举个例子: 这个set的简单介绍就是:设置字符串类型的key value。 我们点进去,就能看到这个命令的详细介绍: 主要有: 一般我们快速看的话就看语法和例子就可以了,你如果想特别精通的话,那就每个都看一下,不过我认为没有那个必要。 那么其他命令的使用和string的set一样,大家要举一反三,因为命令的使用是根据场景来的,每一个命令都非常重要,都有它的价值。 缓存是存储数据的临时存储,以便将来可以更快地访问数据。所以,缓存就是在Cache中存储数据的过程。Redis 可以实现高可用性内存缓存以减少磁盘或 SSD 的数据访问延迟、高吞吐量并减轻数据库和应用程序负载。 一般情况下网页缓存、数据库查询结果缓存、持久会话缓存和常用对象(如图像、文件和元数据)的缓存都会有redis的影子。 redis构建实时排行榜和计数,可以通过集合和有序集合很好的实现,集合可以提供元素的唯一性,有序集合还有分数的概念,可以对分数进行排序。 计数的话像文章阅读数、微博点赞数都是redis可以轻松实现的。 字符串类型的setnx方法只有在不存在时才能添加成功,返回true,这种功能可以应用于分布式锁 Pub/Sub 消息传递允许将消息传递到通道,并允许该通道的所有订阅者接收该消息。发布订阅的方案有很多,redis也可以很轻松实现。 这个功能对于应redis的类型:Geospatial。对于处理地理信息非常有用,而且提供的功能足够业务使用,非常赞。 除了以上几种用途,还有实时分析、媒体流处理、限流、队列等场景的使用。 所以说redis真的非常强大! redis是一个非常棒的开源NoSQL产品,可以毫不夸张的说,世界上每个中大型应用都有redis的身影,本文从redis的基本介绍、数据类型、持久化、使用场景等几大方面给大家详细的普及了redis的技术点,其实redis还有好多高级内容,考虑到的读者以新手或者对redis没有实际应用或者应用比较少的情况,不做高级技术的解释,那么在后续的文章中,我会根据本文的反向酌情进行编写。 希望本文对您有所帮助,最后感谢您的阅读,如果觉得文章对您有帮助,别忘了点赞??、收藏?哦!有任何问题,欢迎在下方评论区与我讨论!!!什么是Redis?
Remote Dictionary Serve
,翻译成中文就是远程字典服务器。Redis 的核心是一种内存数据存储,可用作高性能数据库、缓存和消息代理,它非常适合实时数据处理。Redis安装
https://redis.io/docs/getting-started/installation/
Redis基础命令
Windows
redis-server.exe
即可启动redis。Linux
./redis-server
ps aux | grep redis-server
kill -9 processid
redis-cli shutdown
service redis-server start
service redis-server stop
service redis-server restart
systemctl start redis
systemctl stop redis
systemctl restart redis
macOS
brew services start redis
brew services stop redis
brew services restart redis
Redis数据类型?
字符串Strings
列表Lists
集合Sets
哈希Hashes
有序集合Sorted sets
流Streams
地理空间Geospatial
超级日志HyperLogLog
位图Bitmaps
位域Bitfields
redis持久化
RDB
Redis DataBase
。重要命令
save <seconds> <changes>
:保存数据到磁盘,seconds为秒数,changes为操作数,比如save 10 2
就代表在10秒内操作2次。stop-writes-on-bgsave-error <yes|no>
:默认情况下,如果启用 RDB 快照并且最近的后台保存失败,Redis 将停止接受写入。这将给用户一种感觉:数据没有正确地保存在磁盘上,如果后台保存过程将再次开始工作,Redis 将自动再次允许写入。rdbcompression <yes|no>
:转储 .rdb 数据库时使用 LZF 压缩字符串对象。dbfilename <name>
:转储数据库的文件名(默认 dump.rdb)。RDB优势
RDB缺点
AOF
Append Only File
。
重要命令
appendonly <yes|no>
:是否应打开 AOF 模式,默认是RDB。appendfilename <name>
:仅附加文件的名称(默认值:“appendonly.aof”)appendfsync <mode>
:持久化策略,一般有三种:no、always、everysecAOF写入策略
AOF 重写
redis> RPUSH list \\\"1\\\" \\\"2\\\" // [\\\"1\\\",\\\"2\\\"]
(integer) 2
redis> RPUSH list \\\"3\\\" \\\"4\\\" // [\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\"]
(integer) 2
redis> RPUSH list \\\"5\\\" \\\"6\\\" \\\"7\\\" // [\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\"]
(integer) 3redis> RPUSH list \\\"1\\\" \\\"2\\\" \\\"3\\\" \\\"4\\\" \\\"5\\\" \\\"6\\\" \\\"7\\\"
AOF优势
AOF缺点
如何从 RDB 迁移到 AOF?
bgrewriteaof
appendonly yes
RDB+AOF组合持久化
aof-use-rdb-preamble yes
redis命令
命令列表网站
https://redis.io/commands/
Redis的使用场景
1、缓存
2、排行榜/计数
3、分布式锁
4、消息的发布/订阅
5、地理空间
总结
原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/34997.html