tp框架做响应式网站贵阳seo公司
tp框架做响应式网站,贵阳seo公司,合肥晚报社官方网站,电商网站如何提高转化率一、Redis 的默认配置了解 Redis 的都知道#xff0c;Redis 服务器状态有很多可配置的默认值。例如#xff1a;数据库数量#xff0c;最大可用内存#xff0c;AOF 持久化相关配置和 RDB 持久化相关配置等等。我相信#xff0c;关于 AOF 持久化和 RDB 持久化的配置大家都很…一、Redis 的默认配置了解 Redis 的都知道Redis 服务器状态有很多可配置的默认值。例如数据库数量最大可用内存AOF 持久化相关配置和 RDB 持久化相关配置等等。我相信关于 AOF 持久化和 RDB 持久化的配置大家都很熟悉但是关于数据库数量和最大可用内存是不是恰恰很容易被大家忽略当 Redis 实例部署在正式环境时我们可能会根据系统业务或者服务器配置来对 redis.conf 配置文件里的一些选项进行修改。可能此时我们的潜意识都会觉得大部分东西都是越多越好数据库数量越多那么我们就可以一个业务对应一个数据库再繁杂的业务也不怕不够用最大可用内存越大那么我们就可以往 Redis 里存放越多的数据。那么数据库数量是不是真的可以无限大Redis 没做限制么是不是真的越多越好用最大可用内存是不是设置成越大越好Redis 会不会对此也有限制呢下面我们来分析看看。二、最大可用内存 maxmemory1、Redis 源码里的默认最大可用内存REDIS_DEFAULT_MAXMEMORY在 redis.h 里我们可以看到最大可用内存 REDIS_DEFAULT_MAXMEMORY 的默认值是0即最大可用内存默认没有设置最大值。如果 maxmemory 0 那么不管用户存放多少数据到 Redis 中Redis 也不会对可用内存进行检查直到 Redis 实例因内存不足而崩溃也无作为。但是 Redis 其实不是没有做任何限制对于 32 位实例Redis 就做了限制。如果你在 32 位的服务器上部署 Redis 实例它的最大可用内存将限制在 3 GB。为什么是 3 GB因为 32 位的机器最大只支持 4GB 的内存而系统本身就需要一定的内存资源来支持运行所以 32 位机器限制最大 3 GB 的可用内存是非常合理的这样可以避免因为内存不足而导致 Redis 实例崩溃。我们可以在 redis.c 里看到 32 位限制 3 GB 的源码/* 32 bit instances are limited to 4GB of address space, so if there is* no explicit limit in the user provided configuration we set a limit* at 3 GB using maxmemory with noeviction policy. This avoids* useless crashes of the Redis instance for out of memory. */// 对于 32 位实例来说默认将最大可用内存限制在 3 GBif (server.arch_bits 32 server.maxmemory 0) {redisLog(REDIS_WARNING,Warning: 32 bit instance detected but no memory limit set. Setting 3 GB maxmemory limit with noeviction policy now.);server.maxmemory 3072LL*(1024*1024); /* 3 GB */server.maxmemory_policy REDIS_MAXMEMORY_NO_EVICTION;}2、Redis 配置文件的最大可用内存选项maxmemory当然了用户可以通过 redis.conf 配置文件的 maxmemory 选项来设置最大可用内存。但是如果用户在配置文件开启了 maxmemory 选项那么 Redis 会限制这个值不能小于 1M。/* Warning the user about suspicious maxmemory setting. */// 检查不正常的 maxmemory 配置if (server.maxmemory 0 server.maxmemory 1024*1024) {redisLog(REDIS_WARNING,WARNING: You specified a maxmemory value that is less than 1MB (current value is %llu bytes). Are you sure this is what you really want?, server.maxmemory);}此时我们都知道对于最大可用内存的最大限制只有对 32位 实例才会限制在 3 GB对于 64 位实例是完全没有限制的。对于最大可用内存的最小限制当用户开启了 redis.conf 配置文件的 maxmemory 选项那么 Redis 将限制选项的值不能小于 1 MB 。3、最大可用内存该如何设置当然是越大越好了但是前提我们要考虑一下服务器会用来做什么。假如我们的机器只用来部署一个 Redis 实例那么大概留个 1 GB 的内存资源来支撑系统本身的运行即可。但是如果我们部署多个 Redis 实例或者还要部署其他系统那么就要好好计算一翻了如果设置的最大可用内存过大了就会导致 Redis 实例因为内存不足而崩溃了。三、数据库数量 dbnum1、Redis 源码里的默认数据库数量REDIS_DEFAULT_DBNUM在 redis.h 里我们可以看到 Redis 默认的数据库数量 REDIS_DEFAULT_DBNUM 为16。2、Redis 配置文件的数据库数量选项databases用户可以通过 redis.conf 配置文件的 databases 选项来设置数据库数量。3、redis 是否会限制数据库数量的大小1)在初始化服务器状态(redisServer)时直接读取默认值 REDIS_DEFAULT_DBNUM。2)在读取配置文件时读取 databases 配置项并做下一步判断。rewriteConfigNumericalOption(state,databases,server.dbnum,REDIS_DEFAULT_DBNUM);server.dbnum atoi(argv[1]);if (server.dbnum 1) {err Invalid number of databases; goto loaderr;}到此我们都知道Redis 不会限制 dbnum 的最大值。但是会限制 dbnum 的最小值为 1。4、数据库数量是不是越多越好Redis 数据库的数量无非就是想对应不同业务的数量一个业务对应一个数据库清晰明了但是如果数据库数量太多却可能会导致一些用户不易发现的问题例如删除过期键的 activeExpireCycle 函数中就会对数据库数量有限制了一般情况下函数只处理 REDIS_DBCORN_DBS_CALL 个数据库(即16个数据库)的过期键除非上一次处理过期键遇到了时间限制才会对所有数据库进行扫描这其实就和 Redis 默认就是 16个数据库是一一对应的。然后程序接着从数据库 0 - 15一一遍历处理过期键/* We usually should test REDIS_DBCRON_DBS_PER_CALL per iteration, with* two exceptions:** 一般情况下函数只处理 REDIS_DBCRON_DBS_PER_CALL 个数据库* 除非** 1) Dont test more DBs than we have.* 当前数据库的数量小于 REDIS_DBCRON_DBS_PER_CALL* 2) If last time we hit the time limit, we want to scan all DBs* in this iteration, as there is work to do in some DB and we dont want* expired keys to use memory for too much time.* 如果上次处理遇到了时间上限那么这次需要对所有数据库进行扫描* 这可以避免过多的过期键占用空间*/if (dbs_per_call server.dbnum || timelimit_exit)dbs_per_call server.dbnum;//.....// 遍历数据库for (j 0; j dbs_per_call; j) {int expired;// 指向要处理的数据库redisDb *db server.db(current_db % server.dbnum);// ....那么存在一种情况如果用户设置了 databases 20而正常情况下只有数据库 0 -15 这 16 个数据库的过期键得到定期删除策略的删除而数据库 16 -19 这几个数据库不能通过定期删除策略删除掉过期键只能等待惰性删除策略即当数据库键被访问时才判断此键是否过期过期了才删除此键。但是如果这些库的过期键很长一段时间都不被访问那么会导致浪费不少宝贵的内存空间。最后关于数据库数量的建议当然了既然 Redis 将默认的数据库数量设置为 16那么很多地方应该都会用到此来对数据库数量做一些限制所以我们正常情况下尽量不要修改 Redis 的数据库数量而且我自己感觉 16 个其实是挺多的了我们连一半都用不到尴尬尴尬~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90524.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!