Rumah  >  Artikel  >  pangkalan data  >  Mari kita bincangkan tentang kelebihan dan ciri Redis

Mari kita bincangkan tentang kelebihan dan ciri Redis

WBOY
WBOYke hadapan
2022-05-16 18:04:094528semak imbas

Artikel ini membawa anda pengetahuan yang berkaitan tentang Redis, yang terutamanya memperkenalkan beberapa kelebihan dan ciri redis ialah sumber terbuka yang ditulis dalam bahasa ANSI C dan mematuhi protokol BSD, boleh berdasarkan ingatan, dan pangkalan data storan yang diedarkan Mari kita lihat.

Pembelajaran yang disyorkan: Tutorial video Redis

Apa itu redis

Pelayan Kamus Jauh (Redis) ialah Sistem storan nilai kunci yang ditulis oleh Salvatore Sanfilippo ialah pangkalan data bukan perhubungan merentas platform.

Redis ialah pangkalan data storan nilai kunci sumber terbuka (Key-Value) yang ditulis dalam bahasa ANSI C, mematuhi protokol BSD, rangkaian sokongan, berasaskan memori, diedarkan dan kegigihan pilihan serta menyediakan berbilang bahasa API.

Redis sering dipanggil pelayan struktur data kerana nilai boleh berupa rentetan, cincang, senarai, set dan set diisih ) dan jenis lain.

Ciri Redis:

  • Pangkalan data dalam memori, pantas, juga menyokong kegigihan data Ia boleh menyimpan data dalam memori ke cakera dan memuatkannya semula apabila memulakan semula penggunaan .
  • Redis bukan sahaja menyokong data jenis nilai kunci mudah, tetapi juga menyediakan storan struktur data seperti senarai, set, zset dan cincang.
  • Redis menyokong sandaran data, iaitu sandaran data dalam mod tuan-hamba.
  • Menyokong transaksi

Kelebihan Redis:

  • Prestasi yang sangat tinggi – Redis boleh membaca pada 110,000 kali/s dan menulis pada 81,000 kali/s .
  • Jenis data yang kaya – Redis menyokong operasi jenis data Rentetan, Senarai, Cincang, Set dan Set Tertib untuk kes binari.
  • Atomik - Semua operasi Redis adalah atom, dan Redis juga menyokong pelaksanaan atom selepas menggabungkan beberapa operasi. (Transaksi)
  • Ciri yang kaya – Redis juga menyokong penerbitan/langgan, pemberitahuan, tamat tempoh kunci dan ciri lain.

Apakah perbezaan antara Redis dan kedai nilai utama yang lain?

  • Redis mempunyai struktur data yang lebih kompleks dan menyediakan operasi atom padanya. Ini adalah laluan evolusi yang berbeza daripada pangkalan data lain. Jenis data Redis adalah berdasarkan struktur data asas dan telus kepada pengaturcara, tanpa memerlukan abstraksi tambahan.
  • Redis berjalan dalam ingatan tetapi boleh dikekalkan ke cakera, jadi ingatan perlu ditimbang apabila melakukan pembacaan dan penulisan berkelajuan tinggi bagi set data yang berbeza, kerana jumlah data tidak boleh lebih besar daripada memori perkakasan. Satu lagi kelebihan pangkalan data dalam memori ialah berbanding dengan struktur data kompleks yang sama pada cakera, operasi dalam ingatan adalah sangat mudah, jadi Redis boleh melakukan banyak perkara dengan kerumitan dalaman yang kuat. Selain itu, dari segi format cakera ia dijana lampiran padat kerana ia tidak memerlukan akses rawak.

Apakah perbezaan antara Memcache dan Redis

  1. Kaedah storan Memecache menyimpan semua data dalam ingatan dan akan menutup telefon selepas pemadaman kuasa saiz ingatan. Sebahagian daripada Redis disimpan pada cakera keras Redis boleh mengekalkan datanya
  2. Jenis sokongan data memcached Semua nilai adalah rentetan ringkas Sebagai penggantinya, redis menyokong jenis data yang lebih kaya dan menyediakan storan struktur data seperti set, zset, cincang
  3. menggunakan model asas yang berbeza, dan kaedah pelaksanaan asas serta protokol aplikasi untuk komunikasi dengan pelanggan adalah berbeza. Redis secara langsung membina mekanisme VMnya sendiri, kerana jika sistem umum memanggil fungsi sistem, ia akan membuang masa tertentu untuk bergerak dan meminta.
  4. Saiz nilai nilai adalah berbeza: Redis boleh mencapai maksimum 512M; memcache hanya 1mb.
  5. Redis jauh lebih pantas daripada memcached
  6. Redis menyokong sandaran data, iaitu sandaran data dalam mod tuan-hamba.

Mengapa Redis begitu pantas? Data disimpan dalam ingatan, serupa dengan HashMap Kelebihan HashMap ialah kerumitan masa carian dan operasi ialah O(1); mudah. ​​Struktur data dalam Redis Ia direka khas; CPU, dan tidak perlu mempertimbangkan pelbagai kunci Tidak ada masalah mengunci dan melepaskan kunci, dan tiada penggunaan prestasi yang disebabkan oleh kemungkinan kebuntuan

4 , IO tidak menyekat;

5 Model asas yang digunakan adalah berbeza, kaedah pelaksanaan asas dan protokol aplikasi untuk komunikasi dengan pelanggan adalah berbeza secara langsung, kerana sistem umum memanggil fungsi sistem, yang akan membuang masa tertentu Pergerakan dan permintaan;

6 model penggunaan semula I/O berbilang saluran

Model pemultipleksan I/O berbilang saluran menggunakan pilih, tinjauan pendapat dan epoll untuk memantau peristiwa I/O berbilang aliran pada masa yang sama Apabila melahu, urutan semasa akan disekat apabila satu atau lebih Apabila a strim mempunyai acara I/O, ia bangun dari keadaan menyekat, jadi program meninjau semua strim (epoll hanya meninjau strim yang benar-benar mengeluarkan acara), dan hanya memproses strim sedia mengikut urutan Pendekatan ini mengelakkan banyak perkara yang tidak berguna operasi.

** Di sini "berbilang" merujuk kepada berbilang sambungan rangkaian dan "menggunakan semula" merujuk kepada menggunakan semula urutan yang sama. **Penggunaan teknologi pemultipleksan I/O berbilang saluran membenarkan satu utas untuk mengendalikan berbilang permintaan sambungan dengan cekap (meminimumkan penggunaan masa rangkaian IO), dan Redis mengendalikan data dalam ingatan dengan sangat cepat, yang bermaksud bahawa Operasi dalam memori akan tidak menjadi halangan yang menjejaskan prestasi Redis.

Jadi mengapa Redis berbenang tunggal

Kita mesti faham dahulu bahawa analisis di atas semuanya untuk mewujudkan suasana di mana Redis pantas! Soalan Lazim rasmi menyatakan bahawa kerana Redis adalah operasi berasaskan memori, CPU bukanlah kesesakan Redis Kesesakan Redis kemungkinan besar adalah saiz memori mesin atau lebar jalur rangkaian. Memandangkan single-threading mudah dilaksanakan dan CPU tidak akan menjadi halangan, adalah logik untuk menggunakan penyelesaian single-threading (lagipun, menggunakan multi-threading akan menyebabkan banyak masalah!).

Redis jenis data dan perintah

1 Rentetan (String)

redis 127.0.0.1:6379> SET rediskey redis
OK
redis 127.0.0.1:6379> GET rediskey
"redis"

2

Hash Redis ialah jadual pemetaan medan dan nilai jenis rentetan amat sesuai untuk menyimpan objek.

Setiap cincang dalam Redis boleh menyimpan 232 - 1 pasangan nilai kunci (lebih daripada 4 bilion)

3 Senarai (Senarai)

Redis list ialah senarai ringkas rentetan, diisih mengikut susunan sisipan. Anda boleh menambah elemen pada kepala (kiri) atau ekor (kanan) senarai

Senarai boleh mengandungi sehingga 232 - 1 elemen (4294967295, lebih daripada 4 bilion elemen setiap senarai).

4. Set
redis 127.0.0.1:6379> LPUSH rediskey redis
(integer) 1
redis 127.0.0.1:6379> LPUSH rediskey mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH rediskey mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE rediskey 0 10

1) "mysql"
2) "mongodb"
3) "redis"

Redis’ Set ialah koleksi jenis String yang tidak tertib. Ahli set adalah unik, yang bermaksud bahawa data pendua tidak boleh muncul dalam set.

Pengekodan objek koleksi boleh menjadi inset atau hashtable.

Koleksi dalam Redis dilaksanakan melalui jadual cincang, jadi kerumitan menambah, memadam dan mencari ialah O(1).

Bilangan maksimum ahli dalam koleksi ialah 232 - 1 (4294967295, setiap koleksi boleh menyimpan lebih daripada 4 bilion ahli).

5. Set tersusun
redis 127.0.0.1:6379> SADD rediskey redis
(integer) 1
redis 127.0.0.1:6379> SADD rediskey mongodb
(integer) 1
redis 127.0.0.1:6379> SADD rediskey mysql
(integer) 1
redis 127.0.0.1:6379> SADD rediskey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS rediskey

1) "mysql"
2) "mongodb"
3) "redis"

Set tempah redis, seperti set, juga merupakan koleksi elemen jenis rentetan dan ahli pendua tidak dibenarkan .

Perbezaannya ialah setiap elemen dikaitkan dengan skor jenis berganda. Redis menggunakan markah untuk mengisih ahli koleksi daripada kecil kepada besar.

Ahli set yang ditempah adalah unik, tetapi markah boleh diulang.

Set dilaksanakan melalui jadual cincang, jadi kerumitan menambah, memadam dan mencari ialah O(1). Bilangan maksimum ahli dalam koleksi ialah 232 - 1 (4294967295, setiap koleksi boleh menyimpan lebih daripada 4 bilion ahli).

6. HyperLogLog

Redis menambah struktur HyperLogLog dalam versi 2.8.9.

Redis HyperLogLog ialah algoritma yang digunakan untuk statistik kardinaliti Kelebihan HyperLogLog ialah apabila bilangan atau isipadu elemen input sangat besar, ruang yang diperlukan untuk mengira kardinaliti sentiasa tetap dan sangat kecil.

Dalam Redis, setiap kunci HyperLogLog hanya berharga 12 KB memori untuk mengira kardinaliti hampir 2^64 elemen berbeza. Ini berbeza dengan koleksi yang menggunakan lebih banyak memori semasa mengira kardinaliti Lebih banyak unsur yang ada, lebih banyak memori digunakan.

Walau bagaimanapun, kerana HyperLogLog hanya akan mengira kardinaliti berdasarkan elemen input dan tidak akan menyimpan elemen input itu sendiri, HyperLogLog tidak boleh mengembalikan elemen individu input seperti koleksi.

Apakah itu kardinaliti?

Contohnya, jika set data ialah {1, 3, 5, 7, 5, 7, 8}, maka set kardinaliti ini set data ialah {1, 3 , 5 ,7, 8}, kardinaliti (elemen tidak berulang) ialah 5. Anggaran kardinaliti adalah untuk mengira kardinaliti dengan cepat dalam julat ralat yang boleh diterima.

Contoh

Contoh berikut menunjukkan proses kerja HyperLogLog:

7 Terbit dan langgan
//添加指定元素到 HyperLogLog 中。
redis 127.0.0.1:6379> PFADD rediskey "redis" 

1) (integer) 1

redis 127.0.0.1:6379> PFADD rediskey "mongodb"

1) (integer) 1

redis 127.0.0.1:6379> PFADD rediskey "mysql"

1) (integer) 1
//添加指定元素到 HyperLogLog 中。
redis 127.0.0.1:6379> PFCOUNT rediskey

(integer) 3

Terbitkan semula dan langgan (pub/. sub) Ya Model komunikasi mesej: pengirim (pub) menghantar mesej, dan pelanggan (sub) menerima mesej.

Pelanggan Redis boleh melanggan sebarang bilangan saluran.

Rajah berikut menunjukkan hubungan antara saluran saluran1 dan tiga pelanggan yang melanggan saluran ini - klien2, klien5 dan pelanggan1:

Contoh

Contoh berikut menunjukkan cara penerbitan dan langgan berfungsi.

Dalam contoh kami, kami mencipta saluran langganan bernama

runoobChat

:

第一个 redis-cli 客户端

redis 127.0.0.1:6379> SUBSCRIBE runoobChat

Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "runoobChat"
3) (integer) 1

现在,我们先重新开启个 redis 客户端,然后在同一个频道 runoobChat 发布两次消息,订阅者就能接收到消息。

第二个 redis-cli 客户端

redis 127.0.0.1:6379> PUBLISH runoobChat "Redis PUBLISH test"
(integer) 1

redis 127.0.0.1:6379> PUBLISH runoobChat "Learn redis by runoob.com"
(integer) 1

# 订阅者的客户端会显示如下消息
 1) "message"
2) "runoobChat"
3) "Redis PUBLISH test"
 1) "message"
2) "runoobChat"
3) "Learn redis by runoob.com"

gif 演示如下:

  • 开启本地 Redis 服务,开启两个 redis-cli 客户端。
  • 第一个 redis-cli 客户端输入 SUBSCRIBE runoobChat,意思是订阅 runoobChat 频道。
  • 第二个 redis-cli 客户端输入 PUBLISH runoobChat “Redis PUBLISH test” 往 runoobChat 频道发送消息,这个时候在第一个 redis-cli 客户端就会看到由第二个 redis-cli 客户端发送的测试消息。

8. 事务

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。
  • 命令入队。
  • 执行事务。

实例

以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:

redis 127.0.0.1:6379> MULTI
OK

redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED

redis 127.0.0.1:6379> GET book-name
QUEUED

redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED

redis 127.0.0.1:6379> SMEMBERS tag
QUEUED

redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   3) "Programming"

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

这是官网上的说明 From redis docs on transactions:

It’s important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.

比如:

redis 127.0.0.1:7000> multi
OK
redis 127.0.0.1:7000> set a aaa
QUEUED
redis 127.0.0.1:7000> set b bbb
QUEUED
redis 127.0.0.1:7000> set c ccc
QUEUED
redis 127.0.0.1:7000> exec
1) OK
2) OK
3) OK

如果在 set b bbb 处失败,set a 已成功不会回滚,set c 还会继续执行。

9. 脚本

Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL

redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second

1) "key1"
2) "key2"
3) "first"
4) "second"

10 GEO

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

  • geoadd:添加地理位置的坐标。
  • geopos:获取地理位置的坐标。
  • geodist:计算两个位置之间的距离。
  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
  • geohash:返回一个或多个位置对象的 geohash 值。
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEODIST Sicily Palermo Catania
"166274.1516"
redis> GEORADIUS Sicily 15 37 100 km
1) "Catania"
redis> GEORADIUS Sicily 15 37 200 km
1) "Palermo"
2) "Catania"
redis>

11 Redis Stream

Redis Stream 是 Redis 5.0 版本新增加的数据结构。

Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。

简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。

而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。

Redis Stream 的结构如下所示,它有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容:

每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用 xadd 指令追加消息时自动创建。

上图解析:

  • Kumpulan Pengguna: Kumpulan pengguna, dibuat menggunakan perintah XGROUP CREATE Sekumpulan pengguna mempunyai berbilang pengguna (Pengguna).
  • last_delivered_id: Setiap kumpulan pengguna akan mempunyai kursor last_delivered_id Mana-mana pengguna yang membaca mesej akan mengalihkan kursor last_delivered_id ke hadapan.
  • pending_ids: Pembolehubah keadaan pengguna, yang digunakan untuk mengekalkan id pengguna yang belum disahkan. pending_ids merekodkan mesej yang telah dibaca oleh klien tetapi belum menerima ack (Acknowledge character).

Teknologi saluran paip Redis

Redis ialah perkhidmatan TCP berdasarkan model pelayan pelanggan dan protokol permintaan/tindak balas. Ini bermakna biasanya permintaan akan mengikut langkah berikut:

  • Pelanggan menghantar permintaan pertanyaan kepada pelayan dan mendengar pengembalian Soket, biasanya dalam mod menyekat, menunggu pelayan membalas.
  • Pelayan memproses arahan dan mengembalikan hasilnya kepada klien.

Teknologi Saluran Paip Redis

Teknologi Talian Paip Redis membenarkan pelanggan untuk terus menghantar permintaan kepada pelayan apabila pelayan tidak bertindak balas, dan akhirnya membaca semua perkhidmatan sekaligus mengakhiri respons .

Pembelajaran yang disyorkan: Tutorial video Redis

Atas ialah kandungan terperinci Mari kita bincangkan tentang kelebihan dan ciri Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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