Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk melaksanakan saluran paip dengan menyepadukan Redis dalam SpringBoot

Bagaimana untuk melaksanakan saluran paip dengan menyepadukan Redis dalam SpringBoot

WBOY
WBOYke hadapan
2023-05-30 09:19:561409semak imbas

1. Saluran paip Redis

Untuk melaksanakan arahan Redis, klien Redis dan pelayan Redis perlu melakukan langkah berikut:

  • Pelanggan menghantar arahan kepada pelayan;

  • Pelayan menerima permintaan arahan, melaksanakan arahan dan menghasilkan hasil yang sepadan; klien;

  • Pelanggan menerima keputusan pelaksanaan arahan dan memaparkannya kepada pengguna.

  • Kebanyakan masa yang digunakan oleh arahan Redis dibelanjakan untuk menghantar permintaan arahan dan menerima keputusan arahan, membungkus sebarang bilangan permintaan arahan Redis bersama-sama, dan kemudian menghantar semuanya sekaligus Semua dihantar kepada pelayan, dan pelayan akan memproses semua permintaan arahan dan mengembalikan semua hasil pelaksanaannya kepada klien sekaligus.

  • Nota:

Pelayan Redis tidak mengehadkan bilangan arahan yang disertakan dalam saluran paip oleh pelanggan, tetapi ia menetapkan had volum lalai sebanyak 1GB untuk penimbal input pelanggan: apabila Bila jumlah data yang dihantar oleh pelanggan melebihi had ini, pelayan Redis akan menutup klien secara paksa. Oleh itu, adalah lebih baik untuk tidak melaksanakan sejumlah besar arahan atau beberapa arahan yang sangat besar dalam saluran paip yang sama sekaligus.

Selain itu, ramai pelanggan juga mempunyai had saiz penimbal tersirat Jika anda mendapati bahawa beberapa arahan saluran paip tidak dilaksanakan apabila menggunakan ciri saluran paip, atau hasil yang dikembalikan oleh saluran paip Jika ia tidak lengkap, kemungkinan besar. bahawa program anda telah mencapai had saiz penimbal terbina dalam klien.

2. Contoh saluran paip Redis bersepadu SpringBoot

Instance redis bersepadu SpringBoot

Gunakan satu perintah kenaikan untuk memproses 2 juta kekunci:

public class RedisPipelineStudy extends BaseTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private static final String PREFIX = "test0:";

    @Test
    public void test() {
        StopWatch stopWatch = new StopWatch();
        stopWatch.start("test0");
        for (int times = 0; times <p>Memakan masa Sebagai ditunjukkan di bawah: Ia adalah 12 bit, unitnya ialah ns</p><p></p><p><br></p>Gunakan paip incrBy untuk memproses 2 juta kekunci, setiap kali membungkus 300 arahan dan menghantarnya ke pelayan, seperti yang ditunjukkan di bawah: <p></p><pre class="brush:php;toolbar:false">public class RedisPipelineStudy extends BaseTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private static final String PREFIX = "test1:";

    @Test
    public void test() {
        StopWatch stopWatch = new StopWatch();
        stopWatch.start("test1");
        List<integer> recordList = new ArrayList();
        for (int times = 0; times  300) {
                        incrByPipeline(recordList);
                        recordList = new ArrayList();
                    }
                } catch (Exception e) {
                    System.out.println(e);
                }
            }
            if (!CollectionUtils.isEmpty(recordList)) {
                incrByPipeline(recordList);
                recordList = new ArrayList();
            }
        }
        stopWatch.stop();
        System.out.println(stopWatch.prettyPrint());
    }

    private void incrByPipeline(List<integer> recordList) {
        stringRedisTemplate.executePipelined(new RedisCallback<object>() {
            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {
                try {
                    for (Integer record : recordList) {
                        byte[] key = (PREFIX + record).getBytes();
                        connection.incrBy(key, 1);
                    }
                } catch (Exception e) {
                    System.out.println(e);
                }
                return null;
            }
        });
    }
}</object></integer></integer>
Bagaimana untuk melaksanakan saluran paip dengan menyepadukan Redis dalam SpringBoot Masa yang digunakan: 11 bit, unit: ns, 1/6 daripada masa yang diambil oleh satu arahan.


Atas ialah kandungan terperinci Bagaimana untuk melaksanakan saluran paip dengan menyepadukan Redis dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam