kye

从使用角度分析GET和POST的差异性 应用场景

坚强是说给别人听的谎言 提交于 2021-02-01 09:19:27
以前只会用GET和POST,但有时候就会傻傻分不清什么时候该用GET,什么时候该用POST,花了一段时间把这两个东西给琢磨了一遍,特此记录一下。 这里着重讲一下GET和POST一些细节。在讲两者传输区别之前,一个需要注意的就是: 很多人一提到地址栏的传参方式,就联想到GET,其实不管是GET还是POST都可以通过地址URL传递参数,因为参数属于URL的一部分,服务端只要能获取URL就能获取其中的参数。很多浏览器也对URL传参的大小做了限制,一般是2K字节数,很多服务器最多也只处理64K的URL。 GET请求: HTTP协议规定GET请求一般是将数据放在http的header部分,由于header本身只是作为一个标识,并不适合传输大量的数据,所以最好只用于传递一些关键参数信息。GET可以被浏览器缓存,很适合一些请求资源应用场景。 POST请求: HTTP协议规定POST请求一般是将数据放在http的body部分。这样不会受到传输数据的大小限制,理论上可以传输极大的数据包。不过POST请求作为不能被浏览器缓存 HTTP对通过body部分传输数据提供很多种(也就是请求头部对应的Content-Type属性),由于太多,就不一一举例了,就拿postman提供的几种方式作说明: multipart/form-data: 以表单的方式 上传文件 时就是使用的这种方式。 application

Redis实现分布式锁

只谈情不闲聊 提交于 2021-01-01 07:10:17
import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.concurrent.TimeUnit; /** * Redis分布式锁 */ @Component @Slf4j public class RedisLock { @Resource private StringRedisTemplate stringRedisTemplate; private static final long EXPIRE = 30 * 1000L; // 失效时间 private static final long TIMEOUT = 10 * 1000L; // 等待时间 /** * 分布式加锁 * @param key * @param value requestTime + expireTime * @return */ public boolean secKilllock

简易的Redis分布式事务锁

梦想与她 提交于 2020-08-10 18:37:30
0.背景   在物联网微服务时代,面对源源不断的数据,难免会遇到需要一把分布式事务锁的情况,今天,我们学习一下Redis分布式事务锁。 1.用于上锁的类 RedisLock.java public class RedisLock { private static final Logger log = LoggerFactory.getLogger(RedisLock.class); @Resource(name = "deviceStringRedisTemplate") private StringRedisTemplate redisTemplate; /** * redis键过期时间,毫秒为单位 */ private static final long EXPIRE = 5 * 1000L; /** * 尝试获取锁的超时时间,不能一直尝试获取锁,空耗资源。 */ private static final long TIMEOUT = 10 * 1000L; public boolean lock(String key, String value) { log.info("尝试获取锁 kye:{},value:{}", key, value); //请求锁时间 long requestTime = System.currentTimeMillis(); while (true)

redis 的 INCR key 实现简单的访问量统计

和自甴很熟 提交于 2020-04-22 16:26:31
redis 的 INCR key 实现简单的访问量统计 redis INCR 文档 文档 思路 例用redis的incr 在详情页面写一个方法,对访问进行自增统计。 获取incr 的所有key,进行排序展示 这里需要注意,取所有的key 的时候,不能用keys ,因为redis 单线程的,大量的遍历kye,可能会导致redis出现阻塞,所以我们使用scan 代码 存 /** * Redis Incr 自增 * @param serviceName * @param id */ public void redisCount(String serviceName,String id){ boolean flag = redisTemplate.hasKey(serviceName +":"+ id); //不存在 if (!flag){ GenericToStringSerializer genericToStringSerializer = new GenericToStringSerializer(Object.class); redisTemplate.setValueSerializer(genericToStringSerializer); redisTemplate.opsForValue().set(serviceName +":"+ id, 1); } else {