InMemoryLockStore (default)
-
Description
InMemoryLockStoreis the default lock store. It maintains conversation locks within a single process.
This lock store should not be used when multiple Rasa servers are run in parallel.
-
Configuration
To use the
InMemoryTrackerStoreno configuration is needed.
ConcurrentRedisLockStore
ConcurrentRedisLockStore is a new, recommended lock store that uses Redis as a persistence layer and is safe for use with multiple Rasa server replicas.
See the migration section to learn how to switch to this lock store.
Description
TheConcurrentRedisLockStore uses Redis as a persistence layer for instances of issued tickets and the last issued ticket number.
The ticket number initialization begins at 1, in contrast to that of theRedisLockStore which begins at 0.
If the ticket expires, the ticket number will not be reassigned to future tickets; as a result ticket numbers are unique to ticket instances.
Ticket numbers are incremented using the Redis atomic transaction INCR on the persisted last issued ticket number.
The ConcurrentRedisLockStore ensures that only one Rasa instance can handle a conversation at any point in time.
Therefore, this Redis implementation of the LockStore can handle messages received in parallel for the same conversation by different Rasa servers
This is the recommended lock store for running a replicated set of Rasa servers.
High Availability Support
New in 3.14Redis high availability support is now available for the
ConcurrentRedisLockStore.
You can now deploy with Redis Cluster for horizontal scaling or Redis Sentinel for automatic failover.ConcurrentRedisLockStore now supports Redis high availability deployments through Redis Cluster and
Redis Sentinel modes, enabling enterprise-grade scalability and reliability for production deployments.
The supported deployments are:
- Redis Cluster Mode: Provides horizontal scaling and is compatible with cloud-hosted Redis services.
- Redis Sentinel Mode: Offers high availability through automatic master/slave failover.
- Standard Mode: Maintains backward compatibility with existing single-instance deployments.
Configuration
To set up Rasa with Redis the following steps are required:- Add required configuration to your
endpoints.yml:
- Rasa Pro <=3.7.x
- Rasa Pro >=3.8.x
- To start the Rasa server using your Redis backend, add the
--endpointsflag, e.g.:
Configuration Parameters
url(default:localhost): The url of your redis instanceport(default:6379): The port which redis is running ondb(default:1): The number of your redis database. Ignored in cluster mode as Redis Cluster always uses database 0key_prefix(default:None): The prefix to prepend to lock store keys. Must be alphanumericpassword(default:None): Password used for authentication (Noneequals no authentication)use_ssl(default:False): Whether the communication is encryptedsocket_timeout(default:10): Time in seconds after which an error is raised if Redis doesn’t answerdeployment_mode(default:standard): Deployment mode of Redis. One ofstandard,cluster, orsentinel.endpoints(default:None): List of Redis cluster node addresses in the formathost:port. Used for cluster and sentinel modes. For cluster mode, these are cluster node endpoints. For sentinel mode, these are sentinel instance endpoints.sentinel_service(default:mymaster): Name of the Redis sentinel service. Only used in sentinel mode.
Deployment Mode Details
- Standard Mode: Connects to a single Redis instance using url and port parameters.
- Cluster Mode: Connects to a Redis Cluster for horizontal scaling. If endpoints is not provided, falls back to auto-discovery using url and port.
- Sentinel Mode: Connects to Redis Sentinel for high availability with automatic master/slave failover.
Choosing a Deployment Mode
- Use standard mode for simple deployments with a single Redis instance.
- Use cluster mode for horizontal scaling and when using cloud Redis services that require cluster mode.
- Use sentinel mode for high availability with master/slave replication and automatic failover.
Using IAM roles to authenticate to AWS ElastiCache for Redis
New in 3.14You can use IAM authentication to connect to AWS ElastiCache for Redis without needing to provide static credentials.
IAM_CLOUD_PROVIDER: Set this toaws.AWS_DEFAULT_REGION: Set this to the AWS region where your ElastiCache cluster or replication group is located.AWS_ELASTICACHE_CLUSTER_NAME: Set this to the name of your ElastiCache cluster or replication group.ELASTICACHE_REDIS_AWS_IAM_ENABLED: Set this totrueto enable IAM authentication for ElastiCache Redis connections.
endpoints.yml file to not use a username and password:
endpoints.yml
Migration Guide
To switch from theRedisLockStore to the ConcurrentRedisLockStore, specify the complete module path to the ConcurrentRedisLockStore class as type in endpoints.yml:
- Rasa Pro <=3.7.x
- Rasa Pro >=3.8.x
url field in the redis lock store configuration with a field host containing the hostname of the redis instance.
No database migration is required when switching to the ConcurrentRedisLockStore. You can use the same Redis instance and database number as you did previously when using the RedisLockStore.
You may want to delete all the preexisting keys if using the same Redis database number.
These former key-value items are no longer required by the ConcurrentRedisLockStore and the database can be cleared.
There is no overlap in key-value items stored when using the RedisLockStore and the ConcurrentRedisLockStore, because the RedisLockStore persists serialized TicketLock instances while the ConcurrentRedisLockStore instead stores individual Ticket instances, as well as the last issued ticket number.
The ConcurrentRedisLockStore recreates the TicketLock from the persisted Ticket instances, which allows it to handle concurrent messages for the same conversation ID.
RedisLockStore
Description
RedisLockStore maintains conversation locks using Redis as a persistence layer.
High Availability Support
New in 3.14Redis high availability support is now available for the
RedisLockStore.
You can now deploy with Redis Cluster for horizontal scaling or Redis Sentinel for automatic failover.RedisLockStore now supports Redis high availability deployments through Redis Cluster and
Redis Sentinel modes, enabling enterprise-grade scalability and reliability for production deployments.
The supported deployments are:
- Redis Cluster Mode: Provides horizontal scaling and is compatible with cloud-hosted Redis services.
- Redis Sentinel Mode: Offers high availability through automatic master/slave failover.
- Standard Mode: Maintains backward compatibility with existing single-instance deployments.
Configuration
To set up Rasa with Redis the following steps are required:- Add required configuration to your
endpoints.yml
- To start the Rasa server using your Redis backend, add the
--endpointsflag, e.g.:
Configuration Parameters
url(default:localhost): The url of your redis instanceport(default:6379): The port which redis is running ondb(default:1): The number of your redis database. Ignored in cluster mode as Redis Cluster always uses database 0key_prefix(default:None): The prefix to prepend to lock store keys. Must be alphanumericusername(default:None): Username used for authenticationpassword(default:None): Password used for authentication (Noneequals no authentication)use_ssl(default:False): Whether or not the communication is encryptedssl_keyfile(default:None): Path to an ssl private keyssl_certfile(default:None): Path to an ssl certificatessl_ca_certs(default:None): The path to a file of concatenated CA certificates in PEM formatsocket_timeout(default:10): Time in seconds after which an error is raised if Redis doesn’t answerdeployment_mode(default:standard): Deployment mode of Redis. One ofstandard,cluster, orsentinel.endpoints(default:None): List of Redis cluster node addresses in the formathost:port. Used for cluster and sentinel modes. For cluster mode, these are cluster node endpoints. For sentinel mode, these are sentinel instance endpoints.sentinel_service(default:mymaster): Name of the Redis sentinel service. Only used in sentinel mode.
Deployment Mode Details
- Standard Mode: Connects to a single Redis instance using url and port parameters.
- Cluster Mode: Connects to a Redis Cluster for horizontal scaling. If endpoints is not provided, falls back to auto-discovery using url and port.
- Sentinel Mode: Connects to Redis Sentinel for high availability with automatic master/slave failover.
Choosing a Deployment Mode
- Use standard mode for simple deployments with a single Redis instance.
- Use cluster mode for horizontal scaling and when using cloud Redis services that require cluster mode.
- Use sentinel mode for high availability with master/slave replication and automatic failover.
Using IAM roles to authenticate to AWS ElastiCache (for Redis)
New in 3.14You can use IAM authentication to connect to AWS ElastiCache for Redis without needing to provide static credentials.
Custom Lock Store
If you need a lock store which is not available out of the box, you can implement your own. This is done by extending the base classLockStore.
Your custom lock store class must also implement the following methods:
get_lock: fetches lock forconversation_idfrom storage; requiresconversation_idtext parameter and returnsTicketLockinstance. (source code - see for signature).save_lock: commitlockobject to storage; requireslockparameter which is of typeTicketLockand returnsNone. (source code - see for signature).delete_lock: deletes lock forconversation_idfrom storage; requiresconversation_idtext parameter and returnsNone. (source code - see for signature).
Configuration
Put the module path to your custom event broker and the parameters you require in yourendpoints.yml:
endpoints.yml