Redis_基础

本文介绍了Redis的基本概念、数据类型特点及应用场景。对比了Redis与Memcached的性能差异,并详细阐述了Redis的缓存策略、事务机制、键管理以及分区方案等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. Redis(REmote Dictionary Server远程字典服务器)概述

    ① Redis是单线程应用程序,占用较少的内存。在性能上Redis是单线程模型,而Memcached支持多线程,所以在多核服务器上后者的性能更高一些。如果需要用到高级的数据类型或是持久化等功能,Redis是Memcached很好的替代品当拥有大量不经常使用的数据且无须立即存取时,Redis不是最佳的方案。基于SQL的关系型数据库或文档存储型的NoSQL技术,例如CounchDB或者MongoDB,可能是更好的选择。

    ② 运行32位还是64位版本的Redis将决定Redis键大小的实际限制。对于32位版本来说,任何长于32位的键名需要更多的字节空间,因此增加了Redis的内存使用。使用64位版本的Redis允许更长的键长度,但对于短小的键来说,也会分配完整的64位空间, 从而导致额外的空间浪费

    ③ 作为缓存系统,Reids可以限定数据占用的最大内存空间,在数据达到一定空间限制后可以按照一定的规则自动淘汰不需要的键。Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性能的优先级队列。同时,Redis还支持“发布/订阅”的消息模式,可以基于此构建聊天室等系统

  2. 多数据库

    每个数据库对外都是以一个从0开始的递增数字命名,客户端与Redis建立连接后会自动选择数据库,可以通过【redis>SELECT 数字】来选择数据库
    Redis数据库不支持自定义数据库的名字,也不支持为每个数据库设置不同的访问密码,多个数据库之间不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。

  3. 有序集合类型

    有序集合与列表的相同之处:
    ①都是有序的;
    ②都可以获得某一范围的元素。

    不同之处:
    ①列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间的数据速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间数据的应用
    ②有序集合类型是使用散列表和跳跃表实现的,所以即使读取位于中间部分的数据速度也很快
    ③列表中不能简单地调整某个元素地位置,但是有序集合可以(通过更改这个元素的分数)
    ④有序集合要比列表类型更耗费内存

  4. 事务

    redis > MULTI #开始事务
    redis > EXEC #结束事务
    错误处理:
    如果是语法错误,输入EXEC命令后Redis会直接返回错误,连正确的命令也不会执行
    如果是运行错误,除了出错的命令以外的命令都会被执行,同时Redis没有回滚功能,因此需要开发者格外注意

    WATCH命令:
    可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一直持续到EXEC命令(事务中的命令是在EXEC之后才执行的,所以在MULTI命令之后可以修改WATCH监控的键值)
    【由于WATCH命令的作用只是当被监控的键值被修改后阻止之后一个事务的执行,而不能保证其他客户端不修改这一键值,所以我们需要在EXEC执行失败之后重新执行整个函数】
    执行EXEC命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用UNWATCH命令来取消监控

  5. 生存时间

    Redis中可以使用EXPIRE命令设置一个键的生存时间,到时间后Redis会自动删除它

    EXPIRE key seconds
    

    seconds表示键的生存时间,单位是秒
    想知道一个键还有多久被删除,使用TTL命令:TTL key
    取消键的生存时间设置(即恢复成永久的),可以使用PERSIST命令:PERSIST key
    除了PERSIST命令之外,使用SET或GETSET命令为键赋值,也会同时清楚键的生存时间
    【如果使用WATCH命令监测了一个拥有生存时间的键,该键时间到期自动删除并不会被WATCH命令认为该键被改变】
    实际开发过程中很难为缓存键设置合理的生存时间,为此可以限制Redis能够使用的最大内存,并让Redis按照一定规则淘汰不需要的缓存键:修改配置文件的maxmemory参数,超过这个限制后Redis会依据

  6. 分区

    ① 在Redis中有三种不同的分区方案:
    1). 客户端分区:分区逻辑包含在客户端代码中,它基于算法或存储的额外信息或者兼而有之,用来选择正确的分区或者Redis节点。
    2). 辅助代理分区:Redis客户端连接到代理中间件,由它将客户端的请求路由到正确的Redis节点,Twemproxy即是基于该方案的实现。
    3). 查询路由:任一客户端查询集群中的随机节点将会被路由到包含键的正确节点上,这是Redis目前的实现方式

    ② 范围分区:
    需要管理代码和数据结构来追踪哪些键被分配到哪个特定的实例上。范围分区的核心是依据传入的键是否落入特定的范围内,并将该键指派给该范围所对应的实例上。
    范围分区会带来额外的成本,包括用于追踪分区的Redis bitstring 数据结构,以及定制开发的客户端代码。这些客户端代码用于管理将键分配到分区及从运行中的Redis集群中获取和更新键

    ③ 列表分区
    与范围分区类似,列表分区为分区指定一个列表值,如果Redis键拥有列表值中的一个,那么就将该键分配到那个分区。列表分区不需要键是连续的,但还是少不了要添加客户端分区代码来管理小型集群

    ④ 哈希分区
    对Redis键采用哈希算法,并对结果进行取模操作(%)计算出键具体存放的位置或节点。

    ⑤ 复合分区
    Redis集群使用一种称作一致性哈希的复合分区形式,组合看哈希分区和列表分区的特征来计算键的归属实例。

<think>好的,我现在需要回答用户关于REDIS_SCHEME_KEY的问题。首先,我需要确认用户提到的REDIS_SCHEME_KEY是否在常见的Redis配置中存在。根据我的知识库,Redis的标准配置参数中并没有这个特定的名。这可能是一个特定于某个应用或框架的自定义配置项。 接下来,我应该考虑用户提供的引用内容。用户引用了关于RedisFailover的Kubernetes配置,其中提到了auth.secretPath设置为redis-auth。这可能意味着在他们的环境中,REDIS_SCHEME_KEY可能与认证相关,比如用于指定连接Redis的协议(例如redis://或rediss://)。此外,另一个引用提到了kvdi,一个Kubernetes虚拟桌面基础设施,可能使用自定义的Redis配置来管理连接方案。 可能的解释是,REDIS_SCHEME_KEY用于定义连接Redis的URL方案,比如是否使用SSL。例如,在应用程序配置中,可能会有类似的来设置redis://或rediss://,从而影响客户端连接时是否启用TLS。需要进一步验证这种用法是否常见于某些库或框架中。 另外,用户可能在Kubernetes环境中使用某些Operator或自定义资源定义(CRD),这些可能扩展了Redis的配置选项。例如,在RedisFailover的CRD中,可能通过特定的字段来设置连接方案,而REDIS_SCHEME_KEY可能是这些配置中的一个参数,用于指定使用的协议。 为了确保回答的准确性,我应该建议用户检查他们的具体应用文档或代码库,确认REDIS_SCHEME_KEY的定义置和用途。同时,提醒他们注意标准Redis配置中的相关参数,如tls配置或uri格式,以避免混淆。 总结来说,REDIS_SCHEME_KEY可能是一个特定环境下的自定义配置项,用于指定连接协议,需要结合上下文进一步确认。</think>关于$REDIS\_SCHEME\_KEY$的具体含义,根据您提供的Kubernetes配置片段和行业经验分析,这可能是特定于应用场景的自定义配置,在标准Redis配置中并不存在该原生参数[^1][^2]。 **分步解释:** 1. **配置上下文分析** 在您提供的RedisFailover配置中,$auth.secretPath$指向了存储认证信息的Secret对象,但未直接提及$REDIS\_SCHEME\_KEY$。这类自定义名常见于: - 应用程序连接Redis时的环境变量命名规范 - Kubernetes Operator的CRD扩展字段 - 特定框架的配置抽象层 2. **可能的功能推测** 根据"SCHEME"的命名约定,该可能用于定义: ```yaml # 示例场景猜测 redis: connection: scheme: "rediss://" # 启用TLS加密连接 host: "redis-cluster.example.com" port: 6379 ``` 3. **验证建议** 建议通过以下途径确认具体定义: - 检查应用程序部署清单中的环境变量映射关系 - 查阅使用该配置的Operator文档(如spotahome/redis-operator) - 在代码库中搜索该名的引用置 4. **标准Redis对比** 标准Redis 6.0+的TLS配置通过以下参数实现: $$ redis-cli --tls --cert ./redis.crt --key ./redis.key $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值