Rumah >pangkalan data >Redis >Pemahaman mendalam tentang jenis data khas dalam Redis: statistik kardinaliti, peta bit, lokasi geografi

Pemahaman mendalam tentang jenis data khas dalam Redis: statistik kardinaliti, peta bit, lokasi geografi

青灯夜游
青灯夜游ke hadapan
2021-12-22 09:59:402479semak imbas

Artikel ini akan membawa anda melalui tiga jenis data khas dalam Redis (statistik kardinaliti, peta bit, lokasi geografi saya harap ia akan membantu anda!

Pemahaman mendalam tentang jenis data khas dalam Redis: statistik kardinaliti, peta bit, lokasi geografi

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]

HyperLogLogs (statistik kardinaliti)

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

Peta bit (storan bit)

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

geospatial (lokasi geografi)

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)!

  • Bujur yang sah adalah dari -180 darjah hingga 180 darjah.
  • Julat latitud yang sah dari -85.05112878 darjah hingga 85.05112878 darjah.
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。
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

  • m
  • km
  • mi batu
  • kaki kaki
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!

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