/// <summary> /// Determines if all the bits are set in the bloom filter. /// </summary> /// <param name="key"> /// The key. /// </param> /// <param name="bits"> /// The bits. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> private static bool AllBitsSet(string key, RedisValue[] bits) { RedisKey[] keyArgs = { key }; RedisValue[] valueArgs = new RedisValue[bits.Length]; bits.CopyTo(valueArgs, 0); RedisResult result = SharedCache.Instance.GetWriteConnection(key) .GetDatabase(SharedCache.Instance.Db) .ScriptEvaluate(BloomFilter.AllBitsSetHash, keyArgs, valueArgs); return null != result && !result.IsNull && 1L == (long)result; }
/// <summary> /// Determines if all the bits are set in the bloom filter. /// </summary> /// <param name="key"> /// The key. /// </param> /// <param name="bits"> /// The bits. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> private static async Task<bool> AllBitsSetAsync(string key, RedisValue[] bits) { RedisKey[] keyArgs = { key }; RedisValue[] valueArgs = new RedisValue[bits.Length]; bits.CopyTo(valueArgs, 0); Task<RedisResult> result = SharedCache.Instance.GetWriteConnection(key) .GetDatabase(SharedCache.Instance.Db) .ScriptEvaluateAsync(BloomFilter.AllBitsSetHash, keyArgs, valueArgs); if (null == result) { return false; } RedisResult value = await result; return !value.IsNull && 1L == (long)value; }
/// <summary> /// Sets bits in the bloom filter. /// </summary> /// <param name="key"> /// The key. /// </param> /// <param name="bits"> /// The bits. /// </param> /// <param name="value"> /// The value. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> private static Task SetBitsAsync(string key, RedisValue[] bits, bool value) { RedisKey[] keyArgs = { key }; RedisValue[] valueArgs = new RedisValue[bits.Length + 1]; valueArgs[0] = value; bits.CopyTo(valueArgs, 1); return SharedCache.Instance.GetWriteConnection(key) .GetDatabase(SharedCache.Instance.Db) .ScriptEvaluateAsync(BloomFilter.SetMultipleBitsHash, keyArgs, valueArgs); }