Redis安装管理, RDB完全快照 ubuntu使用

news/2024/10/5 10:49:50/文章来源:https://www.cnblogs.com/ludingchao/p/18447674

1.1 Redis 基础

redis单线程处理用户请求,不用加锁。其他线程做别的工作

1.2 Redis 安装

Ubuntu 安装 Redis

范例:基于官方仓库包安装 (可以安装最新版本)

#官方地址
https://redis.io/docs/install/install-redis/install-redis-on-linux/#导入key
[root@ubuntu2204 ~]#curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
#生成对应仓库配置文件
[root@ubuntu2204 ~]#echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
#查看生成的文件
[root@ubuntu2204 ~]#ls /etc/apt/sources.list.d
redis.list[root@ubuntu2204 ~]#apt update
#查看版本
[root@ubuntu2204 ~]#apt list -a redis
#安装最新版
[root@ubuntu2204 ~]#apt -y install redis
#指定版本安装,注意:因为依赖关系可能会失败
[root@ubuntu2204 ~]#apt -y install redis=6:7.2.4-1rl1~jammy1

范例:内置仓库

[root@ubuntu2204 ~]#apt list redis
[root@ubuntu2004 ~]#apt -y install redis

1.2.2 编译安装 Redis

编译安装

#Redis 源码包官方下载链接: 
http://download.redis.io/releases/
#官方的安装方法:
https://redis.io/docs/getting-started/installation/install-redis-from-source/

范例: 编译安装

#安装依赖包
[root@centos8~]#yum -y install gcc make jemalloc-devel#如果支持systemd需要安装下面包
[root@ubuntu2204 ~]#apt update && apt -y install make gcc libjemalloc-dev libsystemd-dev
[root@ubuntu2004 ~]#apt update && apt -y install make gcc libjemalloc-dev libsystemd-dev
[root@ubuntu1804 ~]#apt update && apt -y install make gcc libjemalloc-dev libsystemd-dev
[root@centos8 ~]#yum -y install gcc jemalloc-devel systemd-devel
[root@centos7 ~]#yum -y install gcc jemalloc-devel systemd-devel#下载源码
[root@centos8 ~]#wget http://download.redis.io/releases/redis-6.2.4.tar.gz
[root@centos8 ~]#tar xvf redis-6.2.4.tar.gz#编译安装
[root@centos8 ~]#cd redis-6.2.4/
#如果支持systemd,需要执行下面
[root@centos8 redis-6.2.4]#make -j 2 USE_SYSTEMD=yes PREFIX=/apps/redis install
#如果不支持systemd,执行下面
[root@centos8 redis-6.2.4]#make -j 2 PREFIX=/apps/redis install #指定redis安装目录#配置环境变量
[root@centos8 ~]#echo 'PATH=/apps/redis/bin:$PATH' >> /etc/profile
[root@centos8 ~]#. /etc/profile#目录结构
[root@centos8 ~]#tree /apps/redis/
/apps/redis/
└── bin├── redis-benchmark├── redis-check-aof├── redis-check-rdb├── redis-cli├── redis-sentinel -> redis-server└── redis-server#准备相关目录和配置文件
[root@centos8 ~]#mkdir /apps/redis/{etc,log,data,run} #创建配置文件、日志、数据等目录#默认配置文件有问题,需要修改
[root@centos8 redis-6.2.4]#cp redis.conf /apps/redis/etc/

前台启动 Redis

#前台启动 redis
[root@centos8 ~]#redis-server /apps/redis/etc/redis.conf

创建 Redis 用户和设置数据目录权限及修改默认配置文件

[root@centos8 ~]#useradd -r -s /sbin/nologin redis
#设置目录权限
[root@centos8 ~]#chown -R redis.redis /apps/redis/
#修改配置(如果是dpkg安装的,去查找配置文件位置)
#[root@ubuntu redis]#dpkg -L redis-server| grep 'redis\.conf'
[root@ubuntu redis]#vim /apps/redis/etc/redis.conf
#修改配置内容
bind 0.0.0.0    #支持所有其他主机访问
logfile "/path/redis.log" #日志路径,示例:logfile "/apps/redis/log/redis_6379.log"
dir ./ #数据路径。快照文件保存路径,示例:dir "/apps/redis/data"
pidfile /var/run/redis_6379.pid #pid文件路径,可以修改为/apps/redis/run/redis_6379.pid
protected-mode yes #redis3.2之后加入的新特性,在没有设置bind IP和密码的时候,redis只允许访问127.0.0.1:6379,可以远程连接,但当访问将提示警告信息并拒绝远程访问,redis-7版本后,只要没有密码就不能远程访问

[root@ubuntu redis]#systemctl restart redis

创建 Redis 服务 Service 文件

[root@centos8 ~]#vim /lib/systemd/system/redis.service
[Unit]
Description=Redis persistent key-value database
After=network.target[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID        #此行可省略
Type=notify #如果支持systemd可以启用此行
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=1000000   #指定此值才支持更大的maxclients值(redis支持更多并发连接)

[Install]
WantedBy=multi-user.target

Redis 通过Service方式启动

[root@centos8 ~]#systemctl daemon-reload
[root@centos8 ~]#systemctl start redis

消除启动时的三个Warning提示信息(可选)

前面直接启动Redis时有三个Waring信息,可以用下面方法消除告警,但非强制消除

Tcp backlog (优化全连接队列长度)

#ubuntu新版内核该参数已为4096,满足511,不用修改
#rocky系统进行修改
[root@rocky ~]# sysctl -a |grep somaxconn
net.core.somaxconn = 128
[root@rocky ~]# vim /etc/sysctl.conf
net.core.somaxconn = 4096
#加载
[root@rocky ~]# sysctl -p
net.core.somaxconn = 4096

overcommit_memory

内核参数说明: 官方建议设成1

内核参数overcommit_memory 实现内存分配策略,可选值有三个:0、1、2
0 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则内存
申请失败,并把错误返回给应用进程
1 表示内核允许分配所有的物理内存,而不管当前的内存状态如何
2 表示内核允许分配超过所有物理内存和交换空间总和的内存

范例:

[root@rocky ~]# vim /etc/sysctl.conf
vm.overcommit_memory = 1
[root@rocky ~]# sysctl -p

transparent hugepage

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. 
This will create latency and memory usage issues with Redis. To fix this issue 
run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as 
root, and add it to your /etc/rc.local in order to retain the setting after a 
reboot. Redis must be restarted after THP is disabled.
警告:您在内核中启用了透明大页面(THP,不同于一般4k内存页,而为2M)支持。 这将在Redis中造成延迟
和内存使用问题。 要解决此问题,请以root 用户身份运行命令“echo never> 
/sys/kernel/mm/transparent_hugepage/enabled”,并将其添加到您的/etc/rc.local中,以便在
重启后保留设置。禁用THP后,必须重新启动Redis。

注意:Ubuntu22.04默认值满足要求,不再有此告警 (rocky要改)

范例:

#查看默认值
[root@ubuntu2204 ~]#cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never#ubuntu开机配置(ubuntu满足,不用配,这里只是演示)
[root@ubuntu2004 ~]#cat /etc/rc.local 
#!/bin/bash
echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@ubuntu2004 ~]#chmod +x /etc/rc.local#CentOS开机配置(这个命令重启就没了,所以要开机自启)
[root@centos8 ~]#echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local 
#该文件默认没执行权限,需要加上
[root@centos8 ~]#chmod +x /etc/rc.d/rc.local

 

1.2.3 Docker 容器方式部署

[root@ubuntu ~]#apt update && apt install -y docker.io
#dockerhub官网上搜redis,通过tag找一个版本,这里找了一个alpine系统的
[root@ubuntu ~]#docker pull redis:7.2.4-alpine3.19

[root@ubuntu2204 ~]#docker run -d -p 6379:6379 --name myredis redis:7.2.4-alpine3.19
#指定连接密码
[root@ubuntu2204 ~]#docker run -d -p 6379:6379 --name myredis redis:7.2.4-alpine3.19 --requirepass 123456#数据持久化目录在容器/data下,可以用卷或挂载的方式挂在宿主机上保证容器被删,数据还在

redis内存不建议太多,8g,16g查不到。如果一个redis64g,save的时候,就要把64g的内容写入磁盘,不合适。一个物理服务器可以开几个redis的docker,每个给8g,16g。

另外这样的好处,可以利用到多核cpu的性能

也可以使用redis多实例,不同端口的方式实现

 

1.2.4 Redis 的多实例

测试环境中经常使用多实例,需要指定不同实例的相应的端口,配置文件,日志文件等相关配置

范例: 以编译安装为例实现 redis 多实例

[root@ubuntu ~]#vim /lib/systemd/system/redis6379.service
[Unit]
Description=Redis persistent key-value database
After=network.target[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis6379.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=1000000[Install]
WantedBy=multi-user.target[root@ubuntu ~]#vim /lib/systemd/system/redis6380.service
...
[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis6380.conf --supervised systemd
...[root@ubuntu ~]#vim /lib/systemd/system/redis6381.service
...
[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis6381.conf --supervised systemd
...[root@ubuntu ~]#cd /apps/redis/etc
[root@ubuntu etc]#cp redis.conf redis6379.conf
[root@ubuntu etc]#vim redis6379.conf
dbfilename dump6379.rdb
[root@ubuntu etc]#sed 's/6379/6380/g' redis6379.conf > redis6380.conf
[root@ubuntu etc]#sed 's/6379/6381/g' redis6379.conf > redis6381.conf

[root@ubuntu etc]#systemctl daemon-reload
[root@ubuntu etc]#systemctl enable --now redis6379 redis6380 redis6381

 

2 Redis 配置管理

2.1 Redis 配置文件说明

#如果是dpkg安装的,去查找配置文件位置
[root@ubuntu redis]#dpkg -L redis-server| grep 'redis\.conf'
#如果按照上面编译安装的配置路径 /apps/redis/etc/redis.conf
bind 0.0.0.0    #支持所有其他主机访问
port 6379       #监听端口,默认6379/tcp
tcp-backlog 511 #三次握手的时候server端收到client ack确认号之后的队列值,即全连接队列长度
timeout 0 #客户端和Redis服务端的连接超时时间,默认是0,表示永不超时
tcp-keepalive 300 #tcp 会话保持时间300s

logfile "/path/redis.log" #日志路径,示例:logfile "/apps/redis/log/redis_6379.log"
loglevel notice #日志级别
databases 16 #设置数据库数量,默认:0-15,共16个库

requirepass foobared #设置redis连接密码,之后需要AUTH pass,如果有特殊符号,用" "引起来,生产建议设置

maxclients 10000 #Redis最大连接客户端

maxmemory <bytes> #redis使用的最大内存,单位为bytes字节,0为不限制,建议设为物理内存一半,8G内存的计算方式8(G)*1024(MB)1024(KB)*1024(Kbyte),需要注意的是缓冲区是不计算在maxmemory内,生产中如果不设置此项,可能会导致OOM
         
rdbcompression yes #持久化到RDB文件时,是否压缩,"yes"为压缩,"no"则反之
dbfilename dump.rdb #快照文件名
dir ./ #数据路径。快照文件保存路径,示例:dir "/apps/redis/data"
pidfile /var/run/redis_6379.pid #pid文件路径,可以修改为/apps/redis/run/redis_6379.pid
protected-mode yes #redis3.2之后加入的新特性,在没有设置bind IP和密码的时候,redis只允许访问127.0.0.1:6379,可以远程连接,但当访问将提示警告信息并拒绝远程访问,redis-7版本后,只要没有密码就不能远程访问

客户端程序 redis-cli

#默认为本机无密码连接
redis-cli
#远程客户端连接,注意:Redis没有用户的概念
redis-cli -h <Redis服务器IP> -p <PORT> -a <PASSWORD> --no-auth-warning

查看redis状态(内存使用情况,最大限制,当前连接数,最大连接数)

[root@ubuntu etc]#redis-cli info

动态修改redis参数 (临时生效,重启就失效了)

#如果还要永久生效,那就把配置文件也改了
[root@ubuntu ~]#redis-cli
#获取所有redis参数
127.0.0.1:6379> config get *
#获取最大客户端数量
127.0.0.1:6379> config get maxclients
1) "maxclients"
2) "10000"
#修改参数
127.0.0.1:6379> config set maxclients 77777
OK
#修改密码
127.0.0.1:6379> config set requirepass 123456#Redis5.0有些设置无法修改,Redis6.2.6版本支持修改bind
127.0.0.1:6379> CONFIG SET bind 127.0.0.1
(error) ERR Unsupported CONFIG parameter: bind

2.3 慢查询

[root@centos8 ~]#vim /etc/redis.conf
slowlog-log-slower-than 10000    #单位为us,指定超过1us即为慢的指令,默认值为10000us127.0.0.1:6379> SLOWLOG LEN  #查看慢日志的记录条数
(integer) 14
127.0.0.1:6379> SLOWLOG GET [n] #查看慢日志的最近n条记录,默认为10
1) 1) (integer) 14
2) (integer) 1544690617       #第2)行表示命令执行的时间戳,距离1970-1-1的秒数,date -d +@1544690617 可以转换
3) (integer) 4                #第3)行表示每条指令的执行时长
4) 1) "slowlog"127.0.0.1:6379> SLOWLOG RESET #清空慢日志

2.4 Redis 持久化

Redis支持两种数据持久化保存方法

1.RDB:Redis DataBase 
2.AOF:AppendOnlyFile  

2.4.1 RDB

完全快照,不能做到实时

RDB 支持save和bgsave两种命令实现数据文件的持久化

执行save后,会生成dump.rdb文件。即使redis服务重启,也会自动加载现有数据 dump.rdb(文件大,启动会慢些)
#先备份为temp-主进程号.pid,完成后再覆盖dump.rdb,temp文件就没了

注意: save 指令使用主进程进行备份,而不生成新的子进程,但是也会生成临时文件temp-<主进程 PID>.rdb文件
(主进程也就是处理用户请求的进程,且是单行程,其他命令像访问会排队等待) 
实际生产中,不会采用save来做文件持久化,耽误用户访问,而采用bgsave(后台)bgsave会单独开一个子进程进行备份,先备份为temp-子进程号.pid,完成后再覆盖dump.rdb,temp文件就没了。不影响原来的主线程
#如果备份中途停电或者失败了,也不会覆盖影响原来的dump.rdb

2.4.1.2 RDB 相关配置

#在配置文件中的 save 选项设置多个保存条件,只有任何一个条件满足,服务器都会自动执行 BGSAVE 命
#Redis7.0以后支持写在一行,如:save 3600 1 300 100 60 10000,此也为默认值
save 900 1         #900s内修改了1个key即触发保存RDB
save 300 10        #300s内修改了10个key即触发保存RDB
save 60 10000      #60s内修改了10000个key即触发保存RDB
dbfilename dump.rdb
dir ./             #编泽编译安装时默认RDB文件存放在Redis的工作目录,此配置可指定保存的数据目
录
stop-writes-on-bgsave-error yes  #当快照失败是否仍允许写入,yes为出错后禁止写入,建议为no
rdbcompression yes    #持久化到RDB文件时,是否压缩,"yes"为压缩,"no"则反之
rdbchecksum yes        #是否对备份文件开启RC64校验,默认是开启

范例:RDB 相关配置 (自动触发bgsave)

[root@ubuntu2004 ~]#redis-cli config get save
1) "save"
2) "3600 1 300 100 60 10000"    #默认
#支持动态修改,注意:需要添加双引号
127.0.0.1:6379> config set save "30 3"    #30s超过3次就备份
OK
127.0.0.1:6379> config get save
1) "save"
2) "60 3"#直接修改配置文件
[root@ubuntu2004 ~]#vim /apps/redis/etc/redis.conf
sav3 30 3#禁止持久化(系统不自动持久化,用户还是可以手动持久化)
127.0.0.1:6379> config set save ""
[root@ubuntu2004 ~]#vim /apps/redis/etc/redis.conf
save ""#注意:通过redis-cli info查看rdb_bgsave_in_progress:0,如果0表示完成了
[root@ubuntu ~]#redis-cli info|grep rdb_bgsave_in_progress
rdb_bgsave_in_progress:0
#脚本可以通过此方法bgsave后查看是否备份完成

2.4.1.3 实现 RDB 方法

1.save: 同步,不推荐使用,使用主进程完成快照,因此会阻塞其它命令执行
2.bgsave: 异步后台执行,不影响其它命令的执行,会开启独立的子进程,因此不会阻赛其它命令执行
3.配置文件实现自动保存: 在配置文件中制定规则,自动执行bgsave

范例: 手动备份RDB文件的脚本

#配置文件
[root@centos7 ~]#vim /apps/redis/etc/redis.conf
save ""
dbfilename dump_6379.rdb
dir "/data/redis"
appendonly no #脚本
[root@centos8 ~]#cat redis_backup_rdb.sh 
#!/bin/bash
#********************************************************************
#Author:           wangxiaochun
#QQ:               29308620
#Date:             2020-10-21
#FileName:         redis_rdb.sh
#URL:               http://www.wangxiaochun.com
#Description:       The test script
#Copyright (C):     2020 All rights reserved
#********************************************************************

BACKUP=/backup/redis-rdb
DIR=/data/redis
FILE=dump_6379.rdb
PASS=123456color () {RES_COL=60MOVE_TO_COL="echo -en \\033[${RES_COL}G"SETCOLOR_SUCCESS="echo -en \\033[1;32m"SETCOLOR_FAILURE="echo -en \\033[1;31m"SETCOLOR_WARNING="echo -en \\033[1;33m"SETCOLOR_NORMAL="echo -en \E[0m"echo -n "$1" && $MOVE_TO_COLecho -n "["if [ $2 = "success" -o $2 = "0" ] ;then${SETCOLOR_SUCCESS}echo -n $" OK "    elif [ $2 = "failure" -o $2 = "1" ] ;then ${SETCOLOR_FAILURE}echo -n $"FAILED"else${SETCOLOR_WARNING}echo -n $"WARNING"fi${SETCOLOR_NORMAL}echo -n "]"echo
}redis-cli -h 127.0.0.1 -a $PASS --no-auth-warning bgsave 
result=`redis-cli -a $PASS --no-auth-warning info Persistence |grep 
rdb_bgsave_in_progress| sed -rn 's/.*:([0-9]+).*/\1/p'`
#result=`redis-cli -a $PASS --no-auth-warning info Persistence |awk -F: 
'/rdb_bgsave_in_progress/{print $2}'`
until [ $result -eq 0 ] ;dosleep 1result=`redis-cli -a $PASS --no-auth-warning info Persistence |awk -F: 
'/rdb_bgsave_in_progress/{print $2}'`
done
DATE=`date +%F_%H-%M-%S`[ -e $BACKUP ] || { mkdir -p $BACKUP ; chown -R redis.redis $BACKUP; }
scp $DIR/$FILE $BACKUP/dump_6379-${DATE}.rdb backup-server:/backup/color "Backup redis RDB" 0#执行
[root@centos8 ~]#bash redis_backup_rdb.sh
Background saving started
Backup redis RDB                                           [ OK ][root@centos8 ~]#ll /backup/redis-rdb/ -h
total 143M
-rw-r--r-- 1 redis redis 143M Oct 21 11:08 dump_6379-2020-10-21_11-08-47.rdb

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/808364.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC内容

SpringMVC简介 SpringMVC(Model View Controller) 是以Servlet API为基础的 Web 框架并可以部署到 Servlet容器(比如:Tomcat),是控制层框架,主要负责与前端交互,接收前端的参数,在服务层进行交互,并把结果返回会前端页面。 SpringMVC工作原理当发送请求的时候,Dis…

Linux系统安装Pycharm专业版【附破解方法】

​写在前面 本教程适用于 Pycharm 2022.2.3 以下所有版本 一、版本信息 虚拟机产品:VMware Workstation 17 Pro 虚拟机版本:17.0.0 build-20800274 ISO映像文件:ubuntukylin-22.04-pro-amd64.iso Pycharm版本:PyCharm 2022.3.3 (Professional Edition) 资源链接:https:/…

谷歌收录批量查询,谷歌收录批量查询的方法步骤

谷歌收录批量查询是网站管理员和SEO专家常用的一种方法,用于同时查询多个页面或网站在谷歌搜索引擎中的收录情况。以下是几种常见的谷歌收录批量查询方法及其步骤: 一、使用Google Search Console(谷歌搜索控制台) 虽然Google Search Console主要面向单个网站的监控和管理,…

怎么查看网站是否被谷歌收录,查看网站是否被谷歌收录的快速检测方法

查看网站是否被谷歌收录,有多种快速检测方法可供选择。以下是一些常用的方法: 一、使用“site:”指令 打开谷歌搜索引擎:在浏览器中打开Google.com,确保使用的是谷歌的官方搜索引擎。 输入查询指令:在搜索框中输入“site:”加上你的网站域名(注意使用英文状态下的冒号,并…

10 月 4 日 S 组 风 雨 大 作

智障行为+2T1 T2 T3 T40 0 0 0好吧至少下一次不会考更低了 T1 你有个 n 个点 m 条边的无向图,每条边都有红蓝两种颜色中的一种,保证红色的边形成了这个图的一个生成树。 你希望给这些边赋上边权,保证边权是 1 ∼ m 的排列,使得红色的边是最小生成树。 希望这些边权形成的序…

南沙C++信奥赛陈老师解一本通题: 1828:【02NOIP提高组】均分纸牌

​【题目描述】有n堆纸牌,编号分别为 1,2,…,n。每堆上有若干张,但纸牌总数必为nn的倍数。可以在任一堆上取若干张纸牌,然后移动。 移牌规则为:在编号为1的堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 n 的堆上取的纸牌,只能移到编号为n−1的堆上;其他堆上取的纸…

反射容斥

好久没写了呃呃呃……反射容斥恋のうた あとどれくらいの距離を 月へ歩いたら あとどれくらいの 寒い夜を重ねたら あとどれくらいの さよならを流したら まぶたの奥の泉が枯れ果てるとか 千年後もきっと続くだろう そう思ってた空洞を 満たしてあふれてしまうほどの この気持ち…

快乐数学5虚数

5 虚数 虚数总是让我感到困惑:这是一个数学抽象概念,方程是可处理它。 大学才会用到它。我们将用我们最喜欢的工具来攻克这个课题:关注关系,而非机械公式。 将复数视为数字系统的升级,就像零、小数和负数一样。 使用直观的图表,而不仅仅是文字,来理解概念。5.1 真正理解负…

Cisco Secure Firewall 3100 Series FTD Software 7.6.0 ASA Software 9.22.1

Cisco Secure Firewall 3100 Series FTD Software 7.6.0 & ASA Software 9.22.1Cisco Secure Firewall 3100 Series FTD Software 7.6.0 & ASA Software 9.22.1 Firepower Threat Defense (FTD) Software - 思科防火墙系统软件 请访问原文链接:https://sysin.org/blog…

冲刺 CSP 联训模拟 2

T1 挤压 概率期望,二进制拆位 看到异或想到拆位算贡献 \[\begin{aligned} ans&=\sum_xx^2P(x)\\ &=\sum_x(b_1+b_2+...+b_{30})^2P(x)\ \ \ (b_i表示\ x\ 二进制下\ i\ 位的值)\\ &=\sum_x(b_1b_1+b_1b_2+. . .b_{30}b_{29}+b_{30}b_{30})P(x)\\ &=\sum_i^{30…

智慧园区管理原型

智慧园区管理系统的构建是一个复杂而系统的工程,它融合了信息化、AI、物联网等多种先进技术,旨在提升园区的管理效率、服务质量以及企业运营效率。 一、明确系统目标和需求 需求收集与分析:首先,需要对园区的实际需求进行全面分析,包括园区类型(如产业园区、办公园区、住…

读数据湖仓07描述性数据

读数据湖仓07描述性数据1. 描述性数据 1.1. 基础数据中包含不同类型的数据,而不同类型数据的描述性数据也存在显著的差异 1.2. 尽管这些描述性数据存在根本性的差异,但通过描述性数据,我们可以全面了解基础数据中的数据 1.3. 通过分析基础设施中提供的描述性数据可以获得更详…