1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
@Component @Slf4j public class BloomTool {
@Autowired private RedisTemplate redisTemplate;
public Boolean init(String key, String rate, String size) { try { String script = "return redis.call('bf.reserve', KEYS[1], ARGV[1], ARGV[2])"; DefaultRedisScript<String> defaultRedisScript = new DefaultRedisScript<String>(); defaultRedisScript.setResultType(String.class); defaultRedisScript.setScriptSource(new StaticScriptSource(script)); String[] argv = new String[]{rate,size}; String result = (String) redisTemplate.execute(defaultRedisScript, Collections.singletonList(key), argv); if (Objects.equals(result, "OK")) { return true; } }catch (RedisSystemException redisSystemException){ log.error("{}",redisSystemException.getMessage()); } return false; }
public Boolean add(String key, String value) { String script = "return redis.call('bf.add', KEYS[1], ARGV[1])"; return lua(script, key, value); }
public Boolean exists(String key, Object value) { String script = "return redis.call('bf.exists', KEYS[1], ARGV[1])"; return lua(script, key, value); }
private Boolean lua(String script, String key, Object value) { DefaultRedisScript<Long> defaultRedisScript = new DefaultRedisScript<Long>(); defaultRedisScript.setResultType(Long.class); defaultRedisScript.setScriptSource(new StaticScriptSource(script)); Long result = (Long) redisTemplate.execute(defaultRedisScript, Collections.singletonList(key), value); if (Objects.equals(result, 1L)) { return true; } return false; }
}
|