13--memcache与redis

news2024/9/9 1:16:11

前言:数据库读取速度较慢一直是无法解决的问题,大型网站应对的方式主要是使用缓存服务器来缓解这种情况,减少数据库访问次数,以提高动态Web等应用的速度、提高可扩展性。

1、简介

Memcached/redis是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web等应用的速度、 提高可扩展性。

2、memcache

2.1、memcache简介

memcache特点如下:

  • 内置内存存储方式:数据完全不走硬盘,重启操作系统会导致全部数据消失。
  • 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可,所以极其方便读取。 存储项由“键、过期时间、可选的标志及数据”四个部分组成;
  • 不互相通信的分布式:memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共 享信息,由客户端决策信息存放位置。

memcache工作流程:

  1. 检查用户请求的数据是缓存中是否有存在,如果有存在的话,只需要直接把请求的数据返回,无需查询数据库。
  2. 如果请求的数据在缓存中找不到,这时候再去查询数据库。返回请求数据的同时,把数据存储到缓存中一份
  3. 保持缓存的“新鲜性”,每当数据发生变化的时候(比如,数据有被修改,或被删除的情况下),要同步的更新缓存信息,确保用户不会在缓存取到旧的数据。

2.2、memcache部署

下述环境已提前更换阿里基础仓房,epel源,关闭防火墙和selinux

[root@localhost ~]# yum install -y memcached

修改配置文件

[root@localhost ~]# vim /etc/sysconfig/memcached 
[root@localhost ~]# cat /etc/sysconfig/memcached 
PORT="11211"          # Memcached服务监听的端口号
USER="memcached"       # 运行Memcached服务的用户
MAXCONN="1024"         # 允许的最大并发连接数
CACHESIZE="64"         # Memcached的缓存大小,单位为MB,可以根据内存大小进行调整
OPTIONS=""             # 其他启动选项,例如可用于设置内存分配策略或其他配置

启动memcache

[root@localhost ~]# systemctl start memcached

[root@localhost ~]# ps aux | grep memcache
memcach+  62086  0.0  0.1 344100  1688 ?        Ssl  22:20   0:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024
root      62095  0.0  0.0 112824   988 pts/0    R+   22:21   0:00 grep --color=auto memcache

尝试简单的memcache的使用(实际功能中此处为应用程序逻辑设计,和运维无关,此处仅为测试memcache功能使用)

[root@localhost ~]# yum install -y telnet
[root@localhost ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set name 0 900 9
liumuquan
STORED
get name
VALUE name 0 9
liumuquan
END
^]
telnet> quit
Connection closed.


    #    此处set参数解释
    #    set key的名字 key的id号 缓存过期时间(0为无限) 字符串最大长度

memcache这里简单整理了一下,主要重心还是放在redis上,redis对于memcache优势太明显了。

3、redis

3.1、redis简介

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。目前,Vmware在资助着redis项目的开发和维护。目前使用redis公司主要有暴雪、github、digg等。

redis特点:丰富的数据结构、支持持久化、支持事务(可以做集群分布式保证数据安全)、支持主从。

3.2、redis部署

基础环境

IP角色
192.168.188.128master1

安装redis

[root@localhost ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz -O /redis-
[root@localhost ~]# cd /
[root@localhost /]# tar zxf redis-4.0.9.tar.gz 
[root@localhost /]# cd redis-4.0.9
[root@localhost redis-4.0.9]# pwd
/redis-4.0.9
[root@localhost redis-4.0.9]# make

配置开机启动

[root@localhost redis-4.0.9]# mkdir /etc/redis
[root@localhost redis-4.0.9]# cp /redis-4.0.9/redis.conf /etc/redis/6379.conf
[root@localhost redis-4.0.9]# cp /redis-4.0.9/utils/redis_init_script /etc/init.d/redis

编辑启动文件(此处尽量全文复制,后台运作容易遗忘)

[root@localhost redis-4.0.9]# vim /etc/init.d/redis 
[root@localhost redis-4.0.9]# cat /etc/init.d/redis 
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
# chkconfig: 2345 10 90
# description: Start and Stop redis

REDISPORT=6379
#EXEC=/usr/local/bin/redis-server
EXEC=/redis-4.0.9/src/redis-server
#CLIEXEC=/usr/local/bin/redis-cli
CLIEXEC=/redis-4.0.9/src/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF &
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac
[root@localhost redis-4.0.9]# chmod +x /etc/init.d/redis 
[root@localhost redis-4.0.9]# chkconfig --add redis

    #    这个命令是老版本centos添加开机启动项用的,这里是按照官方文档选用的这种方式

[root@localhost redis-4.0.9]# chkconfig redis on

    #    设置redis开机启动

[root@localhost redis-4.0.9]# chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

netconsole     	0:关	1:关	2:关	3:关	4:关	5:关	6:关
network        	0:关	1:关	2:开	3:开	4:开	5:开	6:关
redis          	0:关	1:关	2:开	3:开	4:开	5:开	6:关

    #    这里的0-6对应的是centos的0-6状态,1是单用户模式

[root@localhost redis-4.0.9]# systemctl daemon-reload

    #    重新加载自启动信息

[root@localhost redis-4.0.9]# systemctl start redis
[root@localhost redis-4.0.9]# systemctl status redis

redis测试

[root@localhost redis-4.0.9]# /redis-4.0.9/src/redis-cli 
127.0.0.1:6379> set name liumuquan
OK
127.0.0.1:6379> get name
"liumuquan"
127.0.0.1:6379> 

3.3、redis持久化

3.3.1、持久化简介

Redis 持久化是指将 Redis 内存中的数据持久化保存到硬盘上,以防止服务器重启或宕机时数据丢失。在 Redis 中,有两种主要的持久化方式:RDB(Redis DataBase)和 AOF(Append Only File)。

  1. RDB 持久化

    • RDB 持久化通过定期将 Redis 内存中的数据快照写入磁盘来实现。管理员可以配置 Redis 定期将内存中的数据以快照的形式保存到一个 .rdb 文件中。
    • 这种方式类似于拍照,Redis 在指定的时间点将当前的数据状态保存下来。这种方式适合用于备份,恢复较大数据集时速度较快,因为只需要读取一个文件即可还原数据。
  2. AOF 持久化

    • AOF 持久化则是通过记录 Redis 服务器所执行的写命令(例如 SET、INCR 等)来记录数据变化。这些命令以追加的方式写入一个文件中,称为 AOF 文件。
    • 这种方式类似于录制操作日志,Redis 在执行写命令时将其追加到文件末尾。当服务器需要恢复时,会重新执行 AOF 文件中的命令,从而重建数据状态。
    • AOF 文件通常比 RDB 文件更大,因为它记录了每个写操作,但它提供了更精细的数据恢复和更小的数据丢失风险。

大概可以这么理解

  • RDB 类比:想象你在玩一个游戏,游戏允许你在每个关卡结束时保存进度。这样,即使你在下一个关卡失败,你可以重新加载上一个关卡的进度并继续游戏。

  • AOF 类比:而 AOF 则像你在玩一个没有保存功能的游戏,但它可以记录下你每一步的操作。如果你因为失误或游戏崩溃而需要重新开始,你可以根据你的操作日志重新执行每一步,从而恢复到你离开的地方,虽然过程有点麻烦,但是保证了你不会丢失任何进度。

两种方法虽然有不同,但是由于实际使用中的特殊性,当不需要数据安全时两个全关就行,需要时双开,因RDB数据不实时,但同时使用两者时服务器只会找AOF文件,所以RDB留作万一的手段。

3.3.2、配置redis持久化

RDB默认开启,查看配置

[root@localhost ~]# vim /redis-4.0.9/redis.conf

dbfilename dump.rdb
#使用RDB时,持久化存在本地的文件叫dump.rdb

dir ./
#持久化数据存储在本地的路径

save 900 1
save 300 10
save 60 10000
#触发快照的时机,
#save 多少时间内 被改过多少次
#出发以上条件就会被拍摄快照

stop-writes-on-bgsave-error yes
#当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等,这里配置的是报错拒绝继续写入

rdbcompression yes
#是否启用rdb文件压缩,默认为“yes”,压缩很占用cpu,同时同时可以节省存储空间和减少网络传输时间 

客户端使用命令进行持久化save存储

[root@localhost ~]#./redis-cli -h ip -p port save
#前台进行存储
[root@localhost ~]#./redis-cli -h ip -p port bgsave
#后台进行存储

#每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步脏数据。如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘io操作,可能会严重影响性能。

AOF默认关闭,开启方式

[root@localhost ~]# vim /redis-4.0.9/redis.conf

##此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能  
##只有在“yes”下,aof重写/文件同步等特性才会生效  
appendonly yes  
  
appendfilename appendonly.aof
#指定aof文件名称
 
appendfsync everysec
#指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec
#这行指令设置了 AOF 文件的同步方式。everysec 表示每秒钟将 AOF 文件同步到磁盘一次,以确保即使系统崩溃,最多丢失一秒钟的数据。
 
no-appendfsync-on-rewrite no  
#在aof-rewrite(重写)期间,appendfsync是否暂缓文件同步,"no"表示“不暂缓”,“yes”表示“暂缓”,默认为“no”

auto-aof-rewrite-min-size 64mb
#触发aof rewrite的最小文件尺寸

auto-aof-rewrite-percentage 100
#这行指令设置了触发自动 AOF 重写的增长百分比。100 表示当当前 AOF 文件大小比上一次重写时的大小增长了 100%(即翻倍)时,触发自动 AOF 重写。重写是为了使aof体积保持最小,而确保保存最完整的数据。

3.4、redis主从

3.4.1、redis主从简介

  1. 用法

    Redis支持类似于MySQL的主从结构,允许配置一主多从甚至多级从结构。主从结构旨在提供冗余备份和增强读性能,例如将性能消耗较大的SORT操作分担给从服务器。Redis的主从同步是异步进行的,不会影响主服务器的主要逻辑或性能。在主从架构中,可以考虑关闭主服务器的数据持久化,由从服务器承担这一任务,以提高主服务器的处理性能。通常情况下,从服务器设置为只读,以防止误修改数据,但仍可接受CONFIG等命令。对于不安全的网络环境,建议重命名重要命令以避免误操作。

  2. 原理

    从服务器通过发送SYNC指令向主服务器请求同步。主服务器收到SYNC指令后,会执行BGSAVE命令生成RDB文件进行数据持久化。在持久化期间,主服务器将所有写操作缓存在内存中。BGSAVE完成后,主服务器将RDB文件发送给从服务器,从服务器将文件存储到磁盘并加载到内存。然后,主服务器以Redis协议格式将缓存的写操作发送给从服务器。即使多个从服务器同时发出SYNC指令,主服务器也只执行一次BGSAVE,并将生成的RDB文件发送给所有从服务器。在Redis 2.8版本之前,主从断开连接后会进行全量数据同步,而2.8版本后支持高效的增量同步,显著降低了连接断开恢复成本。主服务器在内存中维护缓冲区,用于存储将发送给从服务器的内容。如果从服务器与主服务器连接断开,从服务器会尝试重新连接,成功后发送“希望同步的主服务器ID”和“希望请求的复制偏移量”。主服务器验证ID匹配后,检查缓冲区中是否存在请求的偏移量,并根据需要向从服务器发送增量内容。增量同步功能需要服务器端支持全新的PSYNC指令,该指令从Redis 2.8版本开始提供。

3.4.2、 redis主从部署

3.4.2.1、基础环境
IP角色
192.168.188.128master
192.168.188.129slave1
192.168.188.130slave2

在slave1和slave2上部署上redis

slave1操作如下

[root@localhost /]# tar xf redis-4.0.9.tar.gz 
[root@localhost /]# cd /redis-4.0.9
[root@localhost redis-4.0.9]# make
[root@localhost redis-4.0.9]# mkdir /etc/redis
[root@localhost redis-4.0.9]# cp /redis-4.0.9/redis.conf /etc/redis/6379.conf
[root@localhost redis-4.0.9]# cp /redis-4.0.9/utils/redis_init_script /etc/init.d/redis
[root@localhost redis-4.0.9]# vim /etc/init.d/redis
[root@localhost redis-4.0.9]# vim /etc/init.d/redis 
[root@localhost redis-4.0.9]# cat /etc/init.d/redis 
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
# chkconfig: 2345 10 90
# description: Start and Stop redis

REDISPORT=6379
#EXEC=/usr/local/bin/redis-server
EXEC=/redis-4.0.9/src/redis-server
#CLIEXEC=/usr/local/bin/redis-cli
CLIEXEC=/redis-4.0.9/src/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF &
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac
[root@localhost redis-4.0.9]# scp /etc/init.d/redis 192.168.188.130:/etc/init.d/
[root@localhost redis-4.0.9]# chmod +x /etc/init.d/redis 
[root@localhost redis-4.0.9]# chkconfig --add redis
[root@localhost redis-4.0.9]# chkconfig redis on
[root@localhost redis-4.0.9]# systemctl daemon-reload
[root@localhost redis-4.0.9]# systemctl start redis

slave2操作同slave1

3.4.2.2、master配置
[root@localhost ~]# vim /etc/redis/6379.conf

#bind 127.0.0.1
#注释掉
bind 0.0.0.0
#增加监听地址为所有ip

#protected-mode yes
protected-mode no
#关闭保护模式



[root@localhost ~]# systemctl restart redis
3.4.2.3、salve1配置
[root@localhost redis-4.0.9]# vim /etc/redis/6379.conf

slaveof 192.168.188.128 6379
#bind 127.0.0.1
bind 0.0.0.0
#protected-mode yes
protected-mode no


[root@localhost redis-4.0.9]# systemctl restart redis
3.4.2.3、salve2配置

同slave1

3.4.3、redis主从测试

在master上

[root@localhost ~]# /redis-4.0.9/src/redis-cli 
127.0.0.1:6379> set your_id 1210
OK
127.0.0.1:6379> get your_id
"1210"
#查询主从状态
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.188.129,port=6379,state=online,offset=1557,lag=1
slave1:ip=192.168.188.130,port=6379,state=online,offset=1557,lag=0
master_replid:65eda2694558d007f08f5645d92fb67c4423c265
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1557
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1557
127.0.0.1:6379> 

在slave1上

[root@localhost redis-4.0.9]# /redis-4.0.9/src/redis-cli
127.0.0.1:6379> get your_id
"1210"
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.188.128
master_port:6379
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:1669
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:65eda2694558d007f08f5645d92fb67c4423c265
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1669
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:253
repl_backlog_histlen:1417
127.0.0.1:6379> 

主从架构实现,可以保持数据同步,但此时集群无法实现灾备冗余,主服务器宕机时,从服务器此时无法承担主服务器角色,需要使用redis-sentine来实现。

3.5、redis-sentinel

3.5.1、redis-sentinel简介

Redis Sentinel是Redis官方推荐的高可用性(HA)解决方案,允许你创建一个能够自动处理各种故障的Redis部署,无需人工干预。

作用:

  1. 检测Master状态。
  2. 在Master异常时进行Master-Slave切换,将一个Slave提升为新的Master,原Master降级为Slave。
  3. 切换后,会自动更新配置文件:master_redis.conf会新增slaveof配置,sentinel.conf中的监控目标也会相应调整。

工作方式:

  1. 每个Sentinel每秒向已知的Master、Slave和其他Sentinel实例发送PING命令。
  2. 如果一个实例超过配置的down-after-milliseconds时间未响应PING命令,Sentinel会将其标记为主观下线。
  3. Sentinel持续检查主观下线的Master状态,确认是否达到客观下线条件。
  4. 当足够多的Sentinel在指定时间内确认主观下线状态时,Master会被标记为客观下线。

3.5.2、redis-sentinel部署

继续使用上面的环境

1)每台机器上修改redis主配置文件设置:bind 0.0.0.0(略)

2)每台机器上修改sentinel配置文件:

master如下

[root@localhost ~]# vim /redis-4.0.9/sentinel.conf
#sentinel monitor mymaster 127.0.0.1 6379 2
sentinel monitor mymaster 192.168.188.128 6379 2

    #    当集群中有2个(超过半数)sentinel认为master死了时,才能真正认为该master已经不可用了。

#sentinel down-after-milliseconds mymaster 30000
sentinel down-after-milliseconds mymaster 3000

    #    3秒内没收到有效回复后认定主服务器离线(默认30秒)

#sentinel failover-timeout mymaster 180000
sentinel failover-timeout mymaster 10000

    #    故障发生后10秒内完成选举,若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。


# protected-mode no
protected-mode no

    #    关闭保护模式

slave1、slave2同上

3)启动哨兵,三台都要启动

[root@localhost ~]# cd /redis-4.0.9
[root@localhost redis-4.0.9]# ./src/redis-sentinel sentinel.conf 

3.5.3、redis-sentinel测试

关闭主服务器,观察从服务器改变状态

在master上使用ctrl+c停止当前进程

[root@localhost redis-4.0.9]# systemctl stop redis

观察从服务器返回信息

 选举slave2成为主服务器,slave2状态如下

[root@localhost redis-4.0.9]# /redis-4.0.9/src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.188.129,port=6379,state=online,offset=63531,lag=0
slave1:ip=192.168.188.128,port=6379,state=online,offset=63531,lag=0
master_replid:b417e01353b4a576aaba97987acd33602ba5d9df
master_replid2:bd33fbabce342aeb3ec5c5aa85aaf1a2e5a02b23
master_repl_offset:63676
second_repl_offset:4257
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:63676
127.0.0.1:6379> 

3.6、redis使用经验

  1. Master的工作不应包括持久化任务,如RDB快照和AOF日志文件。
  2. 如果数据非常重要,可以让某个Slave开启AOF备份数据,设置为每秒同步一次。
  3. 为了提高主从复制的速度和连接稳定性,最好将Master和Slave部署在同一个局域网内。
  4. 在主库压力较大时,应尽量避免增加从库,可以通过为现有从库增加从库来缓解压力。
  5. 主从复制应采用单向链表结构而不是树状结构,例如:Master(写) <- Slave1(读) <- Slave2(读) <- Slave3(读)... 这种结构有助于提高稳定性和处理单点故障问题。如果Master宕机,可以立即将Slave1提升为新的Master,其他从库保持不变。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里面试:canal+MQ,会有乱序的问题吗?

阿里面试&#xff1a;canalMQ&#xff0c;会有乱序的问题吗&#xff1f; 尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题…

一个 Docker 搭建的自动化电视剧下载和管理工具

大家好,我是CodeQi! 一个标准的“追剧狂人”。每周都有新剧上线,每天都要时刻关注各大影视平台的更新,这无疑是一项体力与脑力并存的艰巨任务。 于是,我决定为自己打造一个自动化的电视剧下载和管理工具。作为一个程序员,用 Docker 搭建这种自动化工具简直是小菜一碟。…

Vue组件通信props和$emit用法

父传子&#xff0c;通过props 子传父&#xff0c;通过$emit App.vue <template><div class"app" style"border: 3px solid #000; margin: 10px">我是APP组件<!-- 1.给组件标签&#xff0c;添加属性方式 赋值 --><!-- 添加属性传值 …

PointCloudLib GridMinimum获取栅格最低点 C++版本

测试效果 简介 在点云库(Point Cloud Library, PCL)中,如果你想要获取一个栅格(Grid)内的最低点,这通常意味着你需要先对点云数据进行某种形式的栅格化处理,然后在每个栅格内寻找最低的点。 测试代码 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointC…

2024透明加密软件最新推荐丨11款好用的透明加密软件

在数字化时代&#xff0c;文件与数据安全愈发重要&#xff0c;保护信息安全刻不容缓。文件加密软件应运而生&#xff0c;成为了信息安全的重要帮手。透明加密技术凭借众多的优点备受青睐。那么&#xff0c;什么是透明加密技术呢&#xff1f; 透明加密技术是一种在不影响用户正…

旷野之间11 - 开源 SORA 已问世!训练您自己的 SORA 模型!

​​​​​ 目前最接近 SORA 的开源模型是 Latte,它采用了与 SORA 相同的 Vision Transformer 架构。Vision Transformer 究竟有何独特之处?它与之前的方法有何不同? Latte 尚未开源其文本转视频训练代码。我们复制了论文中的文本转视频训练代码,并将其提供给任何人使用,…

帕金森小伙伴必看!这些维生素让你的生活更“稳“定!

&#x1f308; 嗨&#xff0c;亲爱的小伙伴们&#xff01;今天来跟大家聊聊帕金森病患者应该补充哪些维生素的小知识&#xff0c;让我们的身体更健康&#xff0c;生活更美好哦&#xff01;&#x1f609; &#x1f34e; 维生素C 你知道吗&#xff1f;维生素C不仅能让我们的皮肤…

【Linux】内核文件系统系统调用流程摸索

内核层可以看到当前调用文件处理的进程ID 这个数据结构是非常大的&#xff1a; 我们打印的pid,tgid就是从这里来的&#xff0c;然后只需要找到pid_t的数据类型就好了。 下图这是运行的日志信息&#xff1a; 从上述日志&#xff0c;其实我也把write的系统调用加了入口的打印信…

ADS基础教程24 - Gerber文件的导入

EM介绍 一、引言二、基本概念1.仿真文件下载2.仿真文件介绍 二、导入步骤1.新建workspace2.选择Layout结构3.导入设计4.选择文件类型5.导入文件6.预览文件内容7.铜皮离散问题 四、总结 一、引言 本章节开始介绍在ADS中进行PCB仿真&#xff0c;首先讲解如何将Gerber文件导入到A…

Spark RDD优化

Spark RDD优化 一、分区优化二、持久化优化三、依赖优化四、共享变量优化五、提交模式与运行模式优化六、其他优化 一、分区优化 分区数调整&#xff1a;RDD的分区数可以通过repartition和coalesce方法进行调整。合理的分区数可以提高并行度&#xff0c;但过多的分区会增加管…

2024年Wolf沃尔夫奖数学奖得主出炉:诺加·阿隆(Noga Alon)、阿迪·萨莫尔(Adi Shamir)

沃尔夫基金会官网&#xff1a;2024年沃尔夫数学奖联合颁发给了以色列魏茨曼科学研究所的阿迪萨莫尔 &#xff08;Adi Shamir&#xff0c;1952 -&#xff09; 教授和美国普林斯顿大学的诺加阿隆&#xff08;Noga Alon&#xff0c;1963 -&#xff09; 教授&#xff0c;表彰他们对…

ADI新型充电器解决方案可实现电池堆电压和充电效率

就目前而言&#xff0c;这可能是生活中zui常见的问题了。世纪之交&#xff0c;电池&#xff08;尤其是基于锂离子的电池&#xff09;成本的降低和性能的提高&#xff0c;推动了电池供电的储能和便携式设备的稳步增长。此外&#xff0c;超级电容器由于具有独特的性质&#xff0c…

引用类飘红,但是导入失败

背景&#xff1a; 引用类飘红&#xff0c;且显示可导入&#xff0c;但是导入一直失败。 列如下图&#xff0c;引导你可以导入依赖包&#xff0c;但是你发现按了导入他是导入不了的&#xff0c;就一直失败&#xff0c;就一直飘红 解决方案&#xff1a; 我们用一下idea的清理不…

IDEA中Debug的使用

自定义功能图表 功能说明 光标回到Debug行 执行到光标所在行 Force Step into Step into 进入JDK的配置 step into做了下述配置后&#xff0c;也可以和force step into一样进入到JDK中。 Trace Current Stream Chain Reset Frame 重置方法入栈 Force Return Break Point四…

【Spring Cloud精英指南】深度探索与实战:网关Gateway的高级应用与最佳实践

1. 前言 Spring Cloud Gateway提供了一个在Spring生态系统之上构建的API网关&#xff0c;包括&#xff1a;Spring 5&#xff0c;Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的路由方式&#xff0c;并为它们提供一些网关基本功能&#xff0c;…

警惕:与ChatGPT共享业务数据可能十分危险

您已经在使用ChatGPT了吗&#xff1f;或者您正在考虑使用它来简化操作或改善客户服务&#xff1f;虽然ChatGPT提供了许多好处&#xff0c;但重要的是&#xff0c;您要意识到与ChatGPT这样的人工智能工具共享敏感业务数据相关的安全风险。下面&#xff0c;我们概述了一些关键问题…

什么是 C 语言中的代码优化技巧?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; &#x1f4d9;C 语言百万年薪修炼课程 【https://dwz.mosong.cc/cyyjc】通俗易懂&#xff0c;深入浅出&#xff0c;匠心打磨&#xff0c;死磕细节&#xff0c;6年迭代&…

Javaweb09-数据库连接池技术

数据库连接池 1.数据库连接池基本概念&#xff1a; JDBC连接池是一个管理数据库连接的重要工具&#xff0c;它能够显著提高应用程序与数据库之间的性能和效率。连接池通过预先创建和维护一组数据库连接&#xff0c;而不是每次请求都创建新的连接&#xff0c;从而避免了频繁的…

js字符串文字添加不同颜色,replace的妙用$1...$9

更改字符串第一个数字为红色显示&#xff0c;第二个数字为黄色显示 $1匹配的是正则第一个括号选中的字符串&#xff0c;可以使用正则不断用括号匹配然后更改样式 const testStr "剩余12个名额&#xff0c;截止时间12月25日" testStr this.testStr.replace(/(\d)(\D…

【Python】 已解决:Python编码问题导致的SyntaxError

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;Python编码问题导致的SyntaxError 一、分析问题背景 在使用Python进行编程时&#xff0c;有时会遇到编码相关的问题。特别是在处理包含非ASCII字符&#xff08;…