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

Bagaimana untuk melaksanakan saluran paip dengan menyepadukan Redis dalam SpringBoot

WBOY
Lepaskan: 2023-05-30 09:19:56
ke hadapan
1447 orang telah melayarinya

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>
Salin selepas log masuk
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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan