springboot integrates redis to modify partitions
The origin of the problem
Recently, springboot is used to integrate redis. A system dynamic data source connects to different databases and caches the redis used. Then the data of different databases needs to be Cache to different partitions of redis, that is, different libraries.
Old version solution
The old version here refers to the one before 2.0. The 1.5.9 I used is ok.
The redis configuration class will not be posted here, there are many online.
1. Use JedisConnectionFactory to modify
@Autowired JedisConnectionFactory jedisConnectionFactory; jedisConnectionFactory.setDatabase(database);
2. Use redisTemplate to modify
redisTemplate.getConnectionFactory().getConnection().select(database);
The above two methods do not require redis Bean is specially added to the configuration class
New version solution
The new version here refers to the version after 2.0, I am using 2.0.3
The following needs to be added to the redis configuration class bean
@Bean RedisStandaloneConfiguration redisStandaloneConfiguration() { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName("localhost"); redisStandaloneConfiguration.setPort(6379); redisStandaloneConfiguration.setDatabase(0); return redisStandaloneConfiguration; } @Bean JedisConnectionFactory jedisConnectionFactory(RedisStandaloneConfiguration redisStandaloneConfiguration) { //redisStandaloneConfiguration.setPassword(RedisPassword.of(password)); JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder(); jedisClientConfiguration.connectTimeout(Duration.ofMillis(0));// connection timeout JedisConnectionFactory factory = new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration.build()); return factory; }
Use RedisStandaloneConfiguration to modify
@Autowired RedisStandaloneConfiguration redisStandaloneConfiguration; redisStandaloneConfiguration.setDatabase(database);
redis partition
How data is distributed on multiple Redis instances
Partitioning is to distribute your data On multiple Redis instances so that each instance only contains a portion of the data.
Why partitioning is useful
Redis partitioning has two main goals:
It allows larger databases to use the memory of many computers sum. Without partitioning, you are limited to the memory of a single computer.
It allows extending computing power to multiple cores and multiple computers, and extending network bandwidth to multiple computers and network adapters.
Suppose we have 4 Redis instances (R0, R1, R2, R3), with many keys representing users, such as user:1, user:2, ... Wait, then we have many ways to store a key.
The simplest way is to partition by range, that is, allocate data to the specified Redis instance according to the mapping range of the object. For example, we stipulate that IDs from 0 to 10000 will be assigned to R0, 10001 to 20000 to R1, and so on. This method is possible, but one disadvantage is that a table is needed to maintain this mapping relationship. This table needs to be managed, and each key requires one such table, so range partitioning in Redis is generally frowned upon because it is much less efficient than other partitioning methods.
In addition to range partitioning, another method is hash partitioning:
Step 1, take the key and apply a hash function to convert it into a number. For example, if key is foobar and the hash function is crc32, then crc32(foobar) will output 93024922.
Step 2. Use modulo operation (modulo) on this number to convert it into a direct number from 0 to 3, so that this number can be mapped to one of my four Redis instances. For example, 93024922 % 4 = 2, so foobar should be stored on the R2 instance.
(PS: First, do a hash operation on the key to get a number, and then take the modulo of this number to determine which instance the final data should be stored on)
The method of partitioning is also There are many kinds, and through the above two examples, you should be able to understand. An advanced form of hash partitioning is called consistent hashing and is implemented by several Redis clients and brokers.
Different partition implementation
Client partition: For a given key, the client directly selects the correct node for reading and writing. Many Redis clients implement client-side partitioning.
Agent partition: The client sends a request to a proxy, and the proxy communicates with Redis. The proxy will select the correct Redis instance based on our configuration.
Query routing: You can send your query to any Redis instance, and the instance will redirect your query to the correct server.
(PS: For a given key, the job of partitioning is to select a correct Redis instance, then this selection process can be done by the client, agent or Redis instance)
Disadvantages of partitioning
1. Operations involving multiple keys are usually not supported. For keys mapped to two different Redis instances, you cannot perform insert operations on them.
2. Redis transactions cannot be used for operations involving multiple keys.
3. The partition granularity is key, so it is impossible to convert a single very huge key (for example, a very large sorted set ) to split data
4. When using partitions, data processing will be more complicated. For instances, you must process multiple RDB/AOF files. In order to back up data, you need to aggregate persistence from multiple instances and hosts. document.
5. Adding and deleting capacity (space) becomes more complicated. For example, Redis Cluster supports transparent data rebalancing that adds and removes nodes at runtime, but other systems such as client partitions and brokers do not support this feature. However, a technique called pre-sharding helps in this regard.
Data storage or cache?
When Redis is used as a data store, a given key must always be mapped to the same Redis instance. When used as a cache it is not a big problem if a given node becomes unavailable.
If the preferred node for a given key is unavailable, consistent hashing implementations are usually able to switch to other nodes. Similarly, if a new node is added, some of the new keys will start to be stored on the new node.
If you use Redis as a cache, it is easy to scale using consistent hashing.
If Redis is used as storage, a fixed keys-to-nodes mapping is used, so the number of nodes must be fixed and cannot be changed. Redis Cluster is a viable system if keys need to be rebalanced between nodes.
The above is the detailed content of How does springboot integrate redis to modify partitions. For more information, please follow other related articles on the PHP Chinese website!

Redisoutperformstraditionaldatabasesinspeedforread/writeoperationsduetoitsin-memorynature,whiletraditionaldatabasesexcelincomplexqueriesanddataintegrity.1)Redisisidealforreal-timeanalyticsandcaching,offeringphenomenalperformance.2)Traditionaldatabase

UseRedisinsteadofatraditionaldatabasewhenyourapplicationrequiresspeedandreal-timedataprocessing,suchasforcaching,sessionmanagement,orreal-timeanalytics.Redisexcelsin:1)Caching,reducingloadonprimarydatabases;2)Sessionmanagement,simplifyingdatahandling

Redis goes beyond SQL databases because of its high performance and flexibility. 1) Redis achieves extremely fast read and write speed through memory storage. 2) It supports a variety of data structures, such as lists and collections, suitable for complex data processing. 3) Single-threaded model simplifies development, but high concurrency may become a bottleneck.

Redis is superior to traditional databases in high concurrency and low latency scenarios, but is not suitable for complex queries and transaction processing. 1.Redis uses memory storage, fast read and write speed, suitable for high concurrency and low latency requirements. 2. Traditional databases are based on disk, support complex queries and transaction processing, and have strong data consistency and persistence. 3. Redis is suitable as a supplement or substitute for traditional databases, but it needs to be selected according to specific business needs.

Redisisahigh-performancein-memorydatastructurestorethatexcelsinspeedandversatility.1)Itsupportsvariousdatastructureslikestrings,lists,andsets.2)Redisisanin-memorydatabasewithpersistenceoptions,ensuringfastperformanceanddatasafety.3)Itoffersatomicoper

Redis is primarily a database, but it is more than just a database. 1. As a database, Redis supports persistence and is suitable for high-performance needs. 2. As a cache, Redis improves application response speed. 3. As a message broker, Redis supports publish-subscribe mode, suitable for real-time communication.

Redisisamultifacetedtoolthatservesasadatabase,server,andmore.Itfunctionsasanin-memorydatastructurestore,supportsvariousdatastructures,andcanbeusedasacache,messagebroker,sessionstorage,andfordistributedlocking.

Redisisanopen-source,in-memorydatastructurestoreusedasadatabase,cache,andmessagebroker,excellinginspeedandversatility.Itiswidelyusedforcaching,real-timeanalytics,sessionmanagement,andleaderboardsduetoitssupportforvariousdatastructuresandfastdataacces


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Zend Studio 13.0.1
Powerful PHP integrated development environment

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.
