部署Redis服务

2023-11-18

Redis介绍

  • Remote Dictionary Server(远程字典服务器)
  • 是一款高性能的(Key/Values)分布式内存数据库
  • 支持数据持久化(定期把内存里数据存储到硬盘)
  • 支持多种数据类型
  • 支持master-slave模式数据备份

安装软件

源码编译安装

tar -xzvf redis-4.0.8.tar.gz
cd redis-4.0.8
make
make install

初始化配置

配置服务运行参数

  • 端口:6379
  • 主配置文件:/etc/redis/6379.conf
  • 日志文件:/var/log/redis_6379.log
  • 数据库目录:/var/lib/redis/6379
  • 服务启动程序:/usr/local/bin/redis-server
  • 命令行连接命令:/usr/local/bin/redis-cli
./utils/install_server.sh

管理服务

/etc/init.d/redis_6379 stop # 停止服务
/etc/init.d/redis_6379 start # 启动服务
ps -C redis-server # 查看进程
netstat -tunlp | grep :6379 # 查看端口

连接服务

访问redis服务,redis-cli默认连接本机的redis服务

redis-cli
>ping
>keys * # 列出所有变量
>set name bob # 存数据
>get name # 取数据
>exit # 断开连接

常用命令

  • set key value # 存储一个值
  • mset key value key value .. # 存储多个值
  • get key # 获取key值
  • mget # 获取多个值
  • select index # 切换库默认0,范围1-15
  • keys name # 获取指定key名
  • exists key # 测试变量是否存在
  • ttl key # 查看key生存时间(1为永不过期)
  • expire key time(s) # 设置key生存时间
  • del key # 删除key
  • type key # 查看key类型(set存储的数据为string)
  • lpush key item item item # 存储数组
  • move key db # 将当前库的key移动到指定数据库
  • flushdb # 删除所在库的所有key
  • flushall # 删除内存里所有key
  • save # 保存数据
  • shutdown #停止服务

配置文件解析

配置分类:

名称 说明
NETWORK 网络
GENERAL 常规
SNAPSHOTTING 快照
REPLICATION 复制
SECURITY 安全
CLIENTS 客户端
MEMORY MANAGEMENT 内存管理
数据单位
1k==1000bytes
1kb==1024bytes
.. .. ..

常用配置

  • port 6379 端口
  • bind IP IP地址
  • daemonize yes 守护进程方式运行
  • databases 16 数据库个数
  • logfile /var/log/redis_6379.log 日志文件
  • maxclients 10000 并发连接数量
  • dir /var/lib/redis/6379 数据库目录

内存管理

  • 内存清除策略

    • volatile-lru 最近最少使用(针对设置了TTL的key)
    • allkeys-lru 删除最少使用的key(针对所有的key)
    • allkeys-lfu 从所有key中清除使用频率最少的key
    • volatile-lfu 从所有配置了过期时间的key中清除使用频率最少的key
    • volatile-random 在设置了TTL的key里随机移除
    • allkeys-random 随机移除key
    • volatile-ttl (minor TTL) 移除最近过期的key
    • noeviction 不删除
  • 优化设置

    • maxmemory-policy noeviction 定义使用策略
    • maxmemory 最大内存
    • maxmemory-samples 选取key模板的个数(针对lru和ttl策略),定义最近最少使用的标准

连接密码

requirepass 123456

连接

redis-cli -h IP -p port
>auth 123456

部署LNMP+Redis服务

  1. 部署LNMP环境
  2. 配置支持redis
    • 部署redis服务
    • 安装php扩展(php-redis)
yum -y install php php-devel
rpm -q autoconf automake
tar -zxvf php-redis-2.2.4.tar.gz
cd phpredis-2.2.4/
phpize # 生成配置文件php-config及configure命令
./configure --with-php-config=/usr/bin/php-config
make 
make install
  1. 修改配置文件
# vim /etc/php.ini
728: extension_dir = "目录名"; # 模块目录
730: extension = "模块名"; # 模块名
  1. 重启php-redis服务

Redis集群

集群环境
  • redis服务器6台
  • 管理主机1台
  • 客户端1台
IP地址规划
  • client:192.168.4.50
  • redisA:192.168.4.51:6351
  • redisB:192.168.4.52:6352
  • redisC:192.168.4.53:6353
  • redisD:192.168.4.54:6354
  • redisE:192.168.4.55:6355
  • redisF:192.168.4.56:6356
  • MGM:192.168.4.57
工作原理
graph TB
A(object1)-->B((CRC16算法))
C(object2)-->B
D(object3)-->B
E(object4)-->B
F(object5)-->B
G(object6)-->B
B-->H(slot 0--5460)
B-->I(slot 5461--10922)
B-->J(slot 10923--16383)
H-->K(Node1:object1,object2)
I-->L(Node2:object3,object4)
J-->M(Node3:object5,object6)

解释:一个Redis集群包含16384个哈希槽(hash slot),数据库中的每个键都属于这16384个哈希槽的其中一个,集群使用公式CRC16(key) % 16384来计算键key属于哪个槽,其中CRC16(key) 语句用于计算键 keyCRC16校验和,集群中的每个节点负责处理一部分哈希槽。

创建集群
  • 部署管理主机(也可以部署在任意一台redis服务器上)
    • 部署ruby脚本运行环境
    • 创建管理集群脚本redis-trib.rb
yum -y install rubygems ruby
gem install redis-3.2.1.gem

mkdir /root/bin # 创建命令检索目录
tar -xzvf redis-4.0.8.tar.gz
cp redis-4.0.8/src/redis-trib.rb /root/bin/ # 创建管理集群脚本
chmod +x /root/bin/redis-trib.rb
redis-trib.rb help # 查看命令帮助
  • redis-trib脚本
redis-trib.rb <command> <options> <arguments ...>
命令 描述
create 创建集群
check 检查集群
info 查看集群信息
reshard 重新分片
del-node 删除主机
add-node --slave 添加slave主机
add-node 添加master主机
rebalance 平均分配hash slots
  • 配置6redis服务器
    • 启用集群功能
    • 查看服务信息
# vim /etc/redis/6379.conf
luster-enabled yes # 启用集群功能
cluster-config-file nodes-6379.conf # 存储集群信息文件
cluster-node-timeout 5000 # 超时时间(单位毫秒)

/etc/init.d/redis_6379 restart # 重启服务
netstat -tunlp | grep redis-server
# 集群通信端口:默认服务端口+10000
  • 创建集群
redis-trib.rb create --replicas 1 \ # replicas 定义从服务器个数
192.168.4.51:6351 192.168.4.52:6352 \
192.168.4.53:6353 192.168.4.54:6354 \
192.168.4.55:6355 192.168.4.56:6356
  • 查看集群信息(在管理主机查看)
# redis-trib.rb info ip地址:端口 # 查看集群信息
redis-trib.rb info 192.168.4.53:6353
# 检查集群详细信息
redis-trib.rb check 192.168.4.51:6351

# 在每一台redis服务器本机查看
redis-cli -h 192.168.4.51 -p 6351
> cluster info # 查看集群信息
>cluster nodes # 查看集群节点信息
  • 访问集群
    • 在客户端可以连接集群中任意一台redis服务器
    • 命令格式:redis-cli -c -h ip地址 -p 端口号
    • 选项:-c集群模式
redis-cli -c -h 192.168.4.56 -p 6356
> set school tarena # 存数据
> get school # 取数据

管理集群

测试集群功能

故障切换测试

  • 停止master主机的redis服务
    • master宕机后对应的slave自动被选举为master
    • master启动后会自动配置为当前masterslave
  • 检测集群
    • 在管理主机查看信息
redis-trib.rb check 192.168.4.52:6352
redis-trib.rb info 192.168.4.52:6352
添加服务器

添加master服务器

  • 部署一台新的redis服务器(运行服务并启用集群配置)
  • 添加master主机步骤
    • 添加master主机
    • 分配hash槽(slots)
  • 添加master主机
    • 添加时不指定主机角色,默认新主机被选为master
    • 添加的master主机,需手动分配solts(槽)
redis-trib.rb add-node 192.168.4.58:6358 192.168.4.51:6351
  • 重新分片
    • 移出hash槽个数
    • 接收hash槽主机ID
    • 移出hash槽主机ID
    • 同意配置
redis-trib.rb reshard 192.168.4.51:6351 # 重新分片
How many slots do you want to move(from 1 to 16384)?4096
What is the receiving node ID?
ID值
Source node #1:all
Do you want to proceed with the proposed reshard plan(yes/no)? yes

添加slave服务器

  • 部署一台新redis服务器(运行服务并启用集群配置)
  • 添加slave主机
redis-trib.rb add-node --slave [--master-id id值] ip地址:端口 192.168.4.51:6351
# 如果不指定主节点的id值,会把新节点随机添加为从节点最少的主库
移除服务器
  • 移除slave主机
    • 从服务器没有hash槽,直接移除即可
    • 移除时指定从服务器id
redis-trib.rb del-node 192.168.4.51:6351 \
f689h22f2oq29fqpofpqufh923hfqijn
  • 移除master服务器
    • 释放占用的hash
    • 移除master主机
redis-trib.rb reshard 192.168.4.51:6351 # 重新分片
How many slots do you want to move(from 1 to 16384)?4096
What is the receiving node ID?
fwfhui9d893rodnponcaphf
Source node #1:hdqwio3hr7q237fhqpwfqiwn37
Source node #2:done
Do you want to proceed with the proposed reshard plan(yes/no)? yes
# 移除master主机
redis-trib.rb del-node 192.168.4.51:6351 \
hdqwio3hr7q237fhqpwfqiwn37

主从复制

主从复制结构模式:

一主一从、一主多从、主从从

主从复制工作原理
  • slave向master发送sync命令
  • master启动后台存盘进程,并收集所有修改数据命令
  • master完成后台存盘后,传送整个数据文件到slave
  • slave接收数据文件,加载到内存中完成首次完全同步
  • 后续有新数据产生时,master继续收集数据修改命令依次传给slave,完成同步
配置主从复制

拓扑结构:一主一从

配置从库(redis服务运行后,默认都是master服务器)

redis-cli -h ip:端口
> info replication # 查看复制信息
# Replication
role:   # 角色
master_host:    # 主库ip地址
master_port:    # 主库端口号
master_link_status: # 与主库连接状态
redis-cli -h 192.168.4.52
# slaveof 主库IP地址 端口号
> slaveof 192.168.4.51 6351 # 命令行配置 

# vim /etc/redis/6379.conf
slaveof 192.168.4.51 6351 # 永久配置

反客为主(将从库恢复为主库)

redis-cli -h 192.168.4.52
slaveof no one # 命令行临时设置

# vim /etc/redis/6379.conf
# slaveof 192.168.4.51 6351
配置带验证的主从复制

配置master:

设置连接密码,重启服务

sed -n '501p' /etc/redis/6379.conf
    requirepass 123456 # 定义连接密码

配置slave:

设置连接密码。重启服务

# vim +289 /etc/redis/6379.conf
masterauth 123456 # 主库密码

哨兵服务

哨兵服务介绍:

  • 监视master服务器
  • 发现master宕机后,将从服务器升级为主服务器
  • 主配置文件:sentinel.conf
  • 模板文件:redis-4.0.8/sentinel.conf
graph TB
A(master:51)-->B(哨兵:57)
C(slave:52)-->B

配置哨兵服务

  • 安装redis软件
  • 创建主配置文件
  • 启动哨兵服务
# vim /etc/sentinel.conf
# sentinel monitor 主机名 ip地址 端口 票数
setinel monitor server51 192.168.4.51 6351 1
bind 0.0.0.0 # 服务地址
sentinel auth-pass server51 123456 # 连接服务密码
redis-sentinel /etc/sentinel.conf # 启动服务

持久化

RDB

RDB介绍(redis数据库文件,全称Redis Database)

  • 数据持久化方式之一
  • 数据持久化默认方式
  • 按照指定时间间隔,将内存中的数据集快照写入硬盘

定义RDB文件名

dbfilename "dump.rdb" # 文件名

使用RDB文件恢复数据

  • 备份数据(备份dump.rdb文件到其他位置)
cp 数据库目录/dump.rdb 备份目录
  • 恢复数据(拷贝备份文件到数据库目录,启动redis服务)
cp 备份目录/dump.rdb 数据库目录/

优化设置

  • 数据从内存保存到硬盘的频率
    • save 900 1 # 15分钟且有一个key改变即存盘
    • save 300 10 # 5分钟且有10个key改变即存盘
    • save 60 10000 # 1分钟且有10000个key改变即存盘
  • 手动存盘
    • save # 阻塞写存盘
    • bgsave # 不阻塞写存盘

RDB优点:

  • 高性能的持久化实现—创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;过程中主进程不做任何IO操作
  • 比较适合大规模数据恢复,且多数据完整性要求不是非常高的场合

RDB缺点:

  • 意外宕机时,丢失最后一次持久化的所有数据
AOF

AOF介绍(Append Only File)

  • 追加方式记录写操作的文件
  • 记录redis服务所有写操作
  • 不断的将新的写操作,追加到文件的末尾
  • 默认没有启用
  • 使用cat命令可以查看文件内容

启用AOF

> config set appendonly yes # 启用
> config rewrite # 写进配置文件

使用AOF文件恢复数据

  • 备份数据(备份appendonly.aof文件到其他位置)
cp 数据库目录/appendonly.aof 备份目录
  • 恢复数据(拷贝备份文件到数据库目录,启动redis服务)
cp 备份目录/appendonly.aof 数据库目录

优化配置

  • 定义文件名
appendonly yes # 启用aof,默认no
appendefilename "appendonly.aof" # 指定文件名
  • AOF文件记录写操作的方式
appendfsync always # 时时记录,并完成磁盘同步
appendfsync everysec # 每秒记录一次,并完成磁盘同步
appendfsync no 写入aof,不执行磁盘同步
  • 日志文件会不断增大,何时触发日志重写?
auto-aof-rewrite-min-size 64mb # 首次重写触发值
auto-aof-rewrite-percentage 100 # 再次重写,增长百分比
  • 修复AOF文件(把文件恢复到最后一次的正确操作)
redis-check-aof --fix appendonly.aof

AOF优点

  • 可以灵活设置持久化方式
  • 出现意外宕机时,仅可能丢失1秒的数据

AOF缺点

  • 持久化文件的体积通常会大于RDB方式
  • 执行fsync策略时的速度可能会比RDB方式慢

数据类型

String字符串

字符串操作

  • set key value [ex seconds] [px milliseconds] [nx|xx]:设置key及值,过期时间可以使用秒或毫秒为单位
  • setrange key sffset value:从偏移量开始复写key的特定位的值
set first "hello world"
setrange first 6 "Redis" # 改写为hello Redis
  • strlen key:统计字符串长度
strlen first
  • append key value:存在则追加,不存在则创建key及value,返回key长度
  • setbit key offset value
    1. 对key所存储字符串,设置或清除特定偏移量上的位(bit)
    2. value值可以为1或0,offset为0–2^32之间
    3. key不存在,则创建新key
setbit bit 0 1  # 设置bit第0位为1
setbit bit 1 0  # 设置bit第1位为0
  • bitcount key:统计字符串中被设置为1的比特位数量
setbit bits 0 1
setbit bits 3 1
bitcount bits   # 结果为2
# 场景说明:记录网站用户上线频率
  • decr key:将key中的值减1,key不存在则先初始化为0,再减1
  • decrby key decrement:将key中的值,减去decrement
  • get key:返回key存储的字符串值,若key不存在则返回null;若key的值不是字符串,则返回错误,get只能处理字串
  • getrange key start end:返回字串值中的子字串,截取范围为start和end;负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二字符
  • incr key:将key的值加1,如果key不存在,则初始化为0后再加1;主要应用为计数器
  • incrby key increment:将key的值增加increment
  • incrbyfloat key increment:为key中所储存的值加上浮点数增量increment
  • mget key [key...]:获取一个或多个key的值,空格分隔,具有原子性
  • mset key value [key value...]:设置多个key及值,空格分隔,具有原子性
List列表

List列表简介

  • Redis的list是一个字符队列
  • 先进后出
  • 一个key可以有多个值

List列表操作

  • lpush key value [value...]:将一个或多个值value插入列表key的表头;key不存在,则创建key
lpush list a b c
  • lrange list key start stop:从开始位置读取key的值到stop结束
lrange list 0 2
lrange list 0 -1
lrange list 0 -2
  • lpop key:移除并返回列表头元素数据,key不存在则返回nil
  • llen key:返回列表key的长度
  • lindex key index:返回列表中第index个值
lindex key 0
lindex key -2
  • lset key index value:将key中index位置的值修改为value
  • rpush key value [value...]:将value插入到key的末尾
  • rpop key:删除并返回key末尾的值
Hash表

Hash表简介

Redis hash

  • 是一个string类型的field和value的映射表
  • 一个key可对应多个field,一个field对应一个value
  • 将一个对象存储为hash类型,较于每个字段都存储成string类型更能节省内存

Hash表操作

  • hset key field value:将hash表中field值设置为value
hset site google 'www,g.cn'
  • hget key field:获取hash表中field的值
hget site google
  • hmset key field value [field value...]:同时给hash表中的多个field赋值
  • hmget key field [field...]:返回hash表中的多个field的值
  • hkeys key:返回hash表中所有field名称
  • hgetall key:返回hash表中所有的field的值
  • hvals key:返回hash表中所有field的值
  • hdel key field [field...]:删除hash表中多个field的值,不存在则忽略
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部署Redis服务 的相关文章

  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 如何阻止ubuntu在使用apt安装或更新软件包时弹出“Daemons using outdatedlibraries”? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我最近新安装了 Ubuntu 22 04 LTS 我发现每次使用 apt 安装或更新软件包时 它都会询问我有关Which servic
  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • 使用 Gorilla 会话自定义后端有什么优势?

    我想使用 Redis 进行会话管理 但我不明白使用 Redis 作为 Gorilla 会话包的自定义后端比直接使用它有什么优势 Gorilla 会话包的链接 http www gorillatoolkit org pkg sessions
  • Spring-boot中将redis-cache反序列化为对象的问题

    我在 Client 类中使用 JsonNode 来处理 MySQL 8 数据库中 JSON 类型的字段 即使对于 API 请求 它也能很好地工作 但是当我使用 Redis 启用缓存 我确实需要它 时 我注意到 Redis 无法序列化 Jso
  • 如何在Redis中存储聚合目录树搜索结果

    我有一个很大的产品目录树 目前包含约 36000 个类别和约 100 万个产品 即叶子 它的结构如下 最大深度为 5 Cat1 Cat11 Cat111 Cat1111 Product1 Cat1112 Product1 Cat1113 P
  • 如何查找哪个 Yocto 项目配方填充图像根文件系统上的特定文件

    我经常与 Yocto 项目合作 一个常见的挑战是确定文件为何 或来自什么配方 包含在 rootfs 中 这有望从构建系统的环境 日志和元数据中得出 理想情况下 一组命令将允许将文件链接回源 即配方 我通常的策略是对元数据执行搜索 例如gre
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 如果 Redis 已经是堆栈的一部分,为什么 Memcached 仍然与 Redis 一起使用?

    Redis 可以执行 Memcached 提供的所有操作 LRU 缓存 项目过期以及现在版本 3 x 中的集群 目前处于测试阶段 或通过 twemproxy 等工具执行 性能也类似 此外 Redis 增加了持久性 因此您无需在服务器重新启动
  • Redis 会话序列化器 3.2 和 4.2 之间不匹配

    我有一个基于 Spring Cloud 的应用程序在多个 spring boot 服务器上运行 所有服务器使用 EnableRedisHttpSession共享相同的Spring Session 我现在想将第三方小部件集成到我的应用程序中
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 这种文件锁定方法可以接受吗?

    我们有 10 个 Linux 机器 每周必须运行 100 个不同的任务 这些计算机主要在我们晚上在家时执行这些任务 我的一位同事正在开发一个项目 通过使用 Python 自动启动任务来优化运行时间 他的程序将读取任务列表 抓取一个打开的任务
  • 使用os.execlp时,为什么`python`需要`python`作为argv[0]

    代码是这样的 os execlp python python child py other args this works os execlp python child py other args this doesn t work 我读过
  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的

随机推荐

  • nginx 部署多个vue项目 多文件方式 conf.d/*.conf

    在nginx conf目录下新建conf d文件夹 nginx conf ngxin conf worker processes 1 events worker connections 1024 http include mime type
  • vue学习笔记(超详细)

    文章目录 一 Vue基础 认识Vue js Vue安装方式 Vue的MVVM 二 Vue基础语法 生命周期 模板语法 创建Vue options可以放什么 语法 综合 v on v for遍历数组 v model表单绑定 v model结合
  • 使用iperf测试设备的网络吞吐量

    iperf简介 iperf是一个基于Client Server的网络性能测试工具 可以测试TCP UDP和SCTP带宽质量 能够提供网络吞吐量信息 以及震动 丢包率 最大段和最大传输单元通统计信息 帮助我们测试网络性能 定位网络瓶颈 ipe
  • Python入门之print()函数

    Python利用print 函数将结果输出到标准输出设备 即显示器 上 print 函数主要有以下几个参数 1 print objects objects 0个或多个输出对象 print 拥有0个参数 输出换行 print 函数拥有一个参数
  • SynchronizedMap

    Doug Lea的 util concurrent包除了包含许多其他有用的并发构造块之外 还包含了一些主要集合类型 List和 Map的高性能的 线程安全的实现 Brian Goetz向您展示了用 ConcurrentHashMap替换 H
  • 西瓜书第一章笔记

    本章从如何挑选西瓜的经验出发 介绍了本书所涉及基本术语和概念 数据集 样本 特征 属性 特征空间 属性空间 样本空间 输入空间 特征向量 维数 学习 训练 训练数据 训练样本 假设 预测 标记 样例 标记空间 输出空间 测试 测试样本 分类
  • PAT B1014

    include
  • arcgis创建公里格网并计算格网内点的平均值最后形成马赛克式栅格图

    生成公里格网 在搜索框搜索create fishnet 点击create fishnet output feature class 输出格网的位置和名字 template extent 公里格网的范围 和什么层相同 cell size wi
  • 电脑壁纸链接

    电脑壁纸链接 一 壁纸网站 1 彼岸图网 2 H128壁纸 3 Wallhaven 4 Wallhere 二 游戏壁纸 英雄联盟 神泣 鬼泣 女神联盟2 崩坏3 三国杀 QQ飞车 QQ炫舞 阴阳师 幻塔 王者荣耀 逆战 上古王冠 永恒魔法
  • springboot jar 启动 指定端口和编码格式

    java Dfile encoding utf 8 jar xxxx jar server port 8715
  • linux网络服务[网络配置]——————配置网络IP临时[ifconfig、ip]、永久[nmtui、nmcli、网络链接配置文件]

    文章目录 1 临时设定 1 1 ifconfig命令 1 1 1 安装命令 1 1 2 查看网卡设备 1 1 3 设置IP 1 2 ip命令 1 2 1 安装命令 1 2 2 设定ip 2 永久设置ip的方法 2 1 nmtui 2 2 n
  • OSPF路由汇总和外部路由汇总

    OSPF路由汇总和外部路由汇总 AR1 ospf 1 router id 11 11 11 11 area 0 0 0 1 network 1 1 1 1 0 0 0 0 network 172 16 0 0 0 0 255 255 net
  • 可变参数函数

    c c 支持可变参数的函数 即函数的参数是不确定的 一 为什么要使用可变参数的函数 一般我们编程的时候 函数中形式参数的数目通常是确定的 在调用时要依次给出与形式参数对应的所有实际参数 但在某些情况下希望函数的参数个数可以根据需要确定 因此
  • 常见锁相关

    Linux 锁 futex 所有的futex同步操作都应该从用户空间开始 首先创建一个futex同步变量 也就是位于共享内存的一个整型计数器 当进程尝试持有锁或者要进入互斥区的时候 对futex执行 down 操作 即原子性的给futex同
  • 2023Android大厂面试题详解之内存优化,内存抖动和内存泄漏。(附面试题汇总)

    内存优化 内存抖动和内存泄漏 东方头条 详细讲解 性能优化 内存泄漏与内存抖动优化实战 详细讲解 享学课堂移动互联网系统课程 性能优化 内存泄漏与内存抖动优化实战 这道题想考察什么 内存抖动与内存泄漏是什么 会对程序造成什么影响 为什么会产
  • webpack 插件之Html-Webpack-Plugin

    webpack 插件之Html Webpack Plugin 1 为什么我们需要这个插件 先来看一个应用场景 我们自己打算搭建一个网站 这个网站有很多个页面 我们为每个页面创建一大堆的css样式 js脚本 然后尝试用webpack进行打包
  • 【微信小程序】小程序获取元素的宽度高度

    微信小程序不能进行DOM操作 所以获取元素的信息就不能按照常规手法来做了 首先需要借助微信给我们开发者提供的一个API来实现返回一个SelectorQuery 对象实例 接下来就好办多了 话不多说 上代码 API wx createSele
  • 关于@RabbitListener注解自动ack的一些猜测

    一 起因 从网上获取到的信息 RabbitListener采用的是自动ack 二 实际现象 然而实际测试中发现 在消费者接受到消息后 消息并有立即从队列中移除 而是会在任务执行完成后才会从队列中移除 三 疑问 按照官方解释 消费者一旦设置了
  • 【Effective C++详细总结】第四章 设计与声明

    个人博客 https blog csdn net Newin2020 spm 1011 2415 3001 5343 专栏地址 C C 知识点 专栏定位 整理一下 C 相关的知识点 供大家学习参考 如果有收获的话 欢迎点赞 收藏 您的支持就
  • 部署Redis服务

    Redis介绍 Remote Dictionary Server 远程字典服务器 是一款高性能的 Key Values 分布式内存数据库 支持数据持久化 定期把内存里数据存储到硬盘 支持多种数据类型 支持master slave模式数据备份