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
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.
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.
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 127.0.0.1:6379> SET rediskey redis OK redis 127.0.0.1:6379> GET rediskey "redis"
Redis list ialah senarai ringkas rentetan, diisih mengikut susunan sisipan. Anda boleh menambah elemen pada kepala (kiri) atau ekor (kanan) senaraiSetiap cincang dalam Redis boleh menyimpan 232 - 1 pasangan nilai kunci (lebih daripada 4 bilion)
3 Senarai (Senarai)
4. SetSenarai boleh mengandungi sehingga 232 - 1 elemen (4294967295, lebih daripada 4 bilion elemen setiap senarai).
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"
5. Set tersusunPengekodan 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).
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"
Redis menambah struktur HyperLogLog dalam versi 2.8.9.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 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?
Contoh
//添加指定元素到 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
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:
Dalam contoh kami, kami mencipta saluran langganan bernama
runoobChat: 现在,我们先重新开启个 redis 客户端,然后在同一个频道 runoobChat 发布两次消息,订阅者就能接收到消息。 gif 演示如下: Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证: 一个事务从开始到执行会经历以下三个阶段: 以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令: 单个 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. 比如: 如果在 set b bbb 处失败,set a 已成功不会回滚,set c 还会继续执行。 Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。 Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。 Redis GEO 操作方法有: 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 指令追加消息时自动创建。 上图解析: Redis ialah perkhidmatan TCP berdasarkan model pelayan pelanggan dan protokol permintaan/tindak balas. Ini bermakna biasanya permintaan akan mengikut langkah berikut: 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第一个 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-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"
runoobChat
频道。8. 事务
实例
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 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
9. 脚本
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> 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
Teknologi saluran paip Redis
Teknologi Saluran Paip 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!