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

长沙官网网站推广优化网站怎样防止攻击

长沙官网网站推广优化,网站怎样防止攻击,做网站去哪里找客户,seo蜘蛛屯前言 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻,只有一个客户端能持有锁。不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户…

前言

首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:

  1. 互斥性。在任意时刻,只有一个客户端能持有锁。
  2. 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。
  3. 具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。
  4. 加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。

实现

  • 首先引入jedis组件依赖,pom中添加如下配置:
        <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency>
  • 加锁代码
    private static final String LOCK_SUCCESS = "OK";/*** 该加锁方法仅针对单实例 Redis 可实现分布式加锁* 对于 Redis 集群则无法使用* 支持重复,线程安全** @param lockKey      加锁键* @param requestId    加锁客户端唯一标识* @param milliseconds 锁过期时间:此处使用的单位为 px-毫秒数,若需要单位为秒,则改用parms.ex(int seconds)* @return*/public Boolean tryLock(String lockKey, String requestId, long milliseconds) {SetParams parms = new SetParams();parms.px(milliseconds);return redisTemplate.execute((RedisCallback<Boolean>) redisConnection -> {Jedis jedis = (Jedis) redisConnection.getNativeConnection();String result = jedis.set(lockKey, requestId, parms);return LOCK_SUCCESS.equals(result);});}

第一个参数:加锁的key,当前没有锁(key不存在),那么就进行加锁操作,已有锁存在,不做任何操作。
第二个参数:为确保安全性,需要key和value都一致才会解锁。
第二个参数:(看代码注释)


  • 解锁代码
private static final Long RELEASE_SUCCESS = 1L;// if get(key) == value return del(key)private static final String RELEASE_LOCK_SCRIPT = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";/*** 与 tryLock 相对应,用作释放锁** @param lockKey   加锁键* @param requestId 加锁客户端唯一标识* @return*/public Boolean releaseLock(String lockKey, String requestId) {return redisTemplate.execute((RedisCallback<Boolean>) redisConnection -> {Jedis jedis = (Jedis) redisConnection.getNativeConnection();Object result = jedis.eval(RELEASE_LOCK_SCRIPT, Collections.singletonList(lockKey),Collections.singletonList(requestId));return RELEASE_SUCCESS.equals(result);});}

解锁的思路是使用eval()提交一个Lua脚本代码:首先获取锁对应的value值,检查是否与requestId相等,如果相等则删除锁(解锁)。
那为什么使用eval()?在eval命令执行Lua代码的时候,Lua代码将被当成一个命令去执行,直到eval命令执行完成,Redis才会执行其他命令。也就是说,这个操作满足原子性,保证了安全性。

http://www.yayakq.cn/news/832969/

相关文章:

  • 网站建设费的摊销期北京住房与城乡建设厅网站首页
  • 做条形图的网站百度网盘私人资源链接
  • 极品wordpress素材教程网站网站开发策划书怎么写
  • 网站后台管理 源码宁波怎么优化seo关键词
  • 网站名字大全泉州企业建站程序
  • 精神文明建设网站模板seo商学院
  • 手机摄影网站北京房山网站建设产品更新培训
  • wordpress没有文章导航appstore关键词优化
  • 免费注册网站流程网页小游戏修改器
  • 上海专业网站建设渠道福州网站建设需要多少钱
  • 莱芜民生网站石家庄seo霸屏
  • 牛商网营销型网站多少钱临沂网站制作方案
  • 乐清做网站建设公司网站搭建项目描述
  • 国家住房部和城乡建设部 网站首页通信管理局网站 备案
  • 惠州建设企业网站凡科送审平台学生不能登录
  • 五莲县财源建设网站手机网站底部广告代码
  • 路由器映射做网站稳定吗望城区网站建设
  • 宣武手机网站建设炫酷的企业网站模板免费下载
  • 营销型网站建设哪个好重庆手机网站推广报价
  • 云南新建设国际小学网站网页编辑器安卓版
  • 网站的排名与权重句容建设局网站
  • 西宁做网站制作的公司陕西免费网站建设
  • 开封做网站公司动漫网站开发优势
  • 长沙培训网站制作js网站记住密码怎么做
  • 安徽服饰网站建设用js来做网站
  • 建站快车的优点企业seo哪些公司好
  • 做外贸网站的效果怎么样学网站建设有什么用
  • 建自己的网站多少钱网站招商页面怎么做
  • 网站建设佰首选金手指二八上海建网站服务器
  • 市住房城乡建设部网站微信运营简历