0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Redis的五个使用规范

汽车玩家 来源:简书 作者:Java微服务 2020-05-03 14:31 次阅读

一、键值设计

1、key名设计

可读性和可管理性

以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id

Redis的五个使用规范

简洁性

保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如:

Redis的五个使用规范

不要包含特殊字符

反例:包含空格、换行、单双引号以及其他转义字符

2、value设计

拒绝bigkey

防止网卡流量、慢查询,string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。

反例:一个包含200万个元素的list。

非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题(例如一个200万的zset设置1小时过期,会触发del操作,造成阻塞,而且该操作不会不出现在慢查询中(latency可查)),查找方法和删除方法

选择适合的数据类型

例如:实体类型(要合理控制和使用数据结构内存编码优化配置,例如ziplist,但也要注意节省内存和性能之间的平衡)

反例:

Redis的五个使用规范

正例:

Redis的五个使用规范

控制key的生命周期

redis不是垃圾桶,建议使用expire设置过期时间(条件允许可以打散过期时间,防止集中过期),不过期的数据重点关注idletime。

二、命令使用

1、O(N)命令关注N的数量

例如hgetall、lrange、smembers、zrange、sinter等并非不能使用,但是需要明确N的值。有遍历的需求可以使用hscan、sscan、zscan代替。

2、禁用命令

禁止线上使用keys、flushall、flushdb等,通过redis的rename机制禁掉命令,或者使用scan的方式渐进式处理。

3、合理使用select

redis的多数据库较弱,使用数字进行区分,很多客户端支持较差,同时多业务用多数据库实际还是单线程处理,会有干扰。

4、使用批量操作提高效率

原生命令:例如mget、mset。

非原生命令:可以使用pipeline提高效率。

但要注意控制一次批量操作的元素个数(例如500以内,实际也和元素字节数有关)。

注意两者不同:

原生是原子操作,pipeline是非原子操作。

pipeline可以打包不同的命令,原生做不到

pipeline需要客户端和服务端同时支持。

5、不建议过多使用Redis事务功能

Redis的事务功能较弱(不支持回滚),而且集群版本(自研和官方)要求一次事务操作的key必须在一个slot上(可以使用hashtag功能解决)

6、Redis集群版本在使用Lua上有特殊要求

1、所有key都应该由 KEYS 数组来传递,redis.call/pcall 里面调用的redis命令,key的位置,必须是KEYS array, 否则直接返回error,"-ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS arrayrn" 2、所有key,必须在1个slot上,否则直接返回error, "-ERR eval/evalsha command keys must in same slotrn"

7、monitor命令

必要情况下使用monitor命令时,要注意不要长时间使用。

三、客户端使用

1、避免多个应用使用一个Redis实例

不相干的业务拆分,公共数据做服务化。

2、使用连接池

可以有效控制连接,同时提高效率,标准使用方式:

Redis的五个使用规范

3、熔断功能

高并发下建议客户端添加熔断功能(例如netflix hystrix)

4、合理的加密

设置合理的密码,如有必要可以使用SSL加密访问(阿里云Redis支持)

5、淘汰策略

根据自身业务类型,选好maxmemory-policy(最大内存淘汰策略),设置好过期时间。

默认策略是volatile-lru,即超过最大内存后,在过期键中使用lru算法进行key的剔除,保证不过期数据不被删除,但是可能会出现OOM问题。

其他策略如下:

allkeys-lru:根据LRU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。

allkeys-random:随机删除所有键,直到腾出足够空间为止。

volatile-random:随机删除过期键,直到腾出足够空间为止。

volatile-ttl:根据键值对象的ttl属性,删除最近将要过期数据。如果没有,回退到noeviction策略。

noeviction:不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息"(error) OOM command not allowed when used memory",此时Redis只响应读操作。

四、相关工具

1、数据同步

redis间数据同步可以使用:redis-port

2、big key搜索

redis大key搜索工具

3、热点key寻找

内部实现使用monitor,所以建议短时间使用facebook的redis-faina 阿里云Redis已经在内核层面解决热点key问题

五、删除bigkey

下面操作可以使用pipeline加速。

redis 4.0已经支持key的异步删除,欢迎使用。

1、Hash删除: hscan + hdel

Redis的五个使用规范

2、List删除: ltrim

Redis的五个使用规范

3、Set删除: sscan + srem

Redis的五个使用规范

4、SortedSet删除: zscan + zrem

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 阿里
    +关注

    关注

    6

    文章

    439

    浏览量

    32846
  • Redis
    +关注

    关注

    0

    文章

    376

    浏览量

    10887
收藏 人收藏

    评论

    相关推荐

    华为云Flexus X实例,Redis性能加速评测及对比

    随着云计算技术的飞速发展,Redis 作为一种高性能的内存数据库,在各种应用场景中发挥着越来越重要的作用。为了满足不同用户对 Redis 性能的高要求,华为云推出了 Flexus X 实例,并提供了
    的头像 发表于 12-29 15:47 169次阅读
    华为云Flexus X实例,<b class='flag-5'>Redis</b>性能加速评测及对比

    Redis使用重要的两机制:Reids持久化和主从复制

    今天这篇文章,我们一起了解 Redis 使用中非常重要的两机制:Reids 持久化和主从复制。 我们都知道Redis是一内存数据库,在学习主从同步之前,我们首先要想到
    的头像 发表于 12-18 10:33 128次阅读
    <b class='flag-5'>Redis</b>使用重要的两<b class='flag-5'>个</b>机制:Reids持久化和主从复制

    Redis缓存与Memcached的比较

    关键特性和差异: 1. 数据存储 Redis: Redis是一开源的键值存储,支持多种数据结构,如字符串、列表、集合、有序集合、散列、位图、超日志和地理空间索引。 它支持持久化,可以将内存中的数据保存到磁盘,支持RDB(快照)
    的头像 发表于 12-18 09:33 166次阅读

    Redis 开源协议调整,我们怎么办?

    许可,时间点恰逢刚刚完成最新一轮融资,宣布的时机耐人寻味。 Redis 协议调整,对云计算厂商的影响 Redis 协议调整听起来可能没什么,但在开源项目领域是一大问题。这并不是 Redis
    的头像 发表于 05-09 22:59 446次阅读
    <b class='flag-5'>Redis</b> 开源协议调整,我们怎么办?

    Redis开源版与Redis企业版,怎么选用?

    点击“蓝字”关注我们数以千计的企业和数以百万计的开发人员Redis开源版来构建应用程序。但随着用户数量、数据量和地区性的增加,成本、可扩展性、运营和可用性等问题也随之而来。Redis企业版
    的头像 发表于 04-04 08:04 1101次阅读
    <b class='flag-5'>Redis</b>开源版与<b class='flag-5'>Redis</b>企业版,怎么选用?

    数据安全没保障?GaussDB(for Redis) 为你保驾护航

    未知的 key,实际上可能面临数据库信息丢失和记录篡改的风险。 作为一重视技术的团队,我们始终将用户信息安全和使用体验放在第一位。对于这次用户使用开源 Redis 遇到的问题,我们盘点了 GaussDB(for Redis)精
    的头像 发表于 03-28 22:09 686次阅读
    数据安全没保障?GaussDB(for <b class='flag-5'>Redis</b>) 为你保驾护航

    GaussDB(for Redis) 特性揭秘:多租户管理

    级鉴权能力,即可约束每个账号可访问的数据库(DB)范围,避免误操作其他租户数据。该特性可以帮助企业在共享 Redis 实例的情况下,保护不同租户的数据安全,为企业的开发和管理提供便利。 哪些用户需要使用多租户功能? 多租户是数据库用户刚需的一功能。例如,企业中有两
    的头像 发表于 03-28 22:06 756次阅读
    GaussDB(for <b class='flag-5'>Redis</b>) 特性揭秘:多租户管理

    GaussDB(for Redis) 特性揭秘:大 key 治理

      从 DBA 的视角看,大 Key 无疑是引起 Redis 线上问题的常见原因。为了解决大 Key 隐患,业务首先要遵守合理的开发规范,减少大 Key 的产生和访问依赖。但有时大 Key 是在程序
    的头像 发表于 03-28 22:06 674次阅读
    GaussDB(for <b class='flag-5'>Redis</b>) 特性揭秘:大 key 治理

    GaussDB(for Redis) 游戏实践:玩家下线行为上报

    为保护未成年人的身心健康,2007 年国家推出网络游戏防沉迷系统,对未成年人的游戏时间进行限制,游戏厂家需要及时感知用户的下线时间并上报。Redis 是游戏数据库重要选型之一,在基于开源 Redis
    的头像 发表于 03-28 22:03 531次阅读

    新版 Redis 不再“开源”,对使用者都有哪些影响?

    2024 年 3 月 20 日,Redis Labs 宣布从 Redis 7.4 开始,将原先比较宽松的 BSD 源码使用协议修改为 RSAv2和 SSPLv1协议。该变化意味着 Redis
    的头像 发表于 03-27 22:30 507次阅读
    新版 <b class='flag-5'>Redis</b> 不再“开源”,对使用者都有哪些影响?

    Redis实现分布式多规则限流的方式介绍

    市面上很多介绍 Redis 如何实现限流的,但是大部分都有一缺点,就是只能实现单一的限流,比如 1 分钟访问 1 次或者 60 分钟访问 10 次这种,但是如果想一接口两种规则都需要满足呢,我们的项目又是分布式项目,应该如何
    的头像 发表于 02-26 10:07 515次阅读
    <b class='flag-5'>Redis</b>实现分布式多规则限流的方式介绍

    Redis官方搜索引擎来了,性能炸裂!

    RediSearch 是一 Redis 模块,为 Redis 提供查询、二级索引和全文搜索功能。
    的头像 发表于 02-21 10:01 2407次阅读
    <b class='flag-5'>Redis</b>官方搜索引擎来了,性能炸裂!

    MongoDB和Redis的技术特性

    Redis作为一高性能的内存数据存储系统,能够提供快速的缓存机制,从而帮助应用承受高并发请求,显著提高系统响应速度和吞吐量。这与国内互联网公司推崇的快速迭代和高用户并发量的特点非常契合。
    的头像 发表于 02-01 11:42 514次阅读
    MongoDB和<b class='flag-5'>Redis</b>的技术特性

    Redis7单线程与多线程详解

    主要是指Redis的网络IO和键值对读写是由一线程来完成的。
    的头像 发表于 01-16 17:33 1866次阅读
    <b class='flag-5'>Redis</b>7单线程与多线程详解

    Redis为LangChain定制AI代理——OpenGPTs

    OpenAI最近推出了OpenAIGPTs——一构建定制化AI代理的无代码“应用商店”,随后LangChain开发了类似的开源工具OpenGPTs。OpenGPTs是一款低代码的开源框架,专用
    的头像 发表于 01-13 08:03 852次阅读
    用<b class='flag-5'>Redis</b>为LangChain定制AI代理——OpenGPTs