Redis-数据类型

List

Redis List 的有序指插入顺序有序,是双向链表保存元素位置,不会根据元素值自动排序;ZSet 才是根据 score 自动排序。

LPUSH mylist A
LPUSH mylist B
RPUSH mylist C

LPUSH A → [A]

LPUSH B → [B, A]

RPUSH C → [B, A, C]

    ZSet

    不管插入先后,永远按 score 排序

    # 先插入 score=100 的 zhangsan
    ZADD rank 100 zhangsan
    # 后插入 score=80 的 lisi
    ZADD rank 80 lisi
    # 再插入 score=90 wangwu
    ZADD rank 90 wangwu

    执行 ZRANGE rank 0 -1(从小到大查询)

    1) "lisi"
    2) "wangwu"
    3) "zhangsan"

    Hash 哈希

    一个 key,包含多个 field:value,适合存对象,类似一张小表一行。

    user:100 -> {
        name: "zhangsan",
        age: "20",
        email: "a@test.com"
    }

    可以单独更新某一个字段,不用序列化整个对象。

    GEO

    Redis GEO 底层本质就是 ZSet,key 为 GEO 的键名,member 存储地点名称,score 存放经纬度编码后的 geohash 52 位整数。使用 GEOADD 添加坐标时,参数顺序是经度在前、纬度在后,这点很容易踩坑;GEO 没有单独的删除指令,删除元素直接使用 ZREM 操作这个 ZSet 的 member。

    # 1. GEOADD 添加坐标(经度 纬度 member)
    GEOADD geo:cities 116.403874 39.914885 "北京" 121.473701 31.230416 "上海" 113.264385 23.129110 "广州"
    geo:cities(ZSet)
    member:"北京"   score=geohash(116.403874,39.914885)
    member:"上海"   score=geohash(121.473701,31.230416)
    member:"广州"   score=geohash(113.264385,23.129110)

    查询城市经纬度

    GEOPOS geo:cities 北京 上海

    计算两点距离(单位 m /km)

    # 北京到上海,单位km
    GEODIST geo:cities 北京 上海 km