数哥
继续写博客
展开
-
031、客户端通信协议
几乎所有的主流编程语言都有Redis的客户端,原因有二。第 一,客户端与服务端之间的通信协议是在TCP协议之上构建的。第二, Redis制定了RESP(REdis Serialization Protocol,Redis序列化协议)实现客 户端与服务端的正常交互,这种协议简单高效,既能够被机器解析,又容易 被人类识别。这样Redis服务端能够按照RESP将其解析为set hello world命令,执行后 回复的格式如下:+OK。原创 2024-06-21 09:23:45 · 50 阅读 · 0 评论 -
030、发布订阅
Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布 者和订阅者不进行直接通信,发布者客户端向指定的频道(channel)发布消 息,订阅该频道的每个客户端都可以收到该消息,如图所示。Redis提 供了若干命令支持该功能,在实际应用开发时,能够为此类问题提供实现方 法。原创 2024-06-21 09:20:09 · 125 阅读 · 0 评论 -
029、事务
事务表示一 组动作,要么全部执行,要么全部不执行。例如在社交网站上用户A关注了 用户B,那么需要在用户A的关注表中加入用户B,并且在用户B的粉丝表中 添加用户A,这两个行为要么全部执行,要么全部不执行,否则会出现数据 不一致的情况。Redis提供了简单的事务功能,将一组需要一起执行的命令放到multi和 exec两个命令之间。multi命令代表事务开始,exec命令代表事务结束,它们 之间的命令是原子顺序执行的,例如下面操作实现了上述用户关注问题。原创 2024-06-14 10:32:36 · 40 阅读 · 0 评论 -
027、工具_redis-benchmark
redis-benchmark可以为Redis做基准性能测试。原创 2024-06-13 16:02:47 · 281 阅读 · 0 评论 -
026、工具_redis-server
整个内存检测的时间比较长。通常无需每次开启Redis实例时都执行–test-memory选项,该功能更偏向 于调试和测试,例如,想快速占满机器内存做一些极端条件的测试,这个功 能是一个不错的选择。redis-server除了启动Redis外,还有一个 --test-memory选项。原创 2024-06-12 10:41:37 · 364 阅读 · 0 评论 -
025、工具_redis-cli
redis-cli的全部参数,可以执行redis-cli-help命令来进 行查看。原创 2024-06-12 10:40:01 · 140 阅读 · 0 评论 -
024、工具_慢查
1)发送命令 2)命令排队 3)命令执行 4)返回结果需要注意,慢查询只统计步骤3)的时间,所以没有慢查询并不代表客 户端没有超时问题。原创 2024-06-06 17:11:10 · 249 阅读 · 0 评论 -
023、键管理_数据库
dbsize、select、flushdb/flushall命令。原创 2024-06-06 14:29:52 · 310 阅读 · 0 评论 -
022、键管理_遍历键
Redis提供了两个命令遍历所有的键,分别是keys和scan。原创 2024-06-05 11:01:55 · 97 阅读 · 0 评论 -
021、键管理_单个键
迁移键功能非常重要,因为有时候我们只想把部分数据由一个Redis迁移到另一个Redis(例如从生产环境迁移到测试环境),Redis发展历程中提供了move、dump+restore、migrate三组迁移键的方法,它们的实现方式以及使用的场景不太相同,下面分别介绍。·key|“”:在Redis3.0.6版本之前,migrate只支持迁移一个键,所以此处是要迁移的键,但Redis3.0.6版本之后支持迁移多个键,如果当前需要迁移多个键,此处为空字符串""。第三,目标Redis完成restore。原创 2024-06-05 10:58:09 · 23 阅读 · 0 评论 -
020、有序集合_编码
ziplist(压缩列表):当有序集合的元素个数小于zset-max-ziplist-entries配置(默认128个),同时每个元素的值都小于zset-max-ziplist-value配置(默认64字节)时,Redis会用ziplist来作为有序集合的内部实现,ziplist可以有效减少内存的使用。·skiplist(跳跃表):当ziplist条件不满足时,有序集合会使用skiplist作为内部实现,因为此时ziplist的读写效率会下降。原创 2024-06-04 17:35:44 · 66 阅读 · 0 评论 -
019、有序集合_命令
它保留了集合不能有重复,有序集合中的元素可以排序。但是它和列表使用索引下标作为排序依据不同的是,它给每个元素设置一个分数(score)作为排序的依据。如图该有序集合包含kris、mike、frank、tim、martin、tom,它们的分数分别是1、91、200、220、250、251,有序集合提供了获取指定分数和元素范围查询、计算成员排名等功能有序集合中的元素不能重复,但是score可以重复,就和一个班里的同学学号不能重复,但是考试成绩可以相同。原创 2024-06-04 17:34:04 · 456 阅读 · 0 评论 -
018、集合_应用场景
用户和标签的关系维护应该在一个事务内执行,防止部分命令失败造成的数据不一致,有关如何将两个命令放在一个事务,参照事务以及Lua的使用方法。典型的使用场景是标签(tag)。例如一个用户可能对娱乐、体育比较感兴趣,另一个用户可能对历史、新闻比较感兴趣,(5)计算用户共同感兴趣的标签。(3)删除用户下的标签。(4)删除标签下的用户。(1)给用户添加标签。(2)给标签添加用户。原创 2024-06-03 09:37:07 · 261 阅读 · 0 评论 -
017、集合_编码
intset(整数集合):当集合中的元素都是整数且元素个数小于set-max-intset-entries配置(默认512个)时,Redis会选用intset来作为集合的内部实现,从而减少内存的使用。·hashtable(哈希表):当集合类型无法满足intset的条件时,Redis会使用hashtable作为集合的内部实现。原创 2024-06-03 09:31:10 · 42 阅读 · 0 评论 -
016、集合_命令
集合(set)保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素。如图集合user:1:follow包含着"it"、“music”、“his”、"sports"四个元素,一个集合最多可以存储2(32)-1个元素。Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集,合理地使用好集合类型,能在实际开发中解决很多实际问题。原创 2024-06-02 07:27:07 · 186 阅读 · 0 评论 -
014、列表_内部编码
ziplist(压缩列表):当列表的元素个数小于list-max-ziplist-entries配置(默认512个),同时列表中每个元素的值都小于list-max-ziplist-value配置时(默认64字节),Redis会选用ziplist来作为列表的内部实现来减少内存的使用。·linkedlist(链表):当列表类型无法满足ziplist的条件时,Redis会使用linkedlist作为列表的内部实现。下面的示例演示了列表类型的内部编码,以及相应的变化。列表类型的内部编码有两种。原创 2024-05-30 09:31:53 · 31 阅读 · 0 评论 -
013、列表_命令
列表(list)类型是用来存储多个有序的字符串,如图2a、b、c、d、e五个元素从左到右组成了一个有序的列表,列表中的每个字符串称为元素(element),一个列表最多可以存储2(32)-1。可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。它类似栈和队列。原创 2024-05-30 09:29:14 · 135 阅读 · 0 评论 -
012、哈希_应用场景
哈希类型是稀疏的,而关系型数据库是完全结构化的,例如哈希类型每个键可以有不同的field,而关系型数据库一旦添加新的列,所有行都要为其设置值(即使为NULL)。缺点:序列化和反序列化有一定的开销,同时每次更新属性都需要把全部数据取出进行反序列化,更新后再序列化到Redis中。缺点:占用过多的键,内存占用量较大,同时用户信息内聚性比较差,所以此种方案一般不会在生产环境使用。图为关系型数据表记录的两条用户信息,用户的属性作为表的列,每条用户信息作为行。优点:简单直观,如果使用合理可以减少内存空间的使用。原创 2024-05-29 09:04:30 · 51 阅读 · 0 评论 -
011、哈希_编码
ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)、同时所有值都小于hash-max-ziplist-value配置(默认64字节)时,Redis会使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀。下面的示例演示了哈希类型的内部编码,以及相应的变化。原创 2024-05-29 09:02:04 · 52 阅读 · 0 评论 -
010、哈希_命令
在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value={{field1,value1},…{fieldN,valueN}}如图字符串和哈希类型对比。原创 2024-05-28 10:40:40 · 751 阅读 · 0 评论 -
009、字符串_应用场景
Redis作为缓存层,MySQL作 为存储层,绝大部分请求的数据都是从Redis中获取。由于Redis具有支撑高 并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。原创 2024-05-28 09:28:05 · 360 阅读 · 0 评论 -
008、字符串_内部编码
Redis会根据当前值的类型和长度决定使用哪种内部编码实现。·embstr:小于等于39个字节的字符串。#小于等于39个字节的字符串:embstr。·raw:大于39个字节的字符串。#大于39个字节的字符串:raw。·int:8个字节的长整型。原创 2024-05-27 09:25:04 · 173 阅读 · 0 评论 -
007、字符串_命令
字符串类型是Redis最基础的数据结构。首先键都是字符串类型,而且 其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其 他四种数据结构的学习奠定基础。原创 2024-05-27 09:22:54 · 886 阅读 · 0 评论 -
006、API_单线程
Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库 服务,本节首先通过多个客户端命令调用的例子说明Redis单线程命令处理 机制,接着分析Redis单线程模型为什么性能如此之高,最终给出为什么理 解单线程模型是使用和运维Redis的关键。原创 2024-05-26 08:48:16 · 330 阅读 · 0 评论 -
005、API_数据结构
Redis这样设计有两个好处:第一,可以改进内部编码,而对外的数据 结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数 据结构和命令,例如Redis3.2提供了quicklist,结合了ziplist和linkedlist两者 69 的优势,为列表类型提供了一种更为优秀的内部编码实现,而对外部用户来 说基本感知不到。键的数据结构类型,它们分别是: string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集 合),这些只是Redis对外的数据结构,原创 2024-05-26 08:45:50 · 353 阅读 · 0 评论 -
004、API_全局命令
keys *原创 2024-05-24 09:24:19 · 275 阅读 · 0 评论 -
003、初识_配置/启停/操作
Redis安装之后,src和/usr/local/bin目录下多了几个以redis开头可执行文 件,称之为Redis Shell,可以启 动和停止Redis、可以检测和修复Redis的持久化文件,还可以检测Redis的性 能。Redis-server 启动redisRedis-cli 命令行客户端Redis-benchmark 基准测试工具Redis-check-aof AOF持久化文件检测和修复工具Redis-check-dump RDB持久化文件检测和修复工具。原创 2024-05-24 09:18:40 · 241 阅读 · 0 评论 -
002、初识_REDIS简易安装
下载解压链接编译$ cd redis$ make版本查看。原创 2024-05-23 11:53:52 · 109 阅读 · 0 评论 -
001、初识_reids概览
Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串、哈希、列表、集合、有序集合,位图(Bitmaps)和HyperLogLog。原创 2023-06-11 06:51:01 · 669 阅读 · 0 评论