当前位置: 首页 > news >正文

最新电子产品网站模板网站建设公司 腾佳

最新电子产品网站模板,网站建设公司 腾佳,泛解析对网站的影响,深圳营销型网站建设公司java redis 命令Redis是一个数据存储#xff0c;支持190多个文档化命令和450多个命令排列。 社区积极支持Redis开发#xff1b; 每个主要的Redis版本都附带新命令。 今年#xff0c;Redis向第三方供应商开放#xff0c;以开发可扩展Redis功能的模块。 对于客户端开发人员和… java redis 命令 Redis是一个数据存储支持190多个文档化命令和450多个命令排列。 社区积极支持Redis开发 每个主要的Redis版本都附带新命令。 今年Redis向第三方供应商开放以开发可扩展Redis功能的模块。 对于客户端开发人员和Redis用户而言命令的增长以及对即将发布的模块的跟踪是一项挑战。 命令增长 对于客户端库Redis中的命令增长是一项具有挑战性的业务。 多个客户端公开一个类型化的API该API为每个Redis API调用声明一个方法函数签名。 静态声明对于使用很有帮助但是大量的Redis命令使用大量方法签名来污染客户端。 某些命令可能以不同的方式执行从而影响需要附加签名的响应类型 ZREVRANGE ZREVRANGE … WITHSCORES 。 让我们仔细看看一些方法签名 重新发行 # Get the values of all the given hash fields. # # example # redis.hmget(hash, f1, f2)def hmget(key, *fields, blk) 杰迪斯 public ListString hmget(final String key, final String... fields) 生菜 ListV public ListK hmget(K key, K... fields) 声明的方法为开发人员提供类型安全和文档但它们同时是静态的。 Redis引入新命令后客户端供应商必须更改API否则新命令将不可用。 大多数Redis客户端公开客户端调用API来执行自定义命令来解决此问题 重新发行 client.call([:hmget, key] fields) 杰迪斯 final byte[][] params …; jedis.sendCommand(HMGET, params); 生菜 lettuce.dispatch(CommandType.HMGET, new ValueListOutput(codec), new CommandArgs(codec).addKey(key).addKey(field)); 吉迪普斯 rce.accept(client - client.sendCmd(Cmds.HMGET, hash, field1, field2, …)); 其他客户端例如node_redis基于Redis命令创建函数原型。 这是对静态API的改进因为它使API具有一定的灵活性。 构造Redis命令需要有关其请求和响应结构的知识。 这些知识被记录在调用代码内部的某个位置。 这很方便因为您将其放在需要代码的地方但是它也有一些缺点。 由于自定义命令是从方法内部运行的因此自定义命令需要额外的精力才能重用。 不需要在许多客户端上找到的典型方法签名。 如果不遵循API组件方法这种方法会使自省更具挑战性。 这是因为所有自定义命令使用不同的参数调用相同的方法。 具有固定参数列表的静态方法声明的性质仅限于仅接受提供的参数。 方法调用的上下文控件不能通过该方法应用。 例如Lettuce提供了一个同步API该API可以控制所有命令的命令超时但不能控制命令调用级别。 让我们通过动态API处理Redis。 动态API 动态API是编程接口因为它们遵循约定因此具有一定的灵活性。 从Resteasy客户端代理或Spring Data的查询派生中可以知道动态API。 两者都是生活在用户区代码中的接口。 Resteasy / Spring Data检查接口并通过提供Java代理来实现这些接口。 这些接口代理上的方法调用将被拦截检查并转换为相应的调用。 让我们看一下这对于Java和Redis如何工作 一个简单的命令界面 public interface MyRedisCommands {ListString hmget(String key, String... values);} 上面的接口声明了一个方法 ListString hmget(String key, String... fields) 。 我们可以从该声明中得出某些信息 它应该同步执行-结果类型中没有声明异步或React性包装器 Redis命令方法返回一个String List -告诉我们有关命令结果的期望因此我们期望使用Redis数组并将每个项目转换为字符串 该方法名为hmget 。 因为这是唯一可用的详细信息所以我们假设命令名为hmget 。 定义了两个参数 String key和String... values 。 这告诉我们参数的顺序及其类型。 尽管Redis除了批量字符串外不接受任何其他参数类型但我们仍然可以对参数进行转换-我们可以从声明的类型中推断出它们的序列化。 从上面调用的命令如下所示 commands.hmget(key, field1, field2); 并转换为Redis命令 HMGET key field1 field2 接口上的声明带有两个有趣的属性 有一个方法签名。 尽管这是一个显而易见的事实但它是一个常见的可执行文件。 它允许通过搜索此方法的引用来快速分析呼叫者。 在方法签名上方有一个空格理想用于文档目的。 多种执行模型 public interface MyRedisCommands {ListString hmget(Timeout timeout, String key, String... values);RedisFutureListString mget(String... keys);FluxString smembers(String key);} 动态API允许返回类型的差异。 让我们看看这如何影响我们可以从其返回类型派生的事物。 您已经知道hmget以阻塞方式执行。 但是等等那Timeout参数是什么 这是一个自己的参数类型用于在调用级别上声明超时。 基础执行从参数应用超时而不再是在连接级别设置的默认值。 mget声明一个RedisFuture返回类型该返回类型包装String的List 。 RedisFuture是用于异步执行的包装器类型它返回一个句柄以在稍后阶段执行同步或方法链接。 该方法可以异步执行。 smembers使用String Flux 。 基于返回类型我们可以期待两个属性 Flux是一个React式执行包装器它将延迟执行直到订阅者订阅Flux为止。 List类型消失了因为Flux可以发出0..N项目因此我们可以决定进行流式响应执行。 命令结构 public interface MyRedisCommands {ListString mget(String... keys);Command(MGET)RedisFutureListString mgetAsync(String... keys);CommandNaming(strategy DOT)double nrRun(String key, int... indexes)Command(NR.OBSERVE ?0 ?1 - ?2 TRAIN)ListInteger nrObserve(String key, int[] in, int... out) } Java要求方法的名称或参数类型有所不同。 字节码级别仅支持返回类型的差异但在代码中编写方法时则不支持。 如果要声明一个同步执行的方法和一个采用相同参数异步执行的方法该怎么办 您需要指定其他名称。 但是这是否与先前解释的名称派生冲突 是的 仔细看看mget和mgetAsync 。 两种方法均旨在同步和异步执行MGET命令。 mgetAsync带有Command注释该命令为命令提供命令名称并覆盖该方法否则将命名为MGETASYNC的假设。 Redis对模块开放。 每个模块都可以通过提供新命令来扩展Redis其中命令模式遵循PREFIX。COMMAND准则。 但是Java方法名称中不允许使用点。 让我们使用CommandNaming(strategy DOT)将不同的命名策略应用于nrRun 。 骆驼驼峰字母大小写的变化通过在各个命令段之间放置一个点来表示我们很NR.RUN从Neural Redis运行NR.RUN 。 一些命令带有更复杂的语法该语法不允许仅连接参数。 看一下NR.OBSERVE 。 它由三个静态部分组成中间部分之间有参数。 该命令结构以类似命令的语言表示。 NR.OBSERVE ?0 ?1 - ?2 TRAIN将命令描述为字符串并为参数添加索引引用。 命令中的所有字符串部分都是常量参数引用将替换为实际参数。 结论 将动态API应用于Redis可以将视图转移到新的视角。 它可以为用户提供简化的自定义命令方法而不会牺牲可重用性。 方法声明的性质为调用者的文档记录和自省创造了条件。 动态API也对使用RESP的其他应用程序例如Disque或Tile38也有利 。 可从Sonatype的OSS Snapshot存储库https://oss.sonatype.org/content/repositories/snapshots/通过生菜获得实验性实现 dependencygroupIdbiz.paluch.redis/groupIdartifactIdlettuce/artifactIdversion5.0.0-dynamic-api-SNAPSHOT/version /dependency 使用RedisCommandFactory RedisCommandFactory factory new RedisCommandFactory(connection);TestInterface api factory.getCommands(TestInterface.class); String value api.get(key);public interface TestInterface {String get(String key);Command(GET)byte[] getAsBytes(String key); }参考 Command 命令注释通过使用类似命令的语言来指定命令名称或整个命令结构。 CommandNaming 用于指定命令命名策略的注释。 Timeout 包含超时的值对象。 RedisFuture 未来结果句柄。 Flux React堆执行的Project Reactor发布者发出0..N项目。 翻译自: https://www.javacodegeeks.com/2016/10/command-interfaces-approaching-redis-dynamic-apis-java.htmljava redis 命令
http://www.zqtcl.cn/news/249558/

相关文章:

  • 西安行业网站株洲高端网站建设
  • 优化网站流量商城网站建设软件
  • dw属于什么的网页制作工具网络建站优化科技
  • 百度网站首页的设计理念南京高新区规划建设局网站
  • 虚拟机做实验的网站网站以个人名义备案
  • 自定义表单网站网站建设营销型号的区别
  • 有个网站做彩盒的贵阳网站建设托管
  • 网站制作属于什么专业做网站需要什么配置服务器吗
  • 网站开发学习培训广州网站优化关键词公司
  • 毕节金海湖新区城乡建设局网站企业网站的步骤
  • 网站后台设计教程网站建设判断题
  • 珠海网站建设 金蝶天元建设集团有限公司李华
  • 海安市建设局网站成都官网seo技术
  • 网站建设策划书结束语wordpress付费版
  • 进口网站建设做网站用什么格式的图片
  • 青海省住房和城乡建设部网站进入网站空间
  • 做公司简介的开源网站企业seo多少费用
  • 学校网站建设工作方案昆明做网站词排名优化
  • 镇江企业做网站针对人群不同,网站做细分
  • 个人单页网站建设台州网站建设惠店
  • 专做婚礼logo的网站做搜狗pc网站快速排
  • 北京网站建设公司分享网站改版注意事项做网站需要多大空间
  • 主机网站建设制作天津西青区天气预报
  • 网站没有内容可以备案吗横向网站源码
  • 做的网站浏览器提示不安全站优化
  • dede移动端网站源码电子商务网站建设开题报告
  • 做网站价格多少优质做网站哪家好
  • 网站建设及推广服务的合同范本留言网站建设的报告
  • 工程师招聘网站做网站需要公司资质吗
  • 苏州模板网站建站开网店如何运营和推广