>  기사  >  데이터 베이스  >  Redis의 특수 데이터 유형에 대한 심층적인 이해: 카디널리티 통계, 비트맵, 지리적 위치

Redis의 특수 데이터 유형에 대한 심층적인 이해: 카디널리티 통계, 비트맵, 지리적 위치

青灯夜游
青灯夜游앞으로
2021-12-22 09:59:402331검색

이 기사에서는 Redis의 세 가지 특수 데이터 유형(카디널리티 통계, 비트맵, 지리적 위치)에 대해 설명합니다. 도움이 되기를 바랍니다.

Redis의 특수 데이터 유형에 대한 심층적인 이해: 카디널리티 통계, 비트맵, 지리적 위치

5가지 기본 데이터 유형 외에도 Redis에는 HyperLogLogs(카디널리티 통계), Bitmaps(비트맵) 및 geospatial(지리적 위치)이라는 세 가지 특수 데이터 유형도 있습니다. [관련 권장 사항: Redis 비디오 튜토리얼]

HyperLogLogs(카디널리티 통계)

Redis 버전 2.8.9에서 Hyperloglog 데이터 구조가 업데이트되었습니다!

  • 기본수란 무엇인가요?

예를 들어 A = {1, 2, 3, 4, 5}, B = {3, 5, 6, 7, 9}이면 기본(반복되지 않는 요소) = 1, 2입니다. , 4, 6, 7, 9; (내결함성이 허용됩니다. 즉, 특정 오류가 허용될 수 있습니다.)

  • HyperLogLogs 카디널리티 통계는 어떤 문제를 해결하는 데 사용됩니까?

이 구조는 등록된 IP 수, 일일 방문 IP 수, 페이지의 실시간 UV, 온라인 사용자 수, 방문자 수 등 다양한 카운트를 계산하는 데 메모리를 매우 절약할 수 있습니다. 공통 친구 등

  • 장점은 무엇인가요?

예를 들어 대규모 웹사이트에는 매일 100만 개의 IP가 있습니다. 대략적으로 IP 하나가 15바이트를 소비한다면 100만 개의 IP는 15M입니다. HyperLogLog의 각 키는 Redis에서 12K의 콘텐츠를 차지하며 이론적 저장량은 대략 2^64 값에 가깝습니다. 저장된 콘텐츠가 무엇이든 카디널리티 추정 기반의 알고리즘이므로 보다 정확하게 카디널리티를 추정할 수 있습니다. 소량의 고정 메모리를 사용하여 컬렉션의 고유한 요소를 저장하고 식별합니다. 또한 이 추정의 기준은 0.81%의 표준 오류를 갖는 근사치입니다(IP 번호 통계, UV 등과 같은 특정 오류 허용 오차를 허용할 수 있는 비즈니스 시나리오의 경우 이는 무시될 수 있음). ).

  • 관련 명령 사용

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(비트 저장)

Bitmap은 기록을 위해 이진 비트에서 작동하는 비트맵 데이터 구조이며 0과 1의 두 가지 상태만 갖습니다.

  • 어떤 문제를 해결하는 데 사용되나요?

예: 사용자 정보 계산, 활성, 비활성! 로그인이 아닌 로그인! 체크인하지 말고 체크인하세요! 비트맵은 두 상태 모두에서 사용할 수 있습니다!

1년의 체크인 상태를 저장하려면 얼마나 많은 메모리가 필요합니까? 365일 = 365비트 1바이트 = 8비트 46바이트 정도!

  • 관련 명령어를 사용합니다

비트맵을 사용하여 월요일부터 일요일까지 체크인을 기록해보세요! 월요일: 1 화요일: 0 수요일: 0 목요일: 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

특정 요일에 체크인이 있는지 확인해보세요!

127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 5
(integer) 0

통계 연산, 출근한 일수를 세어보세요!

127.0.0.1:6379> bitcount sign # 统计这周的打卡记录,就可以看到是否有全勤!
(integer) 3

geospatial(지리적 위치)

Redis의 Geo는 Redis 3.2 버전에서 출시되었습니다! 이 기능은 지리적 위치 정보(두 장소 사이의 거리, 반경 내 사람 수)를 계산할 수 있습니다.

geoadd

지리적 위치 추가

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

Rules

두 수준은 직접 추가할 수 없습니다. 일반적으로 도시 데이터를 다운로드합니다. jsons.cn/lngcode)!

  • 유효한 경도는 -180도부터 180도까지입니다.
  • 유효한 위도는 -85.05112878도부터 85.05112878도까지입니다.
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。
127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin
(error) ERR invalid longitude,latitude pair 39.900000,116.400000

geopos

지정된 멤버의 경도와 위도를 가져옵니다

127.0.0.1:6379> geopos china:city taiyuan manjing
1) 1) "112.54999905824661255"
   1) "37.86000073876942196"
2) 1) "118.75999957323074341"
   1) "32.03999960287850968"

현재 위치를 가져옵니다. 좌표값이어야 합니다!

geodist

그렇지 않다면 존재하면 비어 있음

단위는 다음과 같습니다

  • m
  • km
  • mi 마일
  • ft 피트
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

가까운 사람 ==> 주소, 위치 근처의 모든 사람, Radius를 전달하여 쿼리

지정된 인원수를 가져옵니다

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"

매개변수 키 경도 위도 반경 단위 [표시된 결과의 경도 및 위도] [표시된 결과의 거리] [표시된 결과의 수]

georadiusbymember

지정된 멤버의 특정 반경 내에 있는 다른 멤버를 표시합니다

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"

매개변수는 georadius와 동일합니다

geohash(덜 사용됨)

이 명령은 11자 해시를 반환합니다. string

127.0.0.1:6379> geohash china:city taiyuan shenyang
1) "ww8p3hhqmp0"
2) "wxrvb9qyxk0"

은 2차원 경도와 위도가 1차원 문자열로 변환됩니다. 두 문자열이 가까울수록 거리가 가까워집니다

하층

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"

更多编程相关知识,请访问:编程视频!!

위 내용은 Redis의 특수 데이터 유형에 대한 심층적인 이해: 카디널리티 통계, 비트맵, 지리적 위치의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제