分布式事务 Seata 教程 - 会话存储模式

Seata 支持多种会话存储(Session Storage)模式,用于存储事务协调者(Transaction Coordinator, TC)的相关数据,例如全局事务的状态信息、分支事务的状态信息等。这些数据对于事务的正常执行和恢复至关重要。Seata 提供了多种会话存储实现,以适应不同的应用场景和技术栈。

会话存储模式概述

Seata 支持以下几种会话存储模式:

  1. FileStore:使用文件系统作为存储介质。
  2. DBStore:使用关系型数据库作为存储介质。
  3. MemoryStore:使用内存作为存储介质。
  4. RedisStore:使用 Redis 作为存储介质。
  5. MySQLStore:专门针对 MySQL 的存储实现。

FileStore

FileStore 是默认的会话存储模式,它使用文件系统来存储会话数据。这种模式简单易用,适合于测试和开发环境。

配置

在 Seata 的配置文件中(例如 config.txtseata.properties),你可以配置 FileStore 的相关参数:

store.mode=file
store.file.dir=data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=fsync
store.file.syncLog=disable
store.file.fileSystemType=local
  • store.mode=file:指定使用 FileStore。
  • store.file.dir=data:指定会话数据的存储目录。
  • store.file.maxBranchSessionSize=16384:最大分支会话大小。
  • store.file.maxGlobalSessionSize=512:最大全局会话大小。
  • store.file.fileWriteBufferCacheSize=16384:文件写缓存大小。
  • store.file.flushDiskMode=fsync:磁盘刷新模式。
  • store.file.syncLog=disable:同步日志开关。
  • store.file.fileSystemType=local:文件系统类型。

DBStore

DBStore 使用关系型数据库作为存储介质。这种模式适合于生产环境,因为它提供了更好的可靠性和可扩展性。

配置

在 Seata 的配置文件中,你可以配置 DBStore 的相关参数:

store.mode=db
store.db.datasource.type=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
store.db.datasource.jdbcUrl=jdbc:mysql://localhost:3306/seata?useUnicode=true
store.db.datasource.user=root
store.db.datasource.password=root
store.db.datasource.driverClass=com.mysql.jdbc.Driver
store.db.initSql=classpath:db/init.sql
store.db.maxConn=30
store.db.minConn=5
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.lockTable=lock_table
  • store.mode=db:指定使用 DBStore。
  • store.db.datasource.*:数据库连接的相关配置。
  • store.db.initSql:初始化 SQL 文件路径。
  • store.db.maxConn:最大连接数。
  • store.db.minConn:最小连接数。
  • store.db.globalTable:全局事务表名。
  • store.db.branchTable:分支事务表名。
  • store.db.lockTable:锁表名。

MemoryStore

MemoryStore 使用内存作为存储介质。这种模式只适用于简单的测试场景,因为重启后数据会丢失。

配置

在 Seata 的配置文件中,你可以配置 MemoryStore 的相关参数:

store.mode=memory
store.memory.maxGlobalSession=512
store.memory.maxBranchSession=16384
store.memory.sessionEvict="true"
store.memory.evictor="org.seata.store.memory.Evictor"
store.memory.evictor.delay="1000"
store.memory.evictor.interval="100"
  • store.mode=memory:指定使用 MemoryStore。
  • store.memory.maxGlobalSession=512:最大全局会话数量。
  • store.memory.maxBranchSession=16384:最大分支会话数量。
  • store.memory.sessionEvict=true:是否启用会话回收。
  • store.memory.evictor:会话回收器实现。
  • store.memory.evictor.delay=1000:会话回收器的延迟时间。
  • store.memory.evictor.interval=100:会话回收器的间隔时间。

RedisStore

RedisStore 使用 Redis 作为存储介质。这种模式适合于需要高可用性和低延迟的应用场景。

配置

在 Seata 的配置文件中,你可以配置 RedisStore 的相关参数:

store.mode=redis
store.redis.clusterNodes=localhost:6379
store.redis.database=0
store.redis.password=
store.redis.maxPoolSize=10
store.redis.minIdle=5
store.redis.maxWaitMillis=3000
store.redis.timeout=1000
store.redis.globalKeyPrefix=SEATA_GLOBAL_
store.redis.branchKeyPrefix=SEATA_BRANCH_
store.redis.lockKeyPrefix=SEATA_LOCK_
store.redis.globalTable=global_table
store.redis.branchTable=branch_table
store.redis.lockTable=lock_table
  • store.mode=redis:指定使用 RedisStore。
  • store.redis.*:Redis 相关配置。
  • store.redis.globalKeyPrefix:全局事务键前缀。
  • store.redis.branchKeyPrefix:分支事务键前缀。
  • store.redis.lockKeyPrefix:锁键前缀。
  • store.redis.globalTable:全局事务表名(用于兼容 DBStore)。
  • store.redis.branchTable:分支事务表名(用于兼容 DBStore)。
  • store.redis.lockTable:锁表名(用于兼容 DBStore)。

MySQLStore

MySQLStore 是专门针对 MySQL 的存储实现,它使用 MySQL 作为存储介质。

配置

在 Seata 的配置文件中,你可以配置 MySQLStore 的相关参数,这些参数与 DBStore 类似。

store.mode=db
store.db.datasource.type=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
store.db.datasource.jdbcUrl=jdbc:mysql://localhost:3306/seata?useUnicode=true
store.db.datasource.user=root
store.db.datasource.password=root
store.db.datasource.driverClass=com.mysql.jdbc.Driver
store.db.initSql=classpath:db/init.sql
store.db.maxConn=30
store.db.minConn=5
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.lockTable=lock_table

总结

选择合适的会话存储模式取决于你的具体需求和应用场景。FileStore 适合快速开发和测试,DBStore 和 RedisStore 更适合生产环境,尤其是需要高可用性和高性能的场景。MemoryStore 仅适用于简单的测试环境,因为它不具备持久化能力。在配置时,请确保正确设置所有必要的参数,以确保 Seata 的稳定运行。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值