SCAN listener and Node listener – How does it work
http://www.mydbspace.com/?
p=324
Single Client Access Name (SCAN) is new feature of oracle 11gR2 grid infrastructure. This idea make client transparent to database servers. Any change in terms of adding deleting nodes and even moving database cluster to a new datacenter can be achieved without
changing anything in the client. That makes JDBC URL to use just a simple name to access the cluster independent of node name and database SIDs.
Scan listeners running on RAC only accept connections and pass them onto a Node listener.
When the client makes a connection, Connection packet is sent to a Scan listener. Connection is then redirected to a Node Listener. Node Listener forks the shadow process for the dedicated connection to use or passes the connection onto dispatcher for shared
server connection model.
The most intense operation a TNS listener does, the fork (bequeath) of a shadow process is completed by the Node listener.
Let us see how we can configure node listener for each of the database running on the RAC cluster. I have configured SCAN listener in 1521. I have two databases TST, PRD running on a two node cluster. My node names arerock,water.
These are the status of my SCAN listeners.
LISTENER_SCAN1 is no node water:
+ASM2:water.localdomain:oracle$ lsnrctl status LISTENER_SCAN1
LSNRCTL for Linux: Version 11.2.0.1.0 – Production on 01-AUG-2011 09:02:19
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
STATUS of the LISTENER
————————
Alias LISTENER_SCAN1
Version TNSLSNR for Linux: Version 11.2.0.1.0 – Production
Start Date 28-JUL-2011 13:50:50
Uptime 3 days 19 hr. 11 min. 50 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/app/grid/11.2.0.1/network/admin/listener.ora
Listener Log File /opt/app/grid/11.2.0.1/log/diag/tnslsnr/water/listener_scan1/alert/log.xml
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.203)(PORT=1521)))
Services Summary…
Service “PRD” has 2 instance(s).
Instance “PRD1″, status READY, has 1 handler(s) for this service…
Instance “PRD2″, status READY, has 1 handler(s) for this service…
Service “TST” has 2 instance(s).
Instance “TST1″, status READY, has 1 handler(s) for this service…
Instance “TST2″, status READY, has 1 handler(s) for this service…
The command completed successfully
LISTENER_SCAN2, LISTENER_SCAN3 are on node rock
+ASM1:rock.localdomain:oracle$ lsnrctl status LISTENER_SCAN2
LSNRCTL for Linux: Version 11.2.0.1.0 – Production on 01-AUG-2011 09:03:05
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))
STATUS of the LISTENER
————————
Alias LISTENER_SCAN2
Version TNSLSNR for Linux: Version 11.2.0.1.0 – Production
Start Date 28-JUL-2011 13:47:46
Uptime 3 days 19 hr. 15 min. 19 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/app/grid/11.2.0.1/network/admin/listener.ora
Listener Log File /opt/app/grid/11.2.0.1/log/diag/tnslsnr/rock/listener_scan2/alert/log.xml
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN2)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.201)(PORT=1521)))
Services Summary…
Service “PRD” has 2 instance(s).
Instance “PRD1″, status READY, has 1 handler(s) for this service…
Instance “PRD2″, status READY, has 1 handler(s) for this service…
Service “TST” has 2 instance(s).
Instance “TST1″, status READY, has 1 handler(s) for this service…
Instance “TST2″, status READY, has 1 handler(s) for this service…
The command completed successfully
+ASM1:rock.localdomain:oracle$
+ASM1:rock.localdomain:oracle$ lsnrctl status LISTENER_SCAN3
LSNRCTL for Linux: Version 11.2.0.1.0 – Production on 01-AUG-2011 09:01:12
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3)))
STATUS of the LISTENER
————————
Alias LISTENER_SCAN3
Version TNSLSNR for Linux: Version 11.2.0.1.0 – Production
Start Date 28-JUL-2011 17:06:33
Uptime 3 days 15 hr. 54 min. 38 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/app/grid/11.2.0.1/network/admin/listener.ora
Listener Log File /opt/app/oracle/diag/tnslsnr/rock/listener_scan3/alert/log.xml
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN3)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.202)(PORT=1521)))
Services Summary…
Service “PRD” has 2 instance(s).
Instance “PRD1″, status READY, has 1 handler(s) for this service…
Instance “PRD2″, status BLOCKED, has 1 handler(s) for this service…
Service “TST” has 2 instance(s).
Instance “TST1″, status READY, has 1 handler(s) for this service…
Instance “TST2″, status READY, has 1 handler(s) for this service…
The command completed successfully
Node listener settings are:
On rock
+ASM1:rock.localdomain:oracle$ lsnrctl status LISTENER
LSNRCTL for Linux: Version 11.2.0.1.0 – Production on 01-AUG-2011 09:10:31
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
————————
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 – Production
Start Date 28-JUL-2011 13:47:51
Uptime 3 days 19 hr. 22 min. 45 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/app/grid/11.2.0.1/network/admin/listener.ora
Listener Log File /opt/app/oracle/diag/tnslsnr/rock/listener/alert/log.xml
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.132)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.111)(PORT=1521)))
Services Summary…
Service “+ASM” has 1 instance(s).
Instance “+ASM1″, status READY, has 1 handler(s) for this service…
Service “PRD” has 1 instance(s).
Instance “PRD1″, status READY, has 1 handler(s) for this service…
The command completed successfully
On water
LSNRCTL for Linux: Version 11.2.0.1.0 – Production on 01-AUG-2011 09:11:41
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_TST)))
STATUS of the LISTENER
————————
Alias LISTENER_TST
Version TNSLSNR for Linux: Version 11.2.0.1.0 – Production
Start Date 28-JUL-2011 13:47:56
Uptime 3 days 19 hr. 23 min. 45 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/app/grid/11.2.0.1/network/admin/listener.ora
Listener Log File /opt/app/oracle/diag/tnslsnr/rock/listener_tst/alert/log.xml
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_TST)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.132)(PORT=1523)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.111)(PORT=1523)))
Services Summary…
Service “TST” has 1 instance(s).
Instance “TST1″, status READY, has 1 handler(s) for this service…
The command completed successfully
My local_listener and romte_listener settings are
PRD1:rock.localdomain:oracle$ si
SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 1 09:05:23 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> show parameter listener
NAME TYPE
———————————— ———————————
VALUE
——————————
local_listener string
(DESCRIPTION=(ADDRESS_LIST=(AD
DRESS=(PROTOCOL=TCP)(HOST=rock
-vip)(PORT=1521))))
remote_listener string
rac-scan:1521
SQL>
TST1:rock.localdomain:oracle$ si
SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 1 09:06:20 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> show parameter listener
NAME TYPE
———————————— ———————————
VALUE
——————————
local_listener string
(DESCRIPTION=(ADDRESS_LIST=(AD
DRESS=(PROTOCOL=TCP)(HOST=rock
-vip)(PORT=1523))))
remote_listener string
rac-scan:1521
SQL>
On node water:
TST2:water.localdomain:oracle$ si
SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 1 09:07:53 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL>
SQL> show parameter listener
NAME TYPE
———————————— ———————————
VALUE
——————————
local_listener string
(DESCRIPTION=(ADDRESS_LIST=(AD
DRESS=(PROTOCOL=TCP)(HOST=wate
r-vip)(PORT=1523))))
remote_listener string
rac-scan:1521
SQL>
PRD2:water.localdomain:oracle$ si
SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 1 09:08:33 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> show parameter listener
NAME TYPE
———————————— ———————————
VALUE
——————————
local_listener string
(DESCRIPTION=(ADDRESS_LIST=(AD
DRESS=(PROTOCOL=TCP)(HOST=wate
r-vip)(PORT=1521))))
remote_listener string
rac-scan:1521
SQL>
This is how my environment looks like if I put it in picture.
From the SCAN listener status above, It is clear that all SCAN listeners are aware of the node listeners no matter where node listener is listening on (1523, 1521). PMON registers with SCAN listener based on the remote_listener setting on database. And PMON
also register with node listener based on the local listener settings. Local/node listener will always point to the local VIP for the node while the remote_listener will point to SCAN_NAME:Port.
Now let us try connecting with TAF enable connect string.
PRDTAF =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PRD)
(FAILOVER_MODE=
(TYPE=select)
(METHOD=basic))))
TSTTAF =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TST)
(FAILOVER_MODE=
(TYPE=select)
(METHOD=basic))))
[oracle@linux1 admin]$ sqlplus system/oracle@TSTTAF
SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 1 08:51:11 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> select instance_name from v$instance;
INSTANCE_NAME
—————-
TST2
SQL>
Now my connection to TST went to TST2 instance on node water.
+ASM2:water.localdomain:oracle$ lsnrctl services LISTENER_SCAN1
LSNRCTL for Linux: Version 11.2.0.1.0 – Production on 01-AUG-2011 08:52:17
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
Services Summary…
Service “PRD” has 1 instance(s).
Instance “PRD1″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rock-vip)(PORT=1521)))
Service “TST” has 2 instance(s).
Instance “TST1″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rock-vip)(PORT=1523)))
Instance “TST2″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=water-vip)(PORT=1523)))
The command completed successfully
+ASM2:water.localdomain:oracle$ lsnrctl services LISTENER_TST
LSNRCTL for Linux: Version 11.2.0.1.0 – Production on 01-AUG-2011 15:54:45
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_TST)))
Services Summary…
Service “TST” has 1 instance(s).
Instance “TST2″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:1 refused:0 state:ready
LOCAL SERVER
The command completed successfully
Now the established connection count is 1 for LISTENER_TST. But for SCAN listener established connection count actually increased on LISTENER_SCAN3. That means LISTENER_SCAN3 actually received the request from client and forwarded to LISTENER_TST on water.
+ASM1:rock.localdomain:oracle$ lsnrctl services LISTENER_SCAN2
LSNRCTL for Linux: Version 11.2.0.1.0 – Production on 01-AUG-2011 15:56:58
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))
Services Summary…
Service “PRD” has 2 instance(s).
Instance “PRD1″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:1 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rock-vip)(PORT=1521)))
Instance “PRD2″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=water-vip)(PORT=1521)))
Service “TST” has 2 instance(s).
Instance “TST1″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rock-vip)(PORT=1523)))
Instance “TST2″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=water-vip)(PORT=1523)))
The command completed successfully
+ASM1:rock.localdomain:oracle$ lsnrctl services LISTENER_SCAN3
LSNRCTL for Linux: Version 11.2.0.1.0 – Production on 01-AUG-2011 15:57:06
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3)))
Services Summary…
Service “PRD” has 2 instance(s).
Instance “PRD1″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rock-vip)(PORT=1521)))
Instance “PRD2″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=water-vip)(PORT=1521)))
Service “TST” has 2 instance(s).
Instance “TST1″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rock-vip)(PORT=1523)))
Instance “TST2″, status READY, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:1 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=water-vip)(PORT=1523)))
The command completed successfully
+ASM1:rock.localdomain:oracle$
Now let us see how the failover works
SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 1 16:00:10 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> select instance_name from v$instance;
INSTANCE_NAME
—————-
TST2
SQL>
Now issue a ‘shutdown abort’ on TST2.
TST2:water.localdomain:oracle$ si
SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 1 16:02:24 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> shutdown abort;
ORACLE instance shut down.
SQL>
Let us see if my connection failed over to TST1 on node rock. Yes it did without an issue.
[oracle@linux1 admin]$ sqlplus system/oracle@TSTTAF
SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 1 16:00:10 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> select instance_name from v$instance;
INSTANCE_NAME
—————-
TST2
SQL> select instance_name from v$instance;
INSTANCE_NAME
—————-
TST1
SQL>
Now we can pass the SCAN name and port to application installer or admin team and create as many node listeners as required. We don’t need to let application team to know different connection string and port for different databases on same RAC cluster. You
can note that I used SCAN (rac-scan) and port (1521) for both my databases. I segregated my listeners on 1521 and 1523 to PRD and TST databases respectively.
SCAN listener and Node listener – How does it work的更多相关文章
- org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Listener threw exception
RabbitMQ 报出的错! org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException ...
- Oracle Net Listener Parameters (listener.ora)(转)
12/20 7 Oracle Net Listener Parameters (listener.ora) This chapter provides a complete listing of th ...
- default listener is not configured in grid infrastructure home
Oracle Restart enable database creation requries Default listener configured and running in Grid Inf ...
- Troubleshooting Guide for ORA-12541 TNS: No Listener
Server side checks (not platform specific): 1) Check the result on the server using tnsping to the ...
- JavaWeb——Listener
一.基本概念 JavaWeb里面的listener是通过观察者设计模式进行实现的.对于观察者模式,这里不做过多介绍,大概讲一下什么意思. 观察者模式又叫发布订阅模式或者监听器模式.在该模式中有两个角色 ...
- [Java] JSP笔记 - Listener 监听器
Java Web 开发时,可以使用 Listener 来监听来监听一些事件,从而实现一些功能.实际上这个监听器,原理就是 Delphi 中大家常用的各种事件. 1. 那么,监听器的主要用途用哪些呢: ...
- Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)解决
环境:Windows 2008 R2 + Oracle 10.2.0.3 应用最新bundle patch后,扫描依然报出漏洞 Oracle Database Server 'TNS Listener ...
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- ORACLE清理、截断监听日志文件(listener.log)
在ORACLE数据库中,如果不对监听日志文件(listener.log)进行截断,那么监听日志文件(listener.log)会变得越来越大,想必不少人听说过关于"LISTENER.LOG日 ...
随机推荐
- Neo4j与springdata集成
1.maven工程需导入的jar包 <!-- neo4j --> <dependency> <groupId>org.springframework.data< ...
- vue swiper点击后返回不能自动播放
解决方法: 在返回时重新开启轮播 组件中: <swiper :options="swiperOption" ref="mySwiper" :class=& ...
- Angular+Bootstrap3导航菜单
Angular+Bootstrap3导航菜单 AngularJS体验式编程系列文章,将介绍如何用angularjs构建一个强大的web前端系统.angularjs是由Google团队开发的一款非常优秀 ...
- jdk11下载安装及环境变量配置
jdk11下载安装及环境变量配置 官网地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-50666 ...
- Leetcode958. Check Completeness of a Binary Tree二叉树的完全验证性
给定一个二叉树,确定它是否是一个完全二叉树. 百度百科中对完全二叉树的定义如下: 若设二叉树的深度为 h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集 ...
- mysql5.7在线更改innodb_buffer_pool_size
show variables like 'innodb_buffer_pool_size'; set global innodb_buffer_pool_size=;# 在线更改该值时,不会立即生效, ...
- python字典的基本操作,以及可变数据类型和不可变数据类型的区分
字典:采用键值对存储数据的数据类型,字典的键必须是不可变的数据类型 补充: 不可变(可哈希)数据类型:str,bool,int,tuple 可变(不可哈希)数据类型:list, dict, set ...
- 19-10-17-T
真的T了.(滑稽 Final 35 Miemeng 100 03:12:51 0 03:12:54 15 03:12:55 115 03:12:55 幸好$T1$还能要,不然就…… 前言 中午$\sc ...
- redis学习笔记06-主从复制和哨兵机制
1.主从复制 为了保证线上业务的持续运行,防止主节点因宕机而重启数据恢复消耗太长时间,通常会准备一个备用节点,备份主节点的数据,当主节点出问题时立马顶上.这种机制就叫做主从复制.在了解redis的主从 ...
- Spring Boot实战系列(7)集成Consul配置中心
本篇主要介绍了 Spring Boot 如何与 Consul 进行集成,Consul 只是服务注册的一种实现,还有其它的例如 Zookeeper.Etcd 等,服务注册发现在微服务架构中扮演这一个重要 ...