【Chapter-2】Redis数据类型

  • 使用字符串(string)数据类型

  • 使用列表 (list)数据类型,代号l

  • 使用哈希 (hash)数据类型,代号h

  • 使用集合(set)数据类型,代号s

  • 使用有序集合(sorted set)数据类型,代号z

  • 使用HyperLogLog数据类型,代号pf

  • 使用Geo数据类型,代号geo

  • 键管理

redis所有的key都是字符串类型

string类型

特点:存储单一结构的数据

#查看所有的key
127.0.0.1:6379> keys *
1) "age"
2) "name"
#通过name获取value
127.0.0.1:6379> get name
"woms"
#查看value长度
127.0.0.1:6379> strlen name
(integer) 4
#如果name不存在返回nil
127.0.0.1:6379> get hello
(nil)
#append在末尾添加,如果name不存在,会创建一个空字符串,再去拼接
127.0.0.1:6379> append name 123
(integer) 7
127.0.0.1:6379> get name
"woms123"
127.0.0.1:6379> append hello world
(integer) 5
127.0.0.1:6379> get hello
"world"
#查询name是否存在,存在返回1不存在返回0
127.0.0.1:6379> exists name
(integer) 1
#不希望在key存在的时候,盲目的覆盖,使用setnx,如果key不存在,保存成功,返回1,如果key存在,返回0
127.0.0.1:6379> setnx name woms456
(integer) 0
127.0.0.1:6379> setnx addr beijing
(integer) 1
#删除当前数据库中所有的key,flushall删除所有数据库中的key
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
#mset/mget同时设置多个值,具有原子性
127.0.0.1:6379> mset name woms age 13 addr beijing
OK
127.0.0.1:6379> mget name age
1) "woms"
2) "13"

列表list类型

特点:有序可以重复列表

哈希hash类型

特点:具有多属性的对象存储

hset和hmset会覆盖现在字段,hsetnx只有在字段不存在的时候才会设置字段的值

集合set类型

特点:无须,不可以重复

redis提供了一组集合运算的相关命令

  • SUNION和SUNIONSTORE用于计算并集

  • SINTER和SINTERSTORE用于计算交集

  • SDIFF和SDIFFSTORE用于计算差集

不带STORE后缀的命令只返回相应操作的结果集合,带STROE后缀的命令则会将结果存储到一个指定的键中

有序集合(sorted set)类型

特点:不可以重复,带有权重分数所以有序

  • list:双向链条结构,有序可重复

  • set: 集合结构,无序不可以重复

  • zset: 集合结构所以不可以重复,有权重分数可以认为有序

ZADD命令中使用NX选项,能够实现在不更新已存在的成员的情况下值添加新的成员 选项XX只更新存在的成员不添加新的元素 如果多个成员具有相同的分数权重,redis将按照字段顺序进行排序

HyperLogLog类型

特点:集合唯一计数

当数据量增大到上千万时候,考虑到内存消耗和性能下降问题,如果我们不需要获取数据集的内容,只是想得到不同值的个数,可以使用HyperLogLog(HLL) 优点:大集合唯一计数,消耗内存小,耗时短 缺点:可能不准确,标准差小于1% 适合数据量大,精确度要求低

GEO类型

特点:存储和查询地理位置坐标

GEORADIUS和GEORADIUSBYMEMBER命令中,

  • 使用WITHDIST选项来得到距离

  • 使用ASC/DESC选项来控制返回结果的升序或降序

  • 使用STORE/STOREDIST选项还可以将结果存储到另一个GEO集合中

GEO集合实际上被存储到一个有序集合(ZSET),因此有序集合支持的所有命令可以用于GEO数据类型, 我们可以使用ZREM从集合中移除元素,也可以使用ZRANGE来获取所有的成员

键管理

Last updated

Was this helpful?