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

仿克米设计网站刚刚西安发布重要通知

仿克米设计网站,刚刚西安发布重要通知,建设网站建设投标网1249中官网词,上线了免费建网站我们就拿购物车举例子 现在有5个东西免费送&#xff0c;我们只能选择1个 例如 可乐 美年达 香蕉 苹果 薯片 我们选择后就放进redis里面 然后我们不能选重复&#xff0c;只能选不同 Lua脚本 我们redis使用lua脚本的时候&#xff0c;会传两个参数进去 一个是List<Strin…

我们就拿购物车举例子

现在有5个东西免费送,我们只能选择1个

例如 可乐 美年达 香蕉 苹果 薯片

我们选择后就放进redis里面

然后我们不能选重复,只能选不同

Lua脚本

我们redis使用lua脚本的时候,会传两个参数进去

一个是List<String>类型,一个是Object【】类型

KEYS【】对应的是List类型       ARGV【】对应的是Object【】类型

-- 购物车的东西是一样的,不需要修改
if (redis.call('get', KEYS[1]) == ARGV[1]) thenreturn 0
elseif (redis.call('get', KEYS[1]) ~= '') then-- 购物车的东西是不一样的,需要修改-- 先删除redis.call('del', KEYS[1])--然后重新设置购物车redis.call('set', KEYS[1], ARGV[1])
elseif (redis.call('get', KEYS[1]) == '') then--购物车为空,直接添加redis.call('set', KEYS[1], ARGV[1])
endreturn 0

静态代码块读取Lua脚本,减少IO流

案例

我们首先往购物车里面添加苹果

然后使用execute()方法调用Lua脚本

然后传参数进去

此时我们的lua脚本用的是ARGV【1】

对应的是香蕉

我们使用后,发现redis里面变成香蕉了

如果我们像变成其他,那么在lua脚本中的ARGV【】参数里面改数字就好了

测试类代码

package com.example.admin;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;import java.util.ArrayList;
import java.util.List;@SpringBootTest
public class RedisTest {//为了防止每次加载都读取lua文件产生大量IO流,所以我们弄成静态代码块直接就读取好
private static final DefaultRedisScript UNLOCK_SCKIP;
static {UNLOCK_SCKIP=new DefaultRedisScript<>();UNLOCK_SCKIP.setLocation(new ClassPathResource("unlock.lua"));
}@AutowiredStringRedisTemplate stringRedisTemplate;@Test
void add(){stringRedisTemplate.opsForValue().set("购物车", "苹果");}@Testvoid change(){//苹果,香蕉,可乐,美年达,薯片List<String> list=new ArrayList<>();list.add("购物车");
//调用LUA脚本stringRedisTemplate.execute(UNLOCK_SCKIP,list,"香蕉","苹果","可乐","美年达","薯片");}}

Lua脚本实现限流操作

这个是lua脚本


-- 设置用户访问频率限制的参数
local username = KEYS[1]
local timeWindow = tonumber(ARGV[1]) -- 时间窗口,单位:秒-- 构造 Redis 中存储用户访问次数的键名
local accessKey = "short-link:user-flow-risk-control:" .. username-- 原子递增访问次数,并获取递增后的值
local currentAccessCount = redis.call("INCR", accessKey)-- 设置键的过期时间
redis.call("EXPIRE", accessKey, timeWindow)--返回当前次数
return currentAccessCount

因为我们要使用到lua脚本的返回值

所以我们要setResultType()来设置我们的返回值是String类型

这样子才能成功拿到返回值,亲测如果不设置,那么我们拿到的返回值就是为null

测试

测试类代码

package com.example.admin;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;import java.util.ArrayList;
import java.util.List;@SpringBootTest
public class RedisTest {//为了防止每次加载都读取lua文件产生大量IO流,所以我们弄成静态代码块直接就读取好
private static final DefaultRedisScript UNLOCK_SCKIP;private static final DefaultRedisScript INCREMENT;
static {UNLOCK_SCKIP=new DefaultRedisScript<>();UNLOCK_SCKIP.setLocation(new ClassPathResource("unlock.lua"));INCREMENT=new DefaultRedisScript<>();INCREMENT.setLocation(new ClassPathResource("Increment.lua"));//要加上这个,因为lua脚本的返回值是String类型INCREMENT.setResultType(String.class);}@AutowiredStringRedisTemplate stringRedisTemplate;@Testvoid increment(){List<String> list =new ArrayList<>();list.add("KIRA");for (int i = 0; i < 15; i++) {Object result = stringRedisTemplate.execute(INCREMENT,list,"10");System.out.println(result);if((Long)result>10L)System.out.println("超出阈值,暂停一会然后重试");}}@Test
void add(){stringRedisTemplate.opsForValue().set("购物车", "苹果");}@Testvoid change(){//苹果,香蕉,可乐,美年达,薯片List<String> list=new ArrayList<>();list.add("购物车");
//调用LUA脚本stringRedisTemplate.execute(UNLOCK_SCKIP,list,"香蕉","苹果","可乐","美年达","薯片");}}

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

相关文章:

  • 不动产网站建设云主机 网站 多个二级域名 seo优化
  • 怎么建立一个网站链接网站建设空间使用标准
  • 深圳高端网站制作费用物联网的含义
  • 学做网站要多少钱简述网站建设与维护
  • 怎么把网站扒下来劳务公司注册需要什么条件
  • 核工业西南建设集团有限公司网站免费图片设计
  • spark怎么做网站数据库地方网站做相亲赢利点在哪
  • 婚庆网站建设总结seo零基础入门教程
  • 网站规划的基本原则长宁区公司网站建设
  • 扬州鼎盛开发建设有限公司网站网站后台如何添加附件
  • 免费的网站模板哪里有重庆网站建设夹夹虫公司.可信
  • lovefort表白网站制作优化服务
  • 网站制作 中企动力公司宿迁公司注册
  • 天马网络网站uniapp跳转内部页面
  • 服务器网站建设流程图网站建设开发心得
  • 深圳实力网站建设wordpress扫码付费
  • 企业网站推广方案在哪里软件工作室网站模板
  • 全国做网站最好的公司有哪些梦想小镇旅游官方网站建设
  • 唯品会一家做特卖的网站清远新闻最新
  • 苏州建设网站教程徐州列表网
  • 边坝网站制作现在注册公司需要什么条件
  • 什么类型的公司需要做建设网站的杭州10大软件开发公司
  • 淘宝联盟自建网站教程wordpress 首页重定向
  • 西安微信商城网站设计国外家居设计网站
  • 做网站要做相应的app吗新媒体运营需要哪些技能
  • 南昌网站建设方案外包北京做网站哪家公司好
  • 淘宝客做网站推广浅谈高校门户网站建设的规范标准
  • 企业建站用什么软件西宁电商网站制作公司
  • 常熟网站建设icp备案太仓企业网站建设
  • 用vue做网站圣辉友联北京网站建设公司