写点什么

java 开发之 Redis 的使用规范

  • 2022 年 1 月 18 日
  • 本文字数:1344 字

    阅读完需:约 4 分钟

Redis 使用规范围绕如下几个纬度展开:

  • 键值对使用规范;

  • 命令使用规范;

  • 数据保存规范;

  • 运维规范。

键值对使用规范

有两点需要注意:

  1. 好的 key 命名,才能提供可读性强、可维护性高的 key,便于定位问题和寻找数据。

  2. value 要避免出现 bigkey、选择高效的序列化和压缩、使用对象共享池、选择高效恰当的数据类型。



key 命名规范

规范的 key 命名,在遇到问题的java培训时候能够方便定位。Redis 属于 没有 Scheme 的 NoSQL 数据库。

所以要靠规范来建立其 Scheme 语意,就好比根据不同的场景我们建立不同的数据库。

敲黑板

把「业务模块名」作为前缀(好比数据库 Scheme),通过「冒号」分隔,再加上「具体业务名」。

这样我们就可以通过 key 前缀来区分不同的业务数据,清晰明了。

总结起来就是:「业务名:表名:id」

key 是字符串,底层的数据结构是 SDS,SDS 结构中会包含字符串长度、分配空间大小等元数据信息。

字符串长度增加,SDS 的元数据也会占用更多的内存空间。

所以当字符串太长的时候,我们可以采用适当缩写的形式。

不要使用 bigkey

因为 Redis 是单线程执行读写指令,java培训如果出现 bigkey 的读写操作就会阻塞线程,降低 Redis 的处理效率。

bigkey 包含两种情况:

  • 键值对的 value 很大,比如 value 保存了 2MB 的 String 数据;

  • 键值对的 value 是集合类型,元素很多,比如保存了 5 万个元素的 List 集合。

虽然 Redis 官方说明了 key 和 string 类型 value 限制均为 512MB。最新 Redis 面试题整理好了,点击 Java 面试库小程序在线刷题。

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

我们还可以通过 gzip 数据压缩来减小数据大小:

/** * 使用gzip压缩字符串 */public static String compress(String str) {    if (str == null || str.length() == 0) {        return str;    }
try (ByteArrayOutputStream out = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(out)) { gzip.write(str.getBytes()); } catch (IOException e) { e.printStackTrace(); } return new sun.misc.BASE64Encoder().encode(out.toByteArray());}
/** * 使用gzip解压缩 */public static String uncompress(String compressedStr) { if (compressedStr == null || compressedStr.length() == 0) { return compressedStr; } byte[] compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr);; String decompressed = null; try (ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayInputStream in = new ByteArrayInputStream(compressed); GZIPInputStream ginzip = new GZIPInputStream(in);) { byte[] buffer = new byte[1024]; int offset = -1; while ((offset = ginzip.read(buffer)) != -1) { out.write(buffer, 0, offset); } decompressed = out.toString(); } catch (IOException e) { e.printStackTrace(); } return decompressed;}

复制代码


集合类型

如果集合类型的元素的确很多,我们可以将一个大集合拆分成多个小集合来保存。

文章来源 Java 技术栈

用户头像

关注尚硅谷,轻松学IT 2021.11.23 加入

还未添加个人简介

评论

发布
暂无评论
java开发之Redis的使用规范