Redis는 강력한 기능과 풍부한 데이터 유형을 갖추고 있습니다. 시스템이 아무리 빠르더라도 엄청난 남용을 견딜 수 없습니다. 일부 고위험 기능을 비활성화하고 개발의 족쇄를 걸면 비즈니스는 특정 구현에 얽매이지 않고 간결하고 일반적인 아이디어로 문제를 고려할 수 있습니다.
Redis는 다양한 용도에 따라 다양한 지속성 전략과 제거 전략을 갖습니다. 따라서 Redis 클러스터를 사용하고 적용하기 전에 캐싱 또는 저장용으로 사용되는지 명확히 하세요. Redis 클러스터에는 마스터-슬레이브와 클러스터라는 두 가지 모드가 있으며 둘 다 고유한 장점과 단점이 있습니다. 다음 사양에서는 클러스터 모드를 구분하지 않고 사용 시나리오 및 운영 제한 사항을 설명합니다.
redis는 지속성을 지원하지만 모든 데이터를 Redis에 저장하는 데는 비용이 많이 듭니다. 핫 데이터(QPS가 5k를 초과하는 데이터 등)를 Redis에 로드하는 것이 좋습니다. 저주파 데이터는 Mysql
및 ElasticSearch
에 저장할 수 있습니다. Mysql
、 ElasticSearch中
。
不要将不相关的数据业务都放到一个 Redis
中。一方面避免业务相互影响,另一方面避免单实例膨胀,并能在故障时降低影响面,快速恢复。
由于 Redis
是单线程服务,消息过大会阻塞并拖慢其他操作。保持消息内容在 1KB 以下是个好的习惯。严禁超过 50KB 的单条记录。消息过大还会引起网络带宽的高占用,持久化到磁盘时的 IO 问题。
连接的频繁创建和销毁,会浪费大量的系统资源,极限情况会造成宿主机当机。请确保使用了正确的 Redis
客户端连接池配置。
作为缓存使用的 Key
,必须要设置失效时间。失效时间并不是越长越好,请根据业务性质进行设置。注意,失效时间的单位有的是秒,有的是毫秒,这个很多同学不注意容易搞错。
缓存应该仅作缓存用,去掉后业务逻辑不应发生改变,万不可切入到业务里。第一,缓存的高可用会影响业务;第二,产生深耦合会发生无法预料的效果;第三,会对维护行产生肤效果。
小应用就算了
如单 redis
集群并不能为你的数据服务,不要着急扩大你的 redis
集群(包括 M/S 和 Cluster),集群越大,在状态同步和持久化方面的性能越差。 优先使用客户端 hash
进行集群拆分。如:根据用户 id 分 10 个集群,用户尾号为 0 的落在第一个集群。
Keys
命令效率极低,属于 O(N)
操作,会阻塞其他正常命令,在 cluster
上,会是灾难性的操作。严禁使用,DBA
应该 rename
此命令,从根源禁用。
flush
命令会清空所有数据,属于高危操作。严禁使用,DBA
应该 rename
此命令,从根源禁用,仅 DBA
可操作。
如没有非常特殊的需求,严禁将 Redis
当作消息队列使用。Redis
当作消息队列使用,会有容量、网络、效率、功能方面的多种问题。如需要消息队列,可使用高吞吐的 Kafka
或者高可靠的 RocketMQ
。
redis
那么快,慢查询除了网络延迟,就属于这些批量操作函数。大多数线上问题都是由于这些函数引起。
ZRANGE
、 ZRANGEBYSCORE
等多个操作 ZSET
的函数,严禁使用 ZRANGE myzset 0 -1
等这种不设置范围的操作。请指定范围,如 ZRANGE myzset 0 100
。如不确定长度,可使用 ZCARD
判断长度
HGETALL
会取出相关 HASH
的所有数据,如果数据条数过大,同样会引起阻塞,请确保业务可控。如不确定长度,可使用 HLEN
先判断长度
Redis Cluster
的 MGET
操作,会到各分片取数据聚合,相比传统的 M/S
架构,性能会下降很多,请提前压测和评估
select
函数用来切换 database
,对于使用方来说,这是很容易发生问题的地方,cluster
模式也不支持多个 database
Redis
에 넣지 마세요. 한편으로는 비즈니스 상호 영향을 방지하는 반면, 단일 인스턴스의 확장을 방지하여 장애 발생 시 영향을 줄이고 신속하게 복구할 수 있습니다. 🎜🎜메시지 크기 제한🎜🎜Redis
는 단일 스레드 서비스이므로 메시지가 너무 많으면 다른 작업이 차단되고 속도가 느려집니다. 메시지 내용을 1KB 미만으로 유지하는 것이 좋습니다. 50KB를 초과하는 단일 레코드는 엄격히 금지됩니다. 메시지가 너무 크면 네트워크 대역폭 사용량이 많아지고 디스크에 유지할 때 IO 문제가 발생합니다. 🎜🎜연결 수 제한🎜🎜연결을 자주 생성하고 삭제하면 시스템 리소스가 많이 낭비되고 극단적인 경우 호스트가 중단될 수 있습니다. 올바른 Redis
클라이언트 연결 풀 구성을 사용하고 있는지 확인하세요. 🎜🎜캐시 키는 만료 시간을 설정합니다🎜🎜캐시로 사용되는 키
이므로 만료 시간을 설정해야 합니다. 유효기간은 길수록 좋습니다. 업무 성격에 맞게 설정해 주세요. 실패 시간의 일부 단위는 초이고 일부는 밀리초입니다. 많은 학생들이 주의를 기울이지 않으면 쉽게 실수를 할 수 있습니다. 🎜🎜캐시는 중간 상태를 가질 수 없습니다.🎜🎜캐시는 캐싱에만 사용해야 합니다. 비즈니스 로직은 제거된 후 변경되어서는 안 되며, 비즈니스에 분할되어서도 안 됩니다. 첫째, 캐시의 높은 가용성은 비즈니스에 영향을 미치고, 둘째, 심층 결합은 예측할 수 없는 영향을 미치며, 셋째, 유지 관리 작업에 표면적인 영향을 미칩니다. 🎜🎜선호되는 확장 방법은 클라이언트 측 해시입니다🎜🎜🎜작은 애플리케이션은 잊어버리세요🎜🎜🎜단일 redis
클러스터는 데이터를 제공할 수 없으므로 서두르지 말고 redis 클러스터(M/S 및 Cluster 포함), 클러스터가 클수록 상태 동기화 및 지속성 성능이 저하됩니다. 클러스터 분할을 위해 클라이언트 <code>해시
사용을 우선순위로 지정하세요. 예를 들어 사용자 ID에 따라 10개의 클러스터가 나누어지고, 마지막 번호가 0인 사용자가 첫 번째 클러스터에 속합니다. 🎜🎜작업 제한🎜🎜Keys 사용은 엄격히 금지됩니다🎜🎜Keys
명령은 매우 비효율적이며 O(N)
작업에 속하므로 다른 일반 명령을 차단합니다. 클러스터에서는 재앙적인 작업이 될 것입니다. 사용은 엄격히 금지됩니다. <code>DBA
는 소스에서 비활성화된 이 명령의 이름을 변경
해야 합니다. 🎜🎜Flush🎜🎜flush
명령을 사용하면 모든 데이터가 지워지며 위험도가 높은 작업은 엄격히 금지됩니다. 사용은 엄격히 금지됩니다. DBA
는 이 명령의 이름을 변경
해야 하며 소스에서 비활성화되어야 하며 DBA
만 작동할 수 있습니다. 🎜🎜메시지 큐로 사용하는 것은 엄격히 금지됩니다🎜🎜아주 특별한 요구가 없다면 Redis
를 메시지 큐로 사용하는 것은 엄격히 금지됩니다. Redis
를 메시지 큐로 사용하게 되면 용량, 네트워크, 효율성, 기능성 측면에서 다양한 문제가 발생하게 됩니다. 메시지 대기열이 필요한 경우 처리량이 높은 Kafka
또는 안정성이 뛰어난 RocketMQ
를 사용할 수 있습니다. 🎜🎜범위를 설정하지 않은 일괄 작업은 엄격히 금지됩니다🎜🎜redis
네트워크 지연을 제외하고 매우 빠르고 느린 쿼리는 이러한 일괄 작업 기능에 속합니다. 대부분의 온라인 문제는 이러한 기능으로 인해 발생합니다. 🎜ZRANGE
, ZRANGEBYSCORE
및 기타 작업 ZSET
기능 , ZRANGE myzset 0 -1
및 범위를 설정하지 않는 기타 작업을 사용하는 것은 엄격히 금지됩니다. ZRANGE myzset 0 100
과 같이 범위를 지정하십시오. 길이가 확실하지 않은 경우 ZCARD
를 사용하여 길이를 확인할 수 있습니다🎜HGETALL
은 HASH
의 모든 데이터에 대해 해당 항목을 제거합니다. 데이터 항목 수가 너무 많으면 혼잡이 발생할 수도 있으므로 비즈니스가 제어 가능한지 확인하십시오. 길이가 확실하지 않은 경우 HLEN
을 사용하여 먼저 길이를 확인할 수 있습니다🎜Redis 클러스터
의 MGET
작업은 각 샤드에서 데이터를 수집하여 집계합니다. 기존 M/S
아키텍처와 비교하면 성능이 많이 떨어집니다. 미리 테스트하고 평가하세요🎜select code> 기능은 <code>데이터베이스
를 전환하는 데 사용됩니다. 사용자의 경우 여기서 문제가 쉽게 발생할 수 있습니다. 클러스터
모드도 여러 데이터베이스
를 지원하지 않습니다. 그리고 아무런 혜택도 없습니다. 🎜redis
자체는 이미 매우 빠릅니다. 큰 필요가 없으면 예외를 포착하고 트랜잭션 기능을 사용하지 않는 것이 좋습니다. redis
本身已经很快了,如无大的必要,建议捕获异常进行回滚,不要使用事务函数,很少有人这么干。
lua
脚本虽然能做很多看起来很 cool
的事情,但它就像是 SQL
的存储过程,会引入性能和一些难以维护的问题,禁用。
monitor
函数可以快速看到当前 redis
正在执行的数据流,但是当心,高峰期长时间阻塞在 monitor
命令上,会严重影响 redis
的性能。此命令不禁止使用,但使用一定要特别特别注意。
Redis
的 Key
一定要规范,这样在遇到问题时,能够进行方便的定位。Redis
属于无 scheme
的 KV
数据库,所以,我们靠约定来建立其 scheme
语义。其好处:
能够根据某类 key 进行数据清理
能够根据某类 key 进行数据更新
能够方面了解到某类 key 的归属方和应用场景
为统一化、平台化做准备,减少技术变更
一般,一个 key
장기 모니터 금지
lua
스크립트는멋져
보이는 많은 작업을 수행할 수 있지만 이는SQL
의 저장소와 같습니다. 성능 및 일부 어려운 유지 관리 문제가 발생하며 비활성화됩니다.
monitor
기능을 사용하면 현재redis
에서 실행 중인 데이터 흐름을 빠르게 확인할 수 있지만에서 차단되므로 주의하세요. /code> 명령은 피크 기간 동안 오랜 시간 동안 <code>redis
성능에 심각한 영향을 미칩니다. 이 명령은 사용이 금지되지는 않지만 사용할 때는 특별한 주의가 필요합니다.키 사양
Redis
의 키
는 문제가 발생했을 때 쉽게 찾을 수 있도록 표준화되어야 합니다. Redis
는 scheme
이 없는 KV
데이터베이스에 속하므로 규칙에 따라 scheme
의미를 설정합니다. 이점: 🎜키
에는 비즈니스, 키 목적, 변수 등의 차원이 있어야 합니다. 각 차원은 다음으로 구분됩니다. 다음은 여러 키의 예입니다. 🎜🎜🎜user:sex 사용자 성별 10002232🎜🎜🎜 🎜msg:achi 201712의 사용자 댓글 순위🎜🎜위 내용은 Redis 사양은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!