企业化运维(6)_redis数据库

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

redis支持的数据类型

字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)

###1.软件安装部署### 

编译安装
[root@server1 ~]# tar zxf redis-6.2.4.tar.gz
[root@server1 ~]# cd redis-6.2.4/
[root@server1 redis-6.2.4]# make
[root@server1 redis-6.2.4]# make install

[root@server1 redis-6.2.4]# cd utils/
[root@server1 utils]# vim install_server.sh
注释以下行
...
#_pid_1_exe="$(readlink -f /proc/1/exe)"
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
#       echo "This systems seems to use systemd."
#       echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
#       exit 1
#fi
#unset _pid_1_exe

运行安装脚本
[root@server1 utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

[root@server1 utils]# netstat -antlp|grep :6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      17478/redis-server
tcp6       0      0 ::1:6379                :::*                    LISTEN      17478/redis-server

[root@server1 utils]# vim /etc/redis/6379.conf
#监听本机所有接口
bind *

重启服务
[root@server1 utils]# /etc/init.d/redis_6379 restart
[root@server1 utils]# netstat -antlp|grep :6379
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      17533/redis-server

 

运行自带的安装程序,安装失败,修改文件,重新安装。

此时切换到配置目录下,可以看到自动生成了配置文件,查看端口,端口开启。修改该配置文件,重启服务。

###2.redis常用指令###

config get *   //查看配置
select 1       //选择数据库
flushdb        //清空当前数据库
flushall       //清空所有数据库
move key 1     //移动key
del key        //删除
rename oldkey newkey //改名
expire key 10  //设置过期时间
persist key    //设置持久化
keys user*     //查询
exists key     //判断是否存在

###3.redis主从复制### 

slaveof 172.25.0.11 6379
min-slaves-to-write <slave 数量 >
min-slaves-max-lag < 秒数 >
Redis 使用异步复制,因此无法确保 slave 是否实际接收到给定的写命令

(1)master节点操作

创建redis实例,直接从server1上拷贝编译好的redis程序,两边都要安装rsync命令

[root@server1 ~]# cd /usr/local/bin/
[root@server1 bin]# yum install -y rsync
[root@server3 ~]# yum install -y rsync

拷贝程序
[root@server1 bin]# rsync  -a redis-* server3:/usr/local/bin/
[root@server1 ~]# rsync  -a redis-6.2.4 server3:

(2)slave节点配置 

server3上完成redis部署
[root@server3 ~]# cd /usr/local/bin/
[root@server3 bin]# ls
redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server

[root@server3 ~]# cd redis-6.2.4/
[root@server3 redis-6.2.4]# cd utils/

[root@server3 utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

[root@server3 utils]# vim /etc/redis/6379.conf
...
bind *
replicaof 192.168.56.11 6379

[root@server3 ~]# /etc/init.d/redis_6379  restart

其它redis节点依次类推

 

server2以此类推

(3)测试主从复制

master写入数据
[root@server1 ~]# redis-cli
127.0.0.1:6379> info
127.0.0.1:6379> set name westos

查看slave端是否同步
[root@server3 ~]# redis-cli
127.0.0.1:6379> get name
"westos"

 

 ###4.redis高可用###

Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中。sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。

sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。

原理:
一主两从的情况下,当master与两个slave或因网络关系断掉的情况下,客户端并不知道master失联,会持续写入数据,但此时slave端已经不能复制数据。

slave会选举一个变成新的master,形成新的主从关系。

如果此时master恢复,重新加入主从关系,会转为一个新的slave,但因为超时连接,会清除自己的所有数据,那么客户端写入的数据就会丢失。

如果需要解决此问题,则需要两个slave同时认定不能连接master,或者,超过设定时间不能连接,则此时master端会拒绝客户端继续写入,那么重新接入变成slave时就不会造成数据丢失。

(1)配置 

在server1主机中,配置sentinel,并复制到server2和server3中。

[root@server1 redis-6.2.4]# cp sentinel.conf /etc/redis/
[root@server1 redis-6.2.4]# cd /etc/redis/
[root@server1 redis]# vim sentinel.conf

port 26379

daemonize no

pidfile /var/run/redis-sentinel.pid

logfile ""

dir /tmp

sentinel monitor mymaster 192.168.56.11 6379 2  ##master为server1,2表示需要两票通过,这台主机就被认定宕掉

sentinel down-after-milliseconds mymaster 10000   ##连接超时为10s

acllog-max-len 128

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 180000

sentinel deny-scripts-reconfig yes

SENTINEL resolve-hostnames no

SENTINEL announce-hostnames no

拷贝配置文件
[root@server1 redis]# scp sentinel.conf server2:/etc/redis/
[root@server1 redis]# scp sentinel.conf server3:/etc/redis/

启动服务
[root@server1 redis]# redis-sentinel /etc/redis/sentinel.conf

其它主机直接启动服务,无需更改配置文件

[root@server2 ~]# redis-sentinel /etc/redis/sentinel.conf

[root@server3 ~]# redis-sentinel /etc/redis/sentinel.conf

 

(2)测试

关闭redis master
[root@server1 ~]# redis-cli shutdown

redis集群会自动切换master

当原来的master再次启动后,会以slave身份加入集群

[root@server1 ~]# /etc/init.d/redis_6379 start

[root@server1 ~]# redis-cli info

###5.redis集群###

(1)配置集群

[root@server1 redis-6.2.4]# cd utils/
[root@server1 utils]# cd create-cluster/
[root@server1 create-cluster]# ./create-cluster start
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006


[root@server1 create-cluster]# ./create-cluster create
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:30005 to 127.0.0.1:30001
Adding replica 127.0.0.1:30006 to 127.0.0.1:30002
Adding replica 127.0.0.1:30004 to 127.0.0.1:30003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 97659fdbb23eb6885d5b8332be4732757859abe9 127.0.0.1:30001
   slots:[0-5460] (5461 slots) master
M: 61a153651897aadf57ed62e0e27789db52f4549b 127.0.0.1:30002
   slots:[5461-10922] (5462 slots) master
M: 258d4258594f6c7f81f8bc18000e24aa45b08ac4 127.0.0.1:30003
   slots:[10923-16383] (5461 slots) master
S: 60e4a9a86c6cea09703e7aa45cc363f142101876 127.0.0.1:30004
   replicates 97659fdbb23eb6885d5b8332be4732757859abe9
S: 73083399d7e8f6374a50aaef208dd7f17b2ebde1 127.0.0.1:30005
   replicates 61a153651897aadf57ed62e0e27789db52f4549b
S: d4743d579d365f335a5abead72f618212ec700d4 127.0.0.1:30006
   replicates 258d4258594f6c7f81f8bc18000e24aa45b08ac4
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join

>>> Performing Cluster Check (using node 127.0.0.1:30001)
M: 97659fdbb23eb6885d5b8332be4732757859abe9 127.0.0.1:30001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: d4743d579d365f335a5abead72f618212ec700d4 127.0.0.1:30006
   slots: (0 slots) slave
   replicates 258d4258594f6c7f81f8bc18000e24aa45b08ac4
M: 61a153651897aadf57ed62e0e27789db52f4549b 127.0.0.1:30002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: 258d4258594f6c7f81f8bc18000e24aa45b08ac4 127.0.0.1:30003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 60e4a9a86c6cea09703e7aa45cc363f142101876 127.0.0.1:30004
   slots: (0 slots) slave
   replicates 97659fdbb23eb6885d5b8332be4732757859abe9
S: 73083399d7e8f6374a50aaef208dd7f17b2ebde1 127.0.0.1:30005
   slots: (0 slots) slave
   replicates 61a153651897aadf57ed62e0e27789db52f4549b
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

查看命令帮助
[root@server1 create-cluster]# redis-cli --cluster help
获取集群状态
[root@server1 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
127.0.0.1:30001 (97659fdb...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:30002 (61a15365...) -> 0 keys | 5462 slots | 1 slaves.
127.0.0.1:30003 (258d4258...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:30001)
M: 97659fdbb23eb6885d5b8332be4732757859abe9 127.0.0.1:30001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: d4743d579d365f335a5abead72f618212ec700d4 127.0.0.1:30006
   slots: (0 slots) slave
   replicates 258d4258594f6c7f81f8bc18000e24aa45b08ac4
M: 61a153651897aadf57ed62e0e27789db52f4549b 127.0.0.1:30002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: 258d4258594f6c7f81f8bc18000e24aa45b08ac4 127.0.0.1:30003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 60e4a9a86c6cea09703e7aa45cc363f142101876 127.0.0.1:30004
   slots: (0 slots) slave
   replicates 97659fdbb23eb6885d5b8332be4732757859abe9
S: 73083399d7e8f6374a50aaef208dd7f17b2ebde1 127.0.0.1:30005
   slots: (0 slots) slave
   replicates 61a153651897aadf57ed62e0e27789db52f4549b
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

 

(2)测试集群 

连接集群
[root@server1 create-cluster]# redis-cli -c -p 30001 info    ##-c表示操作的是一个集群,-p指定端口

在slave上写数据,数据会被重定向到slave对应的master
[root@server1 create-cluster]# redis-cli -c -p 30004
127.0.0.1:30004> set name wxh
-> Redirected to slot [5798] located at 127.0.0.1:30002
OK

 

关闭redis实例,集群自动切换
[root@server1 create-cluster]# redis-cli -c -p 30002 shutdown

启动redis实例,被停掉的30002会自动启动起来,此时30002变成slave
[root@server1 create-cluster]# ./create-cluster  start
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006

当有一组主从同时被down,则整个集群都被down掉不可用
[root@server1 create-cluster]# redis-cli -c -p 30002 shutdown
[root@server1 create-cluster]# redis-cli -c -p 30004 shutdown
[root@server1 create-cluster]# redis-cli -c -p 30001
127.0.0.1:30001> get name
(error) CLUSTERDOWN The cluster is down

启动redis实例,集群恢复
[root@server1 create-cluster]# ./create-cluster  start
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006

数据完好
[root@server1 create-cluster]# redis-cli -c -p 30001 get name
"wxh"

 

(3)添加节点和分片

再启动两个redis实例
[root@server1 create-cluster]# vim create-cluster
...
NODES=8
...
[root@server1 create-cluster]# ./create-cluster start
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006
Starting 30007
Starting 30008

添加集群节点
[root@server1 create-cluster]# redis-cli --cluster add-node 127.0.0.1:30007 127.0.0.1:30001
添加slave节点
[root@server1 create-cluster]# redis-cli --cluster add-node 127.0.0.1:30008 127.0.0.1:30001 --cluster-slave --cluster-master-id 2cfe812f247254aa593f07bcc5e15291b77ecef6

迁移hash槽
[root@server1 create-cluster]# redis-cli --cluster reshard 127.0.0.1:30001   ##重新分配哈希槽
>>> Performing Cluster Check (using node 127.0.0.1:30001)
M: 97659fdbb23eb6885d5b8332be4732757859abe9 127.0.0.1:30001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: d4743d579d365f335a5abead72f618212ec700d4 127.0.0.1:30006
   slots: (0 slots) slave
   replicates 258d4258594f6c7f81f8bc18000e24aa45b08ac4
S: 61a153651897aadf57ed62e0e27789db52f4549b 127.0.0.1:30002
   slots: (0 slots) slave
   replicates 73083399d7e8f6374a50aaef208dd7f17b2ebde1
M: 2cfe812f247254aa593f07bcc5e15291b77ecef6 127.0.0.1:30007
   slots: (0 slots) master
   1 additional replica(s)
M: 258d4258594f6c7f81f8bc18000e24aa45b08ac4 127.0.0.1:30003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 60e4a9a86c6cea09703e7aa45cc363f142101876 127.0.0.1:30004
   slots: (0 slots) slave
   replicates 97659fdbb23eb6885d5b8332be4732757859abe9
S: 2cc38329498a358c6e7486bb4621017261a63db3 127.0.0.1:30008
   slots: (0 slots) slave
   replicates 2cfe812f247254aa593f07bcc5e15291b77ecef6
M: 73083399d7e8f6374a50aaef208dd7f17b2ebde1 127.0.0.1:30005
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 3000    ##要分出去多少哈希槽
What is the receiving node ID? 2cfe812f247254aa593f07bcc5e15291b77ecef6   ##接收节点的id
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: all   ##从哪些节点取哈希槽

Ready to move 3000 slots.
  Source nodes:
    M: 97659fdbb23eb6885d5b8332be4732757859abe9 127.0.0.1:30001
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    M: 258d4258594f6c7f81f8bc18000e24aa45b08ac4 127.0.0.1:30003
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    M: 73083399d7e8f6374a50aaef208dd7f17b2ebde1 127.0.0.1:30005
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
  Destination node:
    M: 2cfe812f247254aa593f07bcc5e15291b77ecef6 127.0.0.1:30007
       slots: (0 slots) master
       1 additional replica(s)

将30007节点加入集群中,但是并没有分配slot,所以这个节点并没有真正的开始分担集群工作,所以要进行分片。重新分片基本上意味着将哈希槽从一组节点移动到另一组节点,并且像群集创建一样。 

把30008节点加入到30001节点的集群中。指定masterid为30007的id,检查集群,此时30007有一个从节点。 

给30007分配哈希槽(交互式)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vuetify3:关于两组件并列刷新变成两行并非一行问题,满足响应式

我们在使用vuetify3 开发站点的时候&#xff0c;我们需要两个组件并排&#xff0c;而且需要满足响应式&#xff1a; 那我们如何解决这个问题呢&#xff1f; 我们在开发的时候&#xff0c;一开始我们直接使用官方提供的弹性布局直接上代码&#xff1a; <template><v…

InnoDB 表空间2---系统表空间

系统表空间 了解完了独立表空间的基本结构&#xff0c;系统表空间的结构也就好理解多了&#xff0c;系统表空间的结构和独立表空间基本类似&#xff0c;只不过由于整个MySQL进程只有一个系统表空间&#xff0c;在系统表空间中会额外记录一些有关整个系统信息的页&#xff0c;所…

docker仓库--centos7.9部署harbor详细过程与使用以及常见问题

文章目录 前言1.docker-compose是什么2.harbor是什么 centos7部署harbor详细过程与使用环境一、部署docker二、部署harbor1.下载docker-compose工具2.harbor安装3.拷贝样本文件&#xff0c;并修改文件4.安装harbor&#xff0c;安装完成自行启动5.查看 三、harbor的使用1.创建项…

「C++系列」C++ 数据类型

文章目录 一、C 数据类型二、C 数据类型占位与范围三、类型转换1. 隐式类型转换&#xff08;Automatic Type Conversion&#xff09;2. 显式类型转换&#xff08;Explicit Type Conversion&#xff09;3. 示例代码 四、数据类型案例1. 整型2. 浮点型3. 字符型4. 布尔型5. 枚举类…

Redis基础教程(四):redis键(key)

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

论文阅读之旋转目标检测ARC:《Adaptive Rotated Convolution for Rotated Object Detection》

论文link&#xff1a;link code&#xff1a;code ARC是一个改进的backbone&#xff0c;相比于ResNet&#xff0c;最后的几层有一些改变。 Introduction ARC自适应地旋转以调整每个输入的条件参数&#xff0c;其中旋转角度由路由函数以数据相关的方式预测。此外&#xff0c;还采…

【PL理论深化】(13) 变量与环境:文法结构 | 真假表达式:isZero E | let 表达式叠放 | 定义的规则 | 条件语句的使用

&#x1f4ac; 写在前面&#xff1a;从现在开始&#xff0c;让我们正式设计和实现编程语言。首先&#xff0c;让我们扩展在之前定义的整数表达式语言&#xff0c;以便可以使用变量和条件表达式。 目录 0x00 文法结构 0x01 真假表达式&#xff1a;isZero E 0x02 let 表达式叠…

Leetcode 78 数组子集

题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的 子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1…

Python-数据分析组合可视化实例图【附完整源码】

数据分析组合可视化实例图 开篇&#xff1a;应女朋友的要求&#xff0c;于是写下了这篇详细的数据可视化代码及完整注释 一&#xff1a;柱状图、折线图横向组合网格布局 本段代码使用了pyecharts库来创建一个包含多个图表&#xff08;柱状图、折线图&#xff09;和网格布局的…

服装分销的系统架构

背景 服装的分销规则&#xff1a;组织结构由总公司代理商专卖店构成。总公司全权负责销售业务&#xff0c;并决定给代理商的份额&#xff1b;代理商再给货到专卖店&#xff0c;整个组织机构呈现树状结构&#xff1b;上级机构对下级机构拥有控制权&#xff0c;主要控制其销售的服…

利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro API

谷歌在2024年4月发布了全新一代的多模态模型Gemini 1.5 Pro&#xff0c;Gemini 1.5 Pro不仅能够生成创意文本和代码&#xff0c;还能理解、总结上传的图片、视频和音频内容&#xff0c;并且支持高达100万tokens的上下文。在多个基准测试中表现优异&#xff0c;性能超越了ChatGP…

MySQL高阶:事务和并发

事务和并发 1. 事务创建事务 2. 并发和锁定并发问题 3. 事务隔离等级3.1 读取未提交隔离级别3.2 读取已提交隔离级别3.3 重复读取隔离级别3.4 序列化隔离级别 4. 死锁 1. 事务 事务&#xff08;trasaction&#xff09;是完成一个完整事件的一系列SQL语句。这一组SQL语句是一条…

植物大战僵尸融合版2024最新版本登场,绝对能满足你的所有期待!

一开场&#xff0c;就让我们直切主题。各位玩家&#xff0c;是否已对《植物大战僵尸》中的传统植物和僵孠对决失去了新鲜感&#xff1f;是否渴望体验更具创意、更富挑战性的游戏玩法&#xff1f;那么&#xff0c;让我来告诉你&#xff0c;《植物大战僵尸融合版》1新版本的登场&…

AI论文速读 | 2024[KDD]ASeer基于异步时空图卷积网络的不规则交通时间序列预测

题目&#xff1a;Irregular Traffic Time Series Forecasting Based on Asynchronous Spatio-Temporal Graph Convolutional Network 作者&#xff1a;Weijia Zhang, Le Zhang, Jindong Han&#xff08;韩金栋&#xff09;, Hao Liu&#xff08;刘浩&#xff09;, Jingbo Zhou…

纯硬件FOC驱动BLDC

1. 硬件FOC 图 1 为采用 FOC 的方式控制 BLDC 电机的过程&#xff0c;经由 FOC 变换( Clark 与 Park 变换) &#xff0c;将三相电流转换为空间平 行电流 ID 与空间垂直电流 IQ。经过 FOC 逆变化逆( Clark 变换与逆 Park 变换) &#xff0c;将两相电流转换为三相电流用于控 制电…

容器:deque

以下是对于deque容器知识的整理 1、构造 2、赋值 3、大小操作 4、插入 5、删除 6、数据存取 7、排序 #include <iostream> #include <deque> #include <algorithm> using namespace std; /* deque容器&#xff1a;双端数组&#xff0c;可以对头端进行插入删…

网页用事件监听器播放声音

一、什么是监听器&#xff1a; 在前端页面中&#xff0c;事件监听器&#xff08;Event Listener&#xff09;是一种编程机制&#xff0c;它允许开发者指定当特定事件&#xff08;如用户点击按钮、鼠标悬停、页面加载完成等&#xff09;发生时执行特定的代码块。简而言之&#x…

clonezilla(再生龙)克隆物理机linux系统,然后再去另一台电脑安装

前言: 总共需要2个u盘,一个装再生龙系统,一个是使用再生龙把硬盘备份到另一个盘里面,恢复的时候,先使用再生龙引导,然后再插上盘进行复制 1.制作启动u盘 1.1下载再生龙Clonezilla 下載 1.2下载UltraISO(https://cn.ultraiso.net/uiso9_cn.exe) 1.3 打开UltraISO,选择co…

Vue 解决报错 VM6290:1 Uncaught SyntaxError: Unexpected identifier ‘Promise‘

Vue 报错 VM6290:1 Uncaught SyntaxError: Unexpected identifier ‘Promise’ 排查 控制台报了一个错误 , Uncaught SyntaxError: Unexpected identifier ‘Promise’&#xff0c;网上查到的方法是 缺少符号&#xff0c;语法写法错误&#xff0c;但这些都没有解决我的问题&am…

用Lobe Chat部署本地化, 搭建AI聊天机器人

Lobe Chat可以关联多个模型&#xff0c;可以调用外部OpenAI, gemini,通义千问等, 也可以关联内部本地大模型Ollama, 可以当作聊天对话框消息框来集成使用 安装方法参考&#xff1a; https://github.com/lobehub/lobe-chat https://lobehub.com/zh/docs/self-hosting/platform/…