Artikel ini akan membawa anda melalui jenis String dalam struktur data Redis dan bercakap tentang struktur storan KV Redis. Saya harap ia akan membantu anda!
Redis sering digunakan sebagai cache KV yang diedarkan Ramai orang hanya menggunakannya, tetapi mereka tidak tahu bahawa terdapat banyak rahsia yang tidak diketahui di bawahnya. [Cadangan berkaitan: Tutorial video Redis]
Rentetan ialah jenis data paling asas yang disokong oleh Redis Pertama, mari kita ambil a lihat. String, bagaimana struktur data dan storannya.
Seperti yang kita sedia maklum, redis ditulis dalam bahasa c, dan bahasa c tidak mempunyai jenis String, hanya char[], dan Semasa permulaan, saiz mesti ditentukan dan jenisnya tidak boleh diubah. Untuk merealisasikan fungsi seperti penambahan dan pengembangan dinamik, seperti perintah incr dan perintah tambah, redis mentakrifkan dan mengekalkan SDS (Simple Dynamic String) untuk melaksanakan fungsi ini.
Mari kita lihat dahulu struktur data yang ditakrifkan dalam kod sumber redis Terdapat 5 jenis di sini untuk menjimatkan ruang.
1: Untuk mendapatkan panjang char[], anda perlu melintasi tatasusunan Kerumitan masa len(char[]) ialah O(n) ;
2. Peruntukkan : Tiada jenis String dalam bahasa C, hanya char[] dan char[] mesti memperuntukkan panjang ruang terlebih dahulu char[] mempunyai panjang yang diperuntukkan dan perlu dikembangkan selepas data berkembang ;
3. falgs: sentiasa menduduki satu bait. 3 bit terendah digunakan untuk menunjukkan jenis pengepala. Terdapat 5 jenis pengepala, dan terdapat takrifan tetap dalam sds.h.
4. buf[]: tatasusunan char dalam bahasa c, gunakan '
Dalam redis, semua storan disimpan dalam bentuk pasangan nilai kunci KV ialah jenis rentetan, iaitu SDS; ialah rentetan, senarai, cincang, dsb. (struktur data yang disokong oleh Redis V tidak ditetapkan secara langsung kepada jenis tertentu, tetapi dikapsulkan dengan lapisan redisObject struktur data yang disimpan secara khusus ditunjuk oleh penunjuk ptr .
Selain itu, untuk menjimatkan ruang dengan lebih baik, redis juga menyimpan penunjuk ptr dalam cara yang berbeza Di satu pihak, apabila integer jenis Long disimpan, penunjuk dalam RedisObject ditugaskan terus kepada data integer, supaya. Tidak ada keperluan untuk penunjuk tambahan untuk menunjuk kepada integer, yang menjimatkan ruang overhed penunjuk. Sebaliknya, apabila data rentetan disimpan dan rentetan kurang daripada atau sama dengan 44 bait, metadata, penunjuk dan SDS dalam RedisObject ialah kawasan ingatan berterusan, sekali gus mengelakkan pemecahan memori. Kaedah susun atur ini juga dipanggil kaedah pengekodan embstr. Sudah tentu, apabila rentetan lebih besar daripada 44 bait, jumlah data dalam SDS mula meningkat, dan Redis tidak lagi menyusun atur SDS dan RedisObject sebaliknya, ia memperuntukkan ruang bebas kepada SDS dan menggunakan penunjuk untuk menunjuk ke struktur SDS . Kaedah susun atur ini dipanggil mod pengekodan mentah. Seperti yang ditunjukkan dalam rajah
Jika panjang aksara SDS mentah dikurangkan kepada kurang daripada 44, adakah ia akan diterbalikkan kepada pengekodan embstr?
Tidak; pengekodan asas Redis tidak boleh diterbalikkan (tidak akan ditarik balik) selepas penukaran.
Redis ialah perisian tengah caching yang biasa digunakan Kita mesti memahami struktur dan storan datanya dengan jelas supaya kita boleh memilih struktur data yang lebih sesuai apabila menggunakannya. dan anggaran ingatan.
alamat pengiraan memori redis http://www.redis.cn/redis_memory/
Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !
Atas ialah kandungan terperinci Mari kita bincangkan tentang jenis String dalam struktur data Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!