当前位置: 首页 > 后端技术 > Java

java开发的Redis使用规范

时间:2023-04-02 01:10:03 Java

Redis使用规范围绕以下纬度展开:键值对使用规范;命令使用规范;数据存储规范;操作和维护规范。使用键值对有两点需要注意:好的键命名可以提供一个可读性强、可维护性高的键,便于定位问题和查找数据。Value要避免bigkey,选择高效的序列化和压缩,使用对象共享池,选择高效合适的数据类型。keynamingspecification标准key命名,在java训练中遇到问题可以方便定位。Redis是一个没有Scheme的NoSQL数据库。所以需要依赖规范来建立它的Scheme语义,就像我们根据不同的场景建立不同的数据库一样。敲黑板,以“业务模块名称”为前缀(如数据库方案),以“冒号”隔开,再加上“具体业务名称”。这样我们就可以通过key前缀来区分不同的业务数据,一目了然。总结一下:“业务名:表名:id”键是一个字符串,底层数据结构是SDS,SDS结构中会包含字符串的长度、分配的空间大小等元数据信息。随着字符串长度的增加,SDS的元数据也会占用更多的内存空间。所以当字符串过长时,我们可以使用适当的缩写形式。不要使用bigkey,因为Redis是单线程执行读写指令。如果有bigkey的读写操作,线程就会被阻塞,降低Redis的处理效率。bigkey包括两种情况:键值对的值很大,比如值存储了2MB的String数据;键值对的值是一个有很多元素的集合类型,比如一个存储了50000个元素的List集合。虽然Redis官方说key和string类型的值限制都是512MB。最新Redis面试题整理完毕,点击Java面试库小程序在线刷题。为防止网卡流量和慢查询,string类型控制在10KB以内,hash、list、set、zset元素个数不超过5000个。我们还可以通过gzip数据压缩来减少数据大小:/**使用gzip压缩字符串*/publicstaticStringcompress(Stringstr){if(str==null||str.length()==0){returnstr;}try(ByteArrayOutputStreamout=newByteArrayOutputStream();GZIPOutputStreamgzip=newGZIPOutputStream(out)){gzip.write(str.getBytes());}catch(IOExceptione){e.printStackTrace();}返回新太阳.misc.BASE64Encoder().encode(out.toByteArray());}/**使用gzip解压*/publicstaticStringuncompress(StringcompressedStr){if(compressedStr==null||compressedStr.length()==0){returncompressedStr;}byte[]compressed=newsun.misc.BASE64Decoder().decodeBuffer(compressedStr);;Stringdecompressed=null;try(ByteArrayOutputStreamout=newByteArrayOutputStream();ByteArrayInputStreamin=newByteArrayInputStream(压缩);GZIPInputStreamginzip=newGZIPInputStream(in);){byte[]buffer=newbyte[1024];int偏移量=-1;while((offset=ginzip.read(buffer))!=-1){out.write(buff呃,0,偏移量);}decompressed=out.toString();}catch(IOExceptione){e.printStackTrace();}returndecompressed;}集合类型如果集合类型有很多元素,我们可以把一个大集合拆分成多个小集合保存文章来源Java技术栈