摘要:
1.订单与支付 1.1问题背景 假如有一个快递下单系统,在寄快递时,客户下单并支付费用,支付后会生成验货码用于商家扫描入库,其支付和退款流程如下: 支付:创建业务订单 > 创建支付订单 > 唤起支付收银台 > 输入密码 > 进入支付回调处理 > 更改支付状态及业务状态 退款:创建退款订单 > 发起退 阅读全文
摘要:
1.前言 在项目中,有些接口是无需安全验证即可访问。既然直接暴露出来,就意味着不安全,就会面临恶意访问,盗刷流量等问题。面对恶意访问,往往是通过程序对接口发送大量请求,轻者接口响应缓慢,重者造成服务器宕机,使得服务不能正常使用。 最常见的就是发送短信验证码,在用户注册时可发送短信验证码验证,在登录时 阅读全文
摘要:
1.前言 Redisson是Redis官方推荐的Java版的Redis客户端。底层使用netty框架,并提供了与java对象相对应的分布式对象、分布式集合、分布式锁和同步器、分布式服务等一系列的Redisson的分布式对象。 2.使用准备 1)导入依赖 <dependency> <groupId>o 阅读全文
摘要:
在使用redis作为缓存时,为提供查询数据和效率,优化也是必不可少的。 1.强化开发规范 1)不使用bigkey:即key对应的value的值不能太大。对于String类型,value超过10KB即为bigkey;对于非字符串类型,其元素超过5000个即为bigkey。 2)key命名优化:所有的k 阅读全文
摘要:
1.前言 redis作为一种非关系性数据库,常用来做缓存,不妨来了解下其key的过期策略。 过期字典:reids将所有过期的键值都放在一个字典中,而这个字典就叫做过期字典。 键空间:服务器中的每个数据库都由一个redis.h/redisDb结构表示,其中redisDb结构的dict字典保存了数据库中 阅读全文
摘要:
在实际的生活中,对于敏感数据,都不会轻易展示出来。如在诸多应用中,手机号中间4位是*号,身份证号中出生信息是*号,那么这些数据都是在后端经过加密后返回给前端的。 1.手机号对中间4位加密 phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); 阅读全文
摘要:
对于某些特定的接口,为了防止数据碰撞等问题,可限制接口对同一IP在一段时间内的访问次数。本文使用注解方式: 1.导入需要的依赖 <!-- redis依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId> 阅读全文
摘要:
1.问题描述 在日常开发中,对于异常信息,通过会进行log打印,有时会接入到ELK,但需要注意细节问题。 用的最多的可能就是在类上加入@Slf4j注解,在可能异常的地方使用log.error("异常信息为:"+e)或log.error("异常信息为:{}", e.getMessage())打印错误信 阅读全文
摘要:
1.存储结构 对于下文中key使用:进行分隔,其实是一种分目录的方式,使用冒号分隔,形成目录。如article:readcount:223的目录如下图(使用Another Redis): 通过分目录,一目了然有分类,相同的分类则归纳在同一个目录下,而不至于看的是所有的key,找起来就特别麻烦。 2. 阅读全文
摘要:
在java中遇到多个字符串拼接时都会使用StingBuilder或StringBuffer,而java8提供了一个新的类StringJoiner。 StringJoiner是的StingBuilder升级版,用于构造由分隔符分隔的字符序列,并可选择性地从提供的前缀开始和以提供的后缀结尾。 下面来看两 阅读全文