>  기사  >  데이터 베이스  >  Redis의 특수 데이터 유형을 사용하는 방법

Redis의 특수 데이터 유형을 사용하는 방법

WBOY
WBOY앞으로
2023-06-03 11:10:081135검색

    1. HyperLogLog 카디널리티 통계

    1.1 카디널리티란 무엇인가요?

    데이터 세트 {1, 2, 3, 3, 5, 5,}와 같은 예를 통해 카디널리티 통계가 무엇인지 직접적으로 이해할 수 있으며, 이 데이터 세트의 카디널리티 세트는 {1, 2, 3, 5} , 카디널리티(반복되지 않는 요소)는 4입니다. 즉, 반복되지 않는 요소의 개수입니다.

    1.2 카디널리티 통계 사용의 이점

    각 HyperLogLog 키의 메모리 비용은 12KB에 불과하며 2^64에 가까운 다양한 요소의 카디널리티를 계산할 수 있습니다. 이는 카디널리티를 계산할 때 더 많은 메모리를 소비하는 컬렉션과 뚜렷한 대조를 이룹니다. 요소가 많을수록 더 많은 메모리가 소비됩니다. 메모리 관점에서 비교하려면 Hyperloglog가 첫 번째 선택입니다.

    1.3 응용 시나리오

    웹 페이지의 uv(한 사람이 웹 사이트를 여러 번 방문하지만 여전히 한 사람으로 계산됩니다)

    • 전통적인 방법: set(set는 중복을 허용하지 않기 때문에 반복하면 덮어쓰기) 사용자 ID를 저장한 후 집합에 포함된 요소 수를 표준 판단으로 계산할 수 있습니다. 이런 식으로 많은 수의 사용자 ID를 저장하면 더 번거롭고 많은 메모리를 차지하게 됩니다. 대형 웹사이트. 우리의 목적은 사용자 ID를 저장하는 것이 아니라 계산하는 것입니다.

    • HyperLogLog 사용: HyperLogLog 키에는 12KB만 필요하지만 계산할 수 있는 숫자가 매우 방대하고 차지하는 메모리 공간이 크게 줄어듭니다.

    1.4 참고 사항

    내결함성이 허용된다면(오류율 0.81%, 계산 시 무시 가능) Hyperloglog를 반드시 사용할 수 있습니다! 내결함성이 허용되지 않으면 set 또는 자신의 데이터 유형을 사용하십시오!

    1.5 기본 명령

    일련번호 명령 및 설명
    1 PFADD 키 요소 [요소 ...]
    특정 요소를 HyperLogLog에 추가합니다.
    2 PFCOUNT key [key ...]
    주어진 HyperLogLog에 대한 카디널리티 추정치를 반환합니다.
    3 PFMERGE destkey sourcekey [sourcekey ...]
    여러 HyperLogLog를 하나의 HyperLogLog로 병합

    1.6

    127.0.0.1:6379> pfadd mykey1 a b c d e f   #给第一组添加数据
    (integer) 1
    127.0.0.1:6379> pfcount mykey1  #统计mykey1的基数数量
    (integer) 6
    127.0.0.1:6379> pfadd mykey2 e e f j  #给第二组添加数据
    (integer) 1
    127.0.0.1:6379> pfcount mykey2     #统计mykey2的基数数量
    (integer) 3
    127.0.0.1:6379> pfmerge mykey3 mykey1 mykey2   # 合并两组 mykey1 mykey2 => mykey3 并集
    OK
    127.0.0.1:6379> pfcount mykey3    #统计mykey3的基数数量
    (integer) 7

    사용 2. 지리 공간적 지리적 위치

    2.1 소개

    Re dis3.2 버전 지리 공간, 처음 출시된 이 앱은 지리적 위치 정보, 두 장소 사이의 거리, 반경 수 마일 내에 사는 사람 수를 계산할 수 있습니다.

    2.2 사용 시나리오

    • ???? 친구 위치

    • ???? 주변 사람 보기

    • ???? 택시 거리 계산

    2.3 기본 명령어

    number명령 및 설명12345678

    查询地点经纬度:

    城市经纬度查询-国内城市经度纬度在线查询工具

    2.4 详细讲解

    2.4.1 GEOADD

    作用:添加地理位置

    规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入!

    语法:GEOADD key 经度 纬度 地点名称

    注意事项

    有效的经度从-180度到180度。

    有效的纬度从-85.05112878度到85.05112878度。

    当坐标位置超出上述指定范围时,该命令将会返回一个错误。

    使用

    #添加单个信息
    127.0.0.1:6379> geoadd address 116.708463 23.37102 shantou   
    (integer) 1
    #添加多个信息
    127.0.0.1:6379> geoadd address 116.405285 39.904989 beijin 121.472644 31.231706 shanghai
    (integer) 2
    2.4.2 GEOPOS

    作用:获得指定地点的位置信息(经纬度)

    语法:GEOPOS key 地点名称

    使用

    127.0.0.1:6379> geopos address beijin   #获得北京的地理位置
    1) 1) "116.40528291463851929"  #经度
       2) "39.9049884229125027"   #纬度
    2.4.3 GEODIST

    作用:返回两个给定位置之间的距离,如果两个位置之间的其中一个不存在, 那么命令返回空值。

    语法:GEODIST key 地点1 地点2 单位

    单位参数:

    • m 表示单位为米。

    • km 表示单位为千米。

    • mi 表示单位为英里。

    • ft 表示单位为英尺。

    如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。

    使用:

    127.0.0.1:6379> geodist address beijin shanghai km  #查询北京与上海之间的距离
    "1067.5980"
    2.4.4 GEORADIUS

    作用:以给定的经纬度为中心, 找出某一半径内的元素。

    语法:GEORADIUS key 经度 纬度  范围数值  单位

    使用:

    #查找以116,39这个经纬度为中心,寻找方圆1500km的城市
    127.0.0.1:6379> georadius address 116 39 1500 km
    1) "shanghai"
    2) "beijin"
     
    # 显示到中间距离的位置
    127.0.0.1:6379> georadius address 116 39 1500 km withdist
    1) 1) "shanghai"
       2) "996.7313"
    2) 1) "beijin"
       2) "106.5063"
     
    #显示他人的定位信息
    127.0.0.1:6379> georadius address 116 39 1500 km withcoord
    1) 1) "shanghai"
       2) 1) "121.47264629602432251"
          2) "31.23170490709807012"
    2) 1) "beijin"
       2) 1) "116.40528291463851929"
          2) "39.9049884229125027"
     
    #筛选出最近的城市以及显示其距离
    127.0.0.1:6379> georadius address 116 39 1500 km withdist withcoord count 1
    1) 1) "beijin"
       2) "106.5063"
       3) 1) "116.40528291463851929"
          2) "39.9049884229125027"
     
     
    #筛选最近两个城市以及显示其距离
    127.0.0.1:6379> georadius address 116 39 1500 km withdist withcoord count 2
    1) 1) "beijin"
       2) "106.5063"
       3) 1) "116.40528291463851929"
          2) "39.9049884229125027"
    2) 1) "shanghai"
       2) "996.7313"
       3) 1) "121.47264629602432251"
          2) "31.23170490709807012"
    2.4.5 GEORADIUSBYMEMBER

    作用:找出位于指定范围内的元素,中心点是由给定的位置元素决定。

    语法:GEORADIUSBYMEMBER  key 地点  距离数值  单位

    使用:

    #找出距离北京方圆1500km内的城市
    127.0.0.1:6379> georadiusbymember address beijin 1500 km
    1) "shanghai"
    2) "beijin"
    2.4.6 GEOHASH

    作用:将返回11个字符的Geohash字符串,如果两个字符串越接近,那么则距离越近。

    语法:GEOHASH  key 地点1  地点2

    ???? 使用:

    127.0.0.1:6379> geohash address beijin shantou
    1) "wx4g0b7xrt0"
    2) "ws4uzy8d030"
    2.4.7 ZRANGE

    作用:获得指定key中坐标信息。

    语法:zrange  key  start stop

    使用:

    127.0.0.1:6379> zrange address 0 -1
    1) "shantou"
    2) "shanghai"
    3) "beijin"
    2.4.8 ZREM

    作用:删除指定key下指定目标的数据。

    语法:zrem  key 地点

    使用:

    127.0.0.1:6379> zrem address shanghai
    (integer) 1

    三、BitMap

    介绍

    BitMap是通过一个bit位来表示某个元素对应的值或者状态,只有0 和 1 两个状态,其中的key就是对应元素本身。365 天 = 365 bit ,1字节 = 8bit ,也就是说统计一年的用户状态只需要46 个字节左右,所以其能够节省很大的空间。

    应用场景

    • (1)用户签到

    • (2)统计活跃用户

    • (3)用户在线状态(在线就设置为1,不在线就设置为0)

    使用

    • 需求:记录 周一到周日的打卡

    • 1:表示有打卡

    • 0:表示没有打卡

    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 1
    (integer) 0
    127.0.0.1:6379> setbit sign 5 0
    (integer) 0
    127.0.0.1:6379> setbit sign 6 0
    (integer) 0

    查看某一天是否有打卡

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

    统计本周的打卡记录

    127.0.0.1:6379> bitcount sign
    (integer) 4
    GEOADD 키 경도 위도 위치 이름지정된 키
    GEOPOS 키 위치 이름에 지정된 지리공간 위치(위도, 경도, 이름)를 추가합니다. 키에서 주어진 모든 위치 요소의 위치(경도 및 위도)를 반환합니다.
    GEODIST 키 위치 1 위치 2 단위 두 위치 중 하나가 존재하지 않으면 명령은 null 값을 반환합니다.

    GEORADIUS 키 경도 및 위도 범위 수치 단위

    주어진 경도와 위도를 중심으로 특정 반경 내의 요소를 찾습니다

    GEORADIUSBYMEMBER 키 위치 거리 숫자 단위 지정된 범위 내에 있는 요소를 찾으세요. 중심점은 주어진 위치 요소에 의해 결정됩니다.
    GEOHASH 키 위치 1 위치 2는 11자의 Geohash 문자열을 반환합니다. 끈이 가까울수록 거리도 가까워집니다.
    zrange 키 시작 중지지정된 키의 좌표 정보 가져오기
    zrem 키 위치지정된 키에서 지정된 대상의 데이터 삭제

    위 내용은 Redis의 특수 데이터 유형을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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