이 기사에서는 Redis의 세 가지 특수 데이터 유형(카디널리티 통계, 비트맵, 지리적 위치)에 대해 설명합니다. 도움이 되기를 바랍니다.
5가지 기본 데이터 유형 외에도 Redis에는 HyperLogLogs(카디널리티 통계), Bitmaps(비트맵) 및 geospatial(지리적 위치)이라는 세 가지 특수 데이터 유형도 있습니다. [관련 권장 사항: Redis 비디오 튜토리얼]
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은 기록을 위해 이진 비트에서 작동하는 비트맵 데이터 구조이며 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
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)!
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。 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
그렇지 않다면 존재하면 비어 있음
단위는 다음과 같습니다
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!