Table of Contents
springboot integrates redis to modify partitions
The origin of the problem
Old version solution
New version solution
redis partition
Why partitioning is useful
Different partition implementation
Disadvantages of partitioning
Data storage or cache?
Home Database Redis How does springboot integrate redis to modify partitions

How does springboot integrate redis to modify partitions

May 27, 2023 pm 07:16 PM
redis springboot

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);
Copy after login

2. Use redisTemplate to modify

redisTemplate.getConnectionFactory().getConnection().select(database);
Copy after login

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;
    }
Copy after login

Use RedisStandaloneConfiguration to modify

@Autowired
RedisStandaloneConfiguration redisStandaloneConfiguration;
redisStandaloneConfiguration.setDatabase(database);
Copy after login

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:

  1. It allows larger databases to use the memory of many computers sum. Without partitioning, you are limited to the memory of a single computer.

  2. 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!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1672
14
PHP Tutorial
1277
29
C# Tutorial
1257
24
How to build the redis cluster mode How to build the redis cluster mode Apr 10, 2025 pm 10:15 PM

Redis cluster mode deploys Redis instances to multiple servers through sharding, improving scalability and availability. The construction steps are as follows: Create odd Redis instances with different ports; Create 3 sentinel instances, monitor Redis instances and failover; configure sentinel configuration files, add monitoring Redis instance information and failover settings; configure Redis instance configuration files, enable cluster mode and specify the cluster information file path; create nodes.conf file, containing information of each Redis instance; start the cluster, execute the create command to create a cluster and specify the number of replicas; log in to the cluster to execute the CLUSTER INFO command to verify the cluster status; make

How to clear redis data How to clear redis data Apr 10, 2025 pm 10:06 PM

How to clear Redis data: Use the FLUSHALL command to clear all key values. Use the FLUSHDB command to clear the key value of the currently selected database. Use SELECT to switch databases, and then use FLUSHDB to clear multiple databases. Use the DEL command to delete a specific key. Use the redis-cli tool to clear the data.

How to read redis queue How to read redis queue Apr 10, 2025 pm 10:12 PM

To read a queue from Redis, you need to get the queue name, read the elements using the LPOP command, and process the empty queue. The specific steps are as follows: Get the queue name: name it with the prefix of "queue:" such as "queue:my-queue". Use the LPOP command: Eject the element from the head of the queue and return its value, such as LPOP queue:my-queue. Processing empty queues: If the queue is empty, LPOP returns nil, and you can check whether the queue exists before reading the element.

How to configure Lua script execution time in centos redis How to configure Lua script execution time in centos redis Apr 14, 2025 pm 02:12 PM

On CentOS systems, you can limit the execution time of Lua scripts by modifying Redis configuration files or using Redis commands to prevent malicious scripts from consuming too much resources. Method 1: Modify the Redis configuration file and locate the Redis configuration file: The Redis configuration file is usually located in /etc/redis/redis.conf. Edit configuration file: Open the configuration file using a text editor (such as vi or nano): sudovi/etc/redis/redis.conf Set the Lua script execution time limit: Add or modify the following lines in the configuration file to set the maximum execution time of the Lua script (unit: milliseconds)

How to use the redis command line How to use the redis command line Apr 10, 2025 pm 10:18 PM

Use the Redis command line tool (redis-cli) to manage and operate Redis through the following steps: Connect to the server, specify the address and port. Send commands to the server using the command name and parameters. Use the HELP command to view help information for a specific command. Use the QUIT command to exit the command line tool.

How to implement redis counter How to implement redis counter Apr 10, 2025 pm 10:21 PM

Redis counter is a mechanism that uses Redis key-value pair storage to implement counting operations, including the following steps: creating counter keys, increasing counts, decreasing counts, resetting counts, and obtaining counts. The advantages of Redis counters include fast speed, high concurrency, durability and simplicity and ease of use. It can be used in scenarios such as user access counting, real-time metric tracking, game scores and rankings, and order processing counting.

How to set the redis expiration policy How to set the redis expiration policy Apr 10, 2025 pm 10:03 PM

There are two types of Redis data expiration strategies: periodic deletion: periodic scan to delete the expired key, which can be set through expired-time-cap-remove-count and expired-time-cap-remove-delay parameters. Lazy Deletion: Check for deletion expired keys only when keys are read or written. They can be set through lazyfree-lazy-eviction, lazyfree-lazy-expire, lazyfree-lazy-user-del parameters.

How to optimize the performance of debian readdir How to optimize the performance of debian readdir Apr 13, 2025 am 08:48 AM

In Debian systems, readdir system calls are used to read directory contents. If its performance is not good, try the following optimization strategy: Simplify the number of directory files: Split large directories into multiple small directories as much as possible, reducing the number of items processed per readdir call. Enable directory content caching: build a cache mechanism, update the cache regularly or when directory content changes, and reduce frequent calls to readdir. Memory caches (such as Memcached or Redis) or local caches (such as files or databases) can be considered. Adopt efficient data structure: If you implement directory traversal by yourself, select more efficient data structures (such as hash tables instead of linear search) to store and access directory information

See all articles