在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

redis能够采用什么样的方式来实现限流

129次阅读
没有评论

共计 1815 个字符,预计需要花费 5 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章主要介绍 redis 能够采用什么样的方式来实现限流,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

目的:

实现访问频率限制

实现访问者 $ip 在一定的时间 $time 内只能访问 $limit 次

非脚本实现

private boolean accessLimit(String ip, int limit, int time, Jedis jedis) { boolean result = true; String key =  rate.limit:  + ip; if (jedis.exists(key)) { long afterValue = jedis.incr(key); if (afterValue   limit) { result = false; } } else { Transaction transaction = jedis.multi(); transaction.incr(key); transaction.expire(key, time); transaction.exec(); } return result; }

以上代码有两点缺陷

可能会出现竞态条件: 解决方法是用 WATCH 监控 rate.limit:$IP 的变动, 但较为麻烦; 以上代码在不使用 pipeline 的情况下最多需要向 Redis 请求 5 条指令, 传输过多.

Lua 脚本实现

Redis 允许将 Lua 脚本传到 Redis 服务器中执行, 脚本内可以调用大部分 Redis 命令, 且 Redis 保证脚本的原子性:

首先需要准备 Lua 代码: script.lua

--
-- Created by IntelliJ IDEA.
-- User: jifang
-- Date: 16/8/24
-- Time:  下午 6:11 -- local key =  rate.limit:  .. KEYS[1] local limit = tonumber(ARGV[1]) local expire_time = ARGV[2] local is_exists = redis.call(EXISTS , key) if is_exists == 1 then if redis.call(INCR , key)   limit then return 0 else return 1 end else redis.call(SET , key, 1) redis.call(EXPIRE , key, expire_time) return 1 end

Java

private boolean accessLimit(String ip, int limit, int timeout, Jedis connection) throws IOException { List String  keys = Collections.singletonList(ip); List String  argv = Arrays.asList(String.valueOf(limit), String.valueOf(timeout)); return 1 == (long) connection.eval(loadScriptString( script.lua), keys, argv); } //  加载 Lua 代码  private String loadScriptString(String fileName) throws IOException { Reader reader = new InputStreamReader(Client.class.getClassLoader().getResourceAsStream(fileName)); return CharStreams.toString(reader); }

Lua 嵌入 Redis 优势:

减少网络开销: 不使用 Lua 的代码需要向 Redis 发送多次请求, 而脚本只需一次即可, 减少网络传输; 原子操作: Redis 将整个脚本作为一个原子执行, 无需担心并发, 也就无需事务; 复用: 脚本会永久保存 Redis 中, 其他客户端可继续使用。

以上是“redis 能够采用什么样的方式来实现限流”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计1815字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 欧美精品一区二区蜜臀亚洲 | 韩国美女人成网站在线看看 | 6969视频 | 亚洲精品日韩中文字幕久久久 | 一本到视频在线 | 国产在线视频一区二区三区 | 亚洲热视频 | 人妻少妇中文字幕乱码 | 高清韩国a级特黄毛片 | 婷婷97狠狠的狠狠的爱 | 一级特黄高清完整大片 | 天堂免费在线视频 | 国产成人久久av免费 | 国产va在线观看免费 | 中文字幕一区二区三区永久 | 久久成人免费观看草草影院 | 国产精品午睡沙发系列 | 久久国产精品无码网站 | 无码精品国产dvd在线观看9久 | 91系列在线观看免费 | 久久免费小视频 | 日本爽爽爽爽爽爽在线观看免 | 白又丰满大屁股bbbbb | 欧美视频三区 | 一级福利视频 | 国产亚洲精品久久久久久无挡照片 | 四川少妇被弄到高潮 | 久久就是精品 | 美女色黄| 国产无套精品一区二区三区 | 免费黄色a级片 | 国产成人精品亚洲一区 | 国产白袜脚足j棉袜在线观看 | 日韩少妇激情一区二区 | 亚洲人成在线精品 | 很黄很色裸乳视频网站 | 国产综合无码一区二区辣椒 | 99热这里精品| 看免费的黄色片 | 国产午夜视频在线观看网站 | 亚洲人成网站色www 亚洲人成网站在线 |