Bagaimana untuk mengkonfigurasi berbilang pangkalan data dalam Redis
Kata Pengantar
Redis mempunyai pangkalan data 0-16 Secara lalai, apabila kami mengendalikan redis, kami menggunakan pangkalan data 0, tetapi kadangkala projek kami mahu mengendalikan berbilang pangkalan data pada masa yang sama, dan kami tidak. ingin mengakses pangkalan data lain setiap kali Apabila memilih data pangkalan data, adalah terlalu rumit untuk menukar pangkalan data.
Jadi kita perlu mengkonfigurasi berbilang Klien Jedis, tetapi Jedis mudah disekat dan tidak begitu cekap, jadi saya menggunakan Klien Lettuce, iaitu kaedah sambungan Reaktif dan agak cekap. Tetapi bagaimana untuk menggunakan Klien Lettuce? Sebenarnya, secara amnya kami menambah pergantungan spring-boot-starter-data-redis dan menggunakan fungsi Redis melalui RedisTemplate Apabila versinya sangat tinggi, lapisan bawah RedisTemplate lalai menggunakan Klien Lettuce untuk mewujudkan sambungan dan Operasi data.
1. Tambah kebergantungan pom
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.0.5.RELEASE</version> </dependency>
2 Konfigurasikan berbilang sumber data dan tambahkannya pada bekas spring
Tangkapan skrin saya di bawah menggunakan empat sumber data, iaitu Perpustakaan No. , 2, 3, dan 4.
1) Buat kelas konfigurasi konfigurasi baharu
2) RedisStandaloneConfiguration(hos, port) Mulakan konfigurasi Redis, dan kemudian pilih nombor perpustakaan.
3) Mulakan LettuceConnectionFactory.
4) Instantiate a RedisTemplate dan tetapkan kaedah penyirian nilai kunci Di sini kunci dan nilai adalah kedua-dua rentetan, jadi penyiri memilih StringRedisSerializer.
5) Tetapkan LettuceConnectionFactory yang dibuat dalam langkah ketiga kepada RedisTemplate, dan suntikkannya ke dalam bekas spring dengan anotasi @Bean Apabila menggunakannya, cari terus dalam bekas spring melalui nama kaedah, dan pasang ia ke dalam contoh yang merujuknya.
import io.lettuce.core.resource.ClientResources; import io.lettuce.core.resource.DefaultClientResources; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisPassword; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.util.ObjectUtils; import java.time.Duration; /** * reactive redis * @Author:wangqipeng * @Date:14:38 2019-07-03 */ @Configuration public class RedisDatasourceConfiguration { @Value("${redis.isCleanRedisCache:false}") private String cleanRedisCache; @Value("${redis.host:127.0.0.1}") public String host; @Value("${redis.port:6379}") public Integer port; private String password; @Value("${redis.timeout:2000}") public Integer timeout; public Integer maxIdle = 16; public Integer minIdle = 5; public Integer maxTotal = 30; @Bean public RedisTemplate<String, String> stringRedisTemplate1() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port); configuration.setDatabase(1); if (!ObjectUtils.isEmpty(password)) { RedisPassword redisPassword = RedisPassword.of(password); configuration.setPassword(redisPassword); } return createRedisTemplate(creatFactory(configuration)); } @Bean public RedisTemplate<String, String> stringRedisTemplate2() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port); configuration.setDatabase(2); if (!ObjectUtils.isEmpty(password)) { RedisPassword redisPassword = RedisPassword.of(password); configuration.setPassword(redisPassword); } return createRedisTemplate(creatFactory(configuration)); } @Bean public RedisTemplate<String, String> stringRedisTemplate3() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port); configuration.setDatabase(3); if (!ObjectUtils.isEmpty(password)) { RedisPassword redisPassword = RedisPassword.of(password); configuration.setPassword(redisPassword); } return createRedisTemplate(creatFactory(configuration)); } @Bean public RedisTemplate<String, String> stringRedisTemplate4() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port); configuration.setDatabase(4); if (!ObjectUtils.isEmpty(password)) { RedisPassword redisPassword = RedisPassword.of(password); configuration.setPassword(redisPassword); } return createRedisTemplate(creatFactory(configuration)); } @Bean public RedisTemplate<String, String> stringRedisTemplate5() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port); configuration.setDatabase(5); if (!ObjectUtils.isEmpty(password)) { RedisPassword redisPassword = RedisPassword.of(password); configuration.setPassword(redisPassword); } return createRedisTemplate(creatFactory(configuration)); } private RedisTemplate<String, String> getSerializerRedisTemplate(){ RedisTemplate<String, String> redisTemplate = new RedisTemplate<>(); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new StringRedisSerializer()); return redisTemplate; } private RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, String> redisTemplate = getSerializerRedisTemplate(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.afterPropertiesSet(); return redisTemplate; } private GenericObjectPoolConfig getGenericObjectPoolConfig(){ GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig(); genericObjectPoolConfig.setMaxTotal(maxTotal); genericObjectPoolConfig.setMinIdle(minIdle); genericObjectPoolConfig.setMaxIdle(maxIdle); genericObjectPoolConfig.setMaxWaitMillis(timeout); return genericObjectPoolConfig; } private LettuceConnectionFactory creatFactory(RedisStandaloneConfiguration configuration){ LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder(); builder.poolConfig(getGenericObjectPoolConfig()); // LettuceClientConfiguration.LettuceClientConfigurationBuilder builder = LettuceClientConfiguration.builder(); // builder.clientResources(clientResources()); // builder.commandTimeout(Duration.ofSeconds(3000)); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(configuration, builder.build()); connectionFactory.afterPropertiesSet(); return connectionFactory; } }
3. Cara menggunakan
Rujukan di sini ialah perpustakaan No. 2, yang dimuatkan ke dalam bekas spring melalui @Bean di atas.
Atas ialah kandungan terperinci Bagaimana untuk mengkonfigurasi berbilang pangkalan data dalam Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Mulakan semula Redis dengan menyatakan fail konfigurasi: 1. Cari fail konfigurasi (redis.conf biasanya terletak di subdirektori conf); 2. Ubah suai konfigurasi yang diperlukan (seperti menukar port); 3. Gunakan perintah redis-server /path/to/redis.conf untuk memulakan semula redis melalui fail konfigurasi (di mana /path/to/redis.conf adalah laluan fail konfigurasi yang diubahsuai); 4. Gunakan Redis-CLI untuk mengesahkan bahawa ia telah berjaya dimulakan semula.

Memori Redis melonjak termasuk: jumlah data yang terlalu besar, pemilihan struktur data yang tidak betul, masalah konfigurasi (seperti tetapan MaxMemory terlalu kecil), dan kebocoran memori. Penyelesaian termasuk: penghapusan data yang telah tamat tempoh, menggunakan teknologi mampatan, memilih struktur yang sesuai, menyesuaikan parameter konfigurasi, memeriksa kebocoran memori dalam kod, dan kerap memantau penggunaan memori.

Pemecahan ingatan redis merujuk kepada kewujudan kawasan bebas kecil dalam ingatan yang diperuntukkan yang tidak dapat ditugaskan semula. Strategi mengatasi termasuk: Mulakan semula Redis: Kosongkan memori sepenuhnya, tetapi perkhidmatan mengganggu. Mengoptimumkan struktur data: Gunakan struktur yang lebih sesuai untuk Redis untuk mengurangkan bilangan peruntukan dan siaran memori. Laraskan parameter konfigurasi: Gunakan dasar untuk menghapuskan pasangan nilai kunci yang paling kurang baru-baru ini. Gunakan mekanisme kegigihan: sandarkan data secara teratur dan mulakan semula redis untuk membersihkan serpihan. Pantau penggunaan memori: Cari masalah tepat pada masanya dan ambil langkah.

Data masih wujud selepas Redis dimulakan semula. Redis menyimpan data dalam ingatan, dan memulakan semula tidak memadam data memori. REDIS juga menyediakan kegigihan, menyimpan data ke cakera keras melalui fail RDB atau AOF, memastikan data dapat dipulihkan dari fail yang berterusan selepas dimulakan semula.

Bagaimana untuk memulakan semula perkhidmatan REDIS dalam sistem pengendalian yang berbeza: Linux/macOS: Gunakan perintah SystemCTL (SistemCTL Restart Redis-Server) atau Perintah Perkhidmatan (Perkhidmatan Redis-Server Restart). Windows: Gunakan alat perkhidmatan.msc (masukkan "Services.msc" dalam kotak dialog Run dan tekan Enter) dan klik kanan perkhidmatan "Redis" dan pilih "mulakan semula".

Redis Kegigihan akan mengambil ingatan tambahan, RDB sementara meningkatkan penggunaan memori apabila menjana snapshot, dan AOF terus mengambil ingatan apabila memasuki log. Faktor yang mempengaruhi termasuk jumlah data, dasar kegigihan dan konfigurasi REDIS. Untuk mengurangkan kesan, anda boleh mengkonfigurasi dasar snapshot RDB, mengoptimumkan konfigurasi AOF, menaik taraf perkakasan dan memantau penggunaan memori. Selain itu, adalah penting untuk mencari keseimbangan antara prestasi dan keselamatan data.

Tetapan saiz memori Redis perlu mempertimbangkan faktor -faktor berikut: Jumlah data dan trend pertumbuhan: Anggarkan saiz dan kadar pertumbuhan data yang disimpan. Jenis Data: Jenis yang berbeza (seperti senarai, hash) menduduki memori yang berbeza. Dasar caching: cache penuh, cache separa, dan dasar pemisahan mempengaruhi penggunaan memori. Puncak Perniagaan: Tinggalkan memori yang cukup untuk menangani puncak lalu lintas.

Perintah Redis Restart adalah Redis-Server. Perintah ini digunakan untuk memuatkan fail konfigurasi, membuat struktur data, memulakan pelayan Redis, dan mendengar sambungan klien. Pengguna boleh melaksanakan perintah "Redis-Server [Options]" di terminal untuk memulakan semula pelayan Redis. Pilihan umum termasuk operasi latar belakang, menentukan laluan fail konfigurasi, menentukan port mendengar, dan memuatkan semula gambar hanya apabila data hilang. Perhatikan bahawa memulakan semula pelayan akan memutuskan semua sambungan klien, pastikan anda menyimpan data yang diperlukan sebelum dimulakan semula.
