Rumah >pangkalan data >Redis >Pemahaman mendalam tentang jenis data khas dalam Redis: statistik kardinaliti, peta bit, lokasi geografi
Artikel ini akan membawa anda melalui tiga jenis data khas dalam Redis (statistik kardinaliti, peta bit, lokasi geografi saya harap ia akan membantu anda!
Selain 5 jenis data asas, Redis juga mempunyai tiga jenis data khas, iaitu HyperLogLogs (statistik kardinaliti), Bitmaps (peta bit) dan geospatial (lokasi geografi). [Cadangan berkaitan: Tutorial video Redis]
Redis versi 2.8.9 telah mengemas kini struktur data Hyperloglog!
Apakah nombor asas?
Contohnya, A = {1, 2, 3, 4, 5}, B = {3, 5, 6, 7, 9}; asas (elemen tidak berulang) = 1, 2, 4, 6, 7, 9; (toleransi ralat dibenarkan, iaitu ralat tertentu boleh diterima)
HyperLogLogs Apakah masalah yang digunakan oleh statistik kardinaliti untuk menyelesaikan?
Struktur ini boleh sangat menjimatkan memori untuk mengira pelbagai kiraan, seperti bilangan IP berdaftar, bilangan IP yang dilawati setiap hari, UV masa nyata halaman , bilangan pengguna dalam talian, dan bilangan rakan biasa menunggu.
Apakah kelebihannya ?
Sebuah tapak web yang besar mempunyai, sebagai contoh, 1 juta IP setiap hari secara kasar mengira bahawa satu IP menggunakan 15 bait, kemudian 1 juta IP ialah 15M. Setiap kunci HyperLogLog dalam Redis menduduki 12K kandungan, dan storan teori adalah lebih kurang 2^64 nilai Tidak kira apa kandungan yang disimpan, ia adalah algoritma berdasarkan anggaran kardinaliti, yang hanya boleh menganggarkan kardinaliti dengan lebih tepat. Gunakan sejumlah kecil memori tetap untuk menyimpan dan mengenal pasti elemen unik dalam koleksi. Selain itu, asas anggaran ini tidak semestinya tepat Ia adalah anggaran dengan ralat standard 0.81% (untuk senario perniagaan yang boleh menerima toleransi ralat tertentu, seperti statistik nombor IP, UV, dll., ini boleh diabaikan. ).
Penggunaan arahan berkaitan
127.0.0.1:6379> pfadd key1 a b c d e f g h i # 创建第一组元素 (integer) 1 127.0.0.1:6379> pfcount key1 # 统计元素的基数数量 (integer) 9 127.0.0.1:6379> pfadd key2 c j k l m e g a # 创建第二组元素 (integer) 1 127.0.0.1:6379> pfcount key2 (integer) 8 127.0.0.1:6379> pfmerge key3 key1 key2 # 合并两组:key1 key2 -> key3 并集 OK 127.0.0.1:6379> pfcount key3 (integer) 13
Bitmap ialah struktur data bitmap, yang beroperasi pada bit binari untuk rakaman dan hanya mempunyai dua keadaan: 0 dan 1.
Apakah masalah yang digunakan untuk menyelesaikan?
Contohnya: statistik maklumat pengguna, aktif, tidak aktif! Log masuk, tidak log masuk! Daftar masuk, jangan daftar masuk! Bitmaps boleh digunakan di kedua-dua negeri!
Berapa banyak memori yang diperlukan untuk menyimpan status daftar masuk setahun? 365 hari = 365 bit 1 bait = 8bit 46 bait atau lebih!
Arahan berkaitan menggunakan
Gunakan bitmap untuk merekod daftar masuk dari Isnin hingga Ahad ! Isnin: 1 Selasa: 0 Rabu: 0 Khamis: 1...
127.0.0.1:6379> setbit sign 0 1 (integer) 0 127.0.0.1:6379> setbit sign 1 1 (integer) 0 127.0.0.1:6379> setbit sign 2 0 (integer) 0 127.0.0.1:6379> setbit sign 3 1 (integer) 0 127.0.0.1:6379> setbit sign 4 0 (integer) 0 127.0.0.1:6379> setbit sign 5 0 (integer) 0 127.0.0.1:6379> setbit sign 6 1 (integer) 0
Semak sama ada terdapat daftar masuk pada hari tertentu!
127.0.0.1:6379> getbit sign 3 (integer) 1 127.0.0.1:6379> getbit sign 5 (integer) 0
Kendalian statistik, hitung bilangan hari yang dicatatkan!
127.0.0.1:6379> bitcount sign # 统计这周的打卡记录,就可以看到是否有全勤! (integer) 3
Redis’ Geo telah dilancarkan dalam versi Redis 3.2 Fungsi ini boleh mengira maklumat lokasi geografi: jarak antara dua tempat, , orang dalam beberapa batu.
geoadd
Tambah Geolokasi
127.0.0.1:6379> geoadd china:city 118.76 32.04 manjing 112.55 37.86 taiyuan 123.43 41.80 shenyang (integer) 3 127.0.0.1:6379> geoadd china:city 144.05 22.52 shengzhen 120.16 30.24 hangzhou 108.96 34.26 xian (integer) 3
Peraturan
Kedua-dua peringkat tidak boleh ditambah secara langsung Kami biasanya memuat turun data bandar (anda boleh bertanya GEO di laman web ini: http://www.jsons.cn/lngcode)!
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。 127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin (error) ERR invalid longitude,latitude pair 39.900000,116.400000
geopos
Dapatkan longitud dan latitud ahli yang dinyatakan
127.0.0.1:6379> geopos china:city taiyuan manjing 1) 1) "112.54999905824661255" 1) "37.86000073876942196" 2) 1) "118.75999957323074341" 1) "32.03999960287850968"
Dapatkan kedudukan semasa, yang mestilah nilai koordinat!
geodis
Jika ia tidak wujud , kembali kosong
Unit adalah seperti berikut
127.0.0.1:6379> geodist china:city taiyuan shenyang m "1026439.1070" 127.0.0.1:6379> geodist china:city taiyuan shenyang km "1026.4391"
georadius
Orang berdekatan==> orang berdekatan
Dapatkan bilangan orang yang ditentukan
127.0.0.1:6379> georadius china:city 110 30 1000 km 以 100,30 这个坐标为中心, 寻找半径为1000km的城市 1) "xian" 2) "hangzhou" 3) "manjing" 4) "taiyuan" 127.0.0.1:6379> georadius china:city 110 30 500 km 1) "xian" 127.0.0.1:6379> georadius china:city 110 30 500 km withdist 1) 1) "xian" 2) "483.8340" 127.0.0.1:6379> georadius china:city 110 30 1000 km withcoord withdist count 2 1) 1) "xian" 2) "483.8340" 3) 1) "108.96000176668167114" 2) "34.25999964418929977" 2) 1) "manjing" 2) "864.9816" 3) 1) "118.75999957323074341" 2) "32.03999960287850968"
Unit jejari latitud longitud kunci parameter [longitud dan latitud hasil yang dipaparkan] [jarak hasil yang dipaparkan] [bilangan yang dipaparkan keputusan]
georadiusbymember
Paparkan ahli lain dalam radius tertentu ahli yang ditentukan
127.0.0.1:6379> georadiusbymember china:city taiyuan 1000 km 1) "manjing" 2) "taiyuan" 3) "xian" 127.0.0.1:6379> georadiusbymember china:city taiyuan 1000 km withcoord withdist count 2 1) 1) "taiyuan" 2) "0.0000" 3) 1) "112.54999905824661255" 2) "37.86000073876942196" 2) 1) "xian" 2) "514.2264" 3) 1) "108.96000176668167114" 2) "34.25999964418929977"
Parameter dan georadius
geohash (kurang digunakan)
Arahan ini mengembalikan rentetan cincang 11 aksara
127.0.0.1:6379> geohash china:city taiyuan shenyang 1) "ww8p3hhqmp0" 2) "wxrvb9qyxk0"
Tukar longitud dan latitud dua dimensi kepada rentetan satu dimensi Jika dua rentetan lebih dekat, semakin dekat jaraknya
Lapisan bawah.
geo底层的实现原理实际上就是Zset, 我们可以通过Zset命令来操作geo
127.0.0.1:6379> type china:city zset
查看全部元素 删除指定的元素
127.0.0.1:6379> zrange china:city 0 -1 withscores 1) "xian" 2) "4040115445396757" 3) "hangzhou" 4) "4054133997236782" 5) "manjing" 6) "4066006694128997" 7) "taiyuan" 8) "4068216047500484" 9) "shenyang" 1) "4072519231994779" 2) "shengzhen" 3) "4154606886655324" 127.0.0.1:6379> zrem china:city manjing (integer) 1 127.0.0.1:6379> zrange china:city 0 -1 1) "xian" 2) "hangzhou" 3) "taiyuan" 4) "shenyang" 5) "shengzhen"
更多编程相关知识,请访问:编程视频!!
Atas ialah kandungan terperinci Pemahaman mendalam tentang jenis data khas dalam Redis: statistik kardinaliti, peta bit, lokasi geografi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!