【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?