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

吉林珠海网站建设wordpress投票评选

吉林珠海网站建设,wordpress投票评选,在深圳怎么进大公司网站,网站怎么做浏览量才会多本文已收录于专栏 《中间件合集》 目录 背景介绍概念说明原理说明解决穿透安装使用安装过程Redis为普通安装的配置方式Redis为Docker镜像安装的配置方式 具体使用控制台操作命令说明Spring Boot集成布隆过滤器 总结提升 背景介绍 布隆过滤器可以帮助我们解决Redis缓存雪崩的问题…本文已收录于专栏 《中间件合集》 目录 背景介绍概念说明原理说明解决穿透安装使用安装过程Redis为普通安装的配置方式Redis为Docker镜像安装的配置方式 具体使用控制台操作命令说明Spring Boot集成布隆过滤器 总结提升 背景介绍 布隆过滤器可以帮助我们解决Redis缓存雪崩的问题那什么是布隆过滤器、布隆过滤器又是如何使用如何解决缓存雪崩的问题的让我们带着这一系列的问题去详细了解布隆过滤器。 概念说明 布隆过滤器是一种用于快速判断一个元素是否属于一个集合的数据结构。它通常用于大规模数据集合中可以快速判断一个元素是否可能存在于集合中但不能确定一定存在。布隆过滤器的主要优点是占用内存少、查询速度快并且可以容忍一定的误判率。 原理说明 布隆过滤器由一个位数组和多个哈希函数组成。位数组通常初始化为0哈希函数用于将元素映射到位数组中的多个位置。当一个元素被加入到布隆过滤器中时它会被哈希函数映射到位数组的多个位置然后将这些位置的值设为1。当查询一个元素是否存在于布隆过滤器中时哈希函数会将元素映射到位数组的多个位置然后检查这些位置的值是否都为1如果有一个位置的值为0则可以确定元素一定不存在于集合中如果所有位置的值都为1则元素可能存在于集合中。   布隆过滤器的误判率取决于位数组的大小和哈希函数的数量。通常情况下误判率随着位数组大小的增加而减小但会占用更多的内存。因此使用布隆过滤器时需要根据实际情况权衡误判率和内存占用。 解决穿透 我们还可以在存储和缓存之前加⼀个布隆过滤器做⼀层过滤。布隆过滤器⾥会保存数据是否存在如果判断数据不存在就不会访问存储。 安装使用 安装过程 Redis为普通安装的配置方式 1、下载布隆过滤器这个插件 wget https://github.com/RedisLabsModules/rebloom/archive/v2.2.6.tar.gz2、解压文件 tar -zxvf v2.2.6.tar.gz3、编辑插件 # 到RedisBloom对应目录 cd /usr/local/redis/RedisBloom-2.2.6 # 编译插件 make4、Redis集成RedisBloom插件 # vim查看redis.conf vim /usr/local/redis/config/redis.conf # 在文件后面添加如下配置 loadmodule /usr/local/redis/RedisBloom-2.2.6/redisbloom.so5、配置完之后重启Redis即可。 Redis为Docker镜像安装的配置方式 1、创建文件夹以及配置文件用于挂在redis启动的后容器中的文件方便我们在容器外部操作redis的配置 mkdir data ##创建文件夹 touch redis.conf ## 创建文件2、在我们创建的redis.conf文件中添加一行配置loadmodule /data/RedisBloom-2.2.6/redisbloom.so 3、随后直接使用dokcer run命令进行启动 docker run -p 6379:6379 --name redis -v /root/redis/data:/data -v /root/redis/redis.conf:/etc/redis/redis.conf --restartalways --network host -d redis:5.0.7 redis-server /etc/redis/redis.conf这个命令是用于在 Docker 中运行 Redis 容器并进行一些配置。下面是对每个参数的解释 -p 6379:6379: 将 Docker 容器的端口 6379 映射到主机的端口 6379以便可以从主机访问 Redis 服务。–name redis: 指定容器的名称为 “redis”。-v /root/redis/data:/data: 将主机的 /root/redis/data 目录挂载到容器的 /data 目录用于持久化保存 Redis 数据。-v /root/redis/redis.conf:/etc/redis/redis.conf: 将主机的 /root/redis/redis.conf 配置文件挂载到容器的 /etc/redis/redis.conf使用该配置文件作为 Redis 的配置。–restartalways: 设置容器在退出时自动重新启动。–network host: 使用主机网络模式容器将共享主机的网络栈。-d: 在后台运行容器。redis:5.0.7: 指定使用的 Redis 镜像及其版本号。redis-server /etc/redis/redis.conf: 在容器中执行的命令即启动 Redis 服务器并使用指定的配置文件。 执行上述操作redis容器如果启动没有问题那么我们的布隆过滤器的插件和redis都安装并启动成功了如果没有启动成功可以通过docker logs 查看一下redis的启动过程中出现什么问题。 具体使用 控制台操作命令说明 BF.ADD向布隆过滤器中添加一个元素。 BF.ADD key itemBF.EXISTS检查一个元素是否存在于布隆过滤器中。 BF.EXISTS key item-BF.MADD向布隆过滤器中批量添加多个元素。 BF.MADD key item [item ...]BF.MEXISTS批量检查多个元素是否存在于布隆过滤器中。 BF.MEXISTS key item [item ...]BF.INFO获取布隆过滤器的信息包括容量、误判率等。 BF.INFO keyBF.RESERVE创建一个新的布隆过滤器并指定容量和误判率。 BF.RESERVE key error_rate capacityBF.COUNT统计布隆过滤器中已添加的元素数量。 BF.COUNT key给user过滤器添加一个元素如果我们没有添加创建布隆过滤器系统会给我们创建一个其中布隆过滤器的容量为100判错率为0.01这是布隆过滤器的默认配置我们可以在创建布隆过滤器的时候进行修改。 Spring Boot集成布隆过滤器 1、引入依赖这里使用的redis的过滤器所以用到的依赖直接使用的spring-data-redis这个就可以了。 !--redis的依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency 2、布隆过滤器的工具类 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.data.redis.core.script.RedisScript; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional;import java.util.Collections; import java.util.List; import java.util.stream.Collectors;Component public class RedisBloomUtil {Autowiredprivate RedisTemplate redisTemplate;// 初始化一个布隆过滤器public Boolean tryInitBloomFilter(String key, long expectedInsertions, double falseProbability) {Boolean keyExist redisTemplate.hasKey(key);if(keyExist) {return false;}RedisScriptBoolean script new DefaultRedisScript(bloomInitLua(), Boolean.class);RedisSerializer stringSerializer redisTemplate.getStringSerializer();redisTemplate.execute(script, stringSerializer, stringSerializer, Collections.singletonList(key), falseProbability, expectedInsertions);return true;}// 添加元素public Boolean addInBloomFilter(String key, Object arg) {RedisScriptBoolean script new DefaultRedisScript(addInBloomLua(), Boolean.class);return (Boolean) redisTemplate.execute(script, Collections.singletonList(key), arg);}Transactional// 批量添加元素public Boolean batchAddInBloomFilter(String key, Object... args) {RedisScriptBoolean script new DefaultRedisScript(batchAddInBloomLua(), Boolean.class);return (Boolean) redisTemplate.execute(script, Collections.singletonList(key), args);}// 查看某个元素是否是存在public Boolean existInBloomFilter(String key, Object arg) {RedisScriptBoolean script new DefaultRedisScript(existInBloomLua(), Boolean.class);return (Boolean) redisTemplate.execute(script, Collections.singletonList(key), arg);}// 批量查看元素是否存在public List batchExistInBloomFilter(String key, Object... args) {RedisScriptList script new DefaultRedisScript(batchExistInBloomLua(), List.class);ListLong results (List) redisTemplate.execute(script, Collections.singletonList(key), args);ListBoolean booleanList results.stream().map(res - res 1 ? true : false).collect(Collectors.toList());return booleanList;}private String bloomInitLua() {return redis.call(bf.reserve, KEYS[1], ARGV[1], ARGV[2]);}private String addInBloomLua() {return return redis.call(bf.add, KEYS[1], ARGV[1]);}private String batchAddInBloomLua() {StringBuilder sb new StringBuilder();sb.append(for index, arg in pairs(ARGV)).append(\r\n);sb.append(do).append(\r\n);sb.append(redis.call(bf.add, KEYS[1], arg)).append(\r\n);sb.append(end).append(\r\n);sb.append(return true);return sb.toString();}private String existInBloomLua() {return return redis.call(bf.exists, KEYS[1], ARGV[1]);}private String batchExistInBloomLua() {StringBuilder sb new StringBuilder();sb.append(local results {}).append(\r\n);sb.append(for index, arg in pairs(ARGV)).append(\r\n);sb.append(do).append(\r\n);sb.append(local exist redis.call(bf.exists, KEYS[1], arg)).append(\r\n);sb.append(table.insert(results, exist)).append(\r\n);sb.append(end).append(\r\n);sb.append(return results;);return sb.toString();} } 总结提升 布隆过滤器适用于需要快速判断一个元素是否可能存在于集合中的场景例如网络爬虫中的去重、缓存中的数据判断等。但需要注意的是布隆过滤器无法删除元素也无法准确地判断一个元素是否存在于集合中因此在一些场景下可能会产生误判。 此文章对你有用的话记得留言点赞收藏哦
http://www.zqtcl.cn/news/931843/

相关文章:

  • 湖南网站推广公司上海公司买车上牌规定
  • 一个企业做网站的目的高端网站设计 上海
  • 教做布艺的网站网页传奇游戏排行榜前十
  • 做一个公司网站大概要多少钱做一个wordpress模板下载地址
  • 时代强个人网站网络营销的特点举例
  • 专门做诺丽果的网站北京百度seo点击器
  • 佛山制作网站开发公司wordpress历史记录
  • 有没有什么专业做美业的网站安卓免费翻外墙的app
  • ppt网站建设教育网站的建设
  • 文化馆网站建设情况网站建设建站公司
  • 自己怎么做dj 视频网站网站推广 济南
  • 2014网站怎么备案怎样建置换平台网站
  • 惠州网站建设信息嘉兴做网站软件
  • 如何做发表文章的网站淮安市建设工程质量监督站网站
  • 做洁净的网站太原便宜做网站的公司
  • 网站设计评级检索标准的网站
  • 做个网站每年都要交域名费吗html静态网页首页模板
  • 网站资源整合与建设wordpress固定链接设置后404
  • 网站历史快照seo推广方法
  • 做淘宝客的的网站有什么要求北京专业网站制作公司
  • 建设网站 知乎个人可以开发app软件吗
  • 网站如何后台管理北京正规网站建设有几种
  • 临沂网站排名高质量的中山网站建设
  • 响应式网站定制开发网络教育全程托管
  • 做网站中的剪辑图片龙岗网站
  • 建设购物网站的意义免费做外贸的网站平台
  • 长沙做电商网站设计重庆观音桥旅游攻略
  • 网站建设的目标与期望动漫设计与制作工资多少
  • 做网站找网站设计公司 长沙
  • 网站维护内容网站代码下载