目录

  • 1 概念
  • 2 key相关操作
  • 3 常用value数据类型
  • 3.1 String类型
  • 3.2 List类型
  • 3.3 Set类型
  • 3.4 Hash类型
  • 3.5 Zset类型
  • 4 三种特殊类型
  • 4.1 geospatial
  • 4.2 Hyperloglog
  • 4.3 Bitmaps


1 概念

redis存储的数据全部是以key-value键值对存在的,所谓的redis数据类型是针对value的类型;

2 key相关操作

  • 判断是否存在key:EXISTS [key];
  • 设置key的过期时间:expire [key] [time]单位是秒
  • 查看过期时间:ttl [key]
  • 删除key:del [key]
  • 查看key的类型:type [key]

3 常用value数据类型

3.1 String类型

  • 追加append [key] [value]
  • 获取长度strlen [key];
  • 自增incr [key]
  • 自减decr [key];
  • 自增多个incrby [key] 5
  • 自减多个decrby [key] 6
  • 获得子串GETRANGE [key] [start] [end];(左闭右闭,从0开始,为负就倒着数)
  • 按位置替换setrange [key] [start] [value]
  • 设置过期字符串:setex [key] [time] [value]
  • 不存在就设置:setnx [key] [value]
  • 批量添加:mset k1 v1 k2 v2 k3 v3
  • 批量获取:mget k1 k2 k3
  • 批量设置如果不存在msetnx(原子操作):msetnx k1 v1 k4 v4任意一个存在了就不存入成功;
  • 先获取再设置(常用于替换):getset [key] [value]

String类型不仅可以是字符串,还可以是数字!

3.2 List类型

  • 左边添加LPUSH [listname] [value](注意这里的listname是列表名,列表里面存着value);
  • 获取列表的值lrange [listname] [start] [end](可以使用负数,倒着数);
  • 右边添加RPUSH [listname] [value]
  • 左边移除LPOP [listname]
  • 右边移除RPOP [listname]
  • 按照index获取LINDEX [listname] [index]
  • 查看长度LLEN [listname]
  • 移除指定值LREM [listname] [nums] [value](从列表中移除多少个value)
  • 获得子listLTRIM [listname] [start] [end](在原list上修改)
  • 右边pop出来,左边push进去:RPOPLPUSH [src] [dist]
  • 在指定元素前后插入LINSERT [listname] [before|after] [valuesrc] [valuedis]

3.3 Set类型

  • 添加sadd [setname] [value]
  • 查看所有元素SMEMBERS [setname]
  • 查看元素是否在里面SISMEMBER [setname] [value]
  • 获取集合元素个数SCARD [setname]
  • 移除元素SREM [setname] [value]
  • 随机返回一个元素SRANDMEMBER [setname]
  • 差集:SDIFF [s1] [s2] (s1中的元素除去s2中有相同的)
  • 交集:SINTER [s1] [s2]
  • 并集:SUNION [s1] [s2]

3.4 Hash类型

  • 存值HSET hs h1 v1 h2 v2 h3 v3
  • 取值hget hs h1 ……和redis的key-value操作大致相似,就是多嵌套了一层;

3.5 Zset类型

有序集合

  • 添加元素zadd key [NX|XX] [CH] [INCR] score member [score member ...](在集合添加元素的时候需要添加得分)
  • 获取全部ZRANGE [name] [start] [end]
  • 根据分数获取元素ZRANGEBYSCORE zs -inf +inf limit 0 2(返回最小的两个值)
  • 固定区间的值ZRANGEBYSCORE zs -inf 80(得分小于80的)
  • 按照index返回区间的值ZREVRANGE zs 2 3(排序后的2-3个)

4 三种特殊类型

4.1 geospatial

地理位置加经纬度坐标;

  • geoadd 添加地理位置(经、纬度和位置名)
  • geopos获得位置的经纬度;
  • geodist返回两个给定位置之间的距离;
  • georadius:以给定经纬度为中心,找到某一半径内的元素;
  • georadiusbymember:找出指定范围内的元素,中心点是元素;
  • geohash:返回一个或多个位置元素的Geohash表示;

GEO底层使用zset,可以使用zset相关命令来操作geo

4.2 Hyperloglog

不重复的元素,

  • 添加元素:PFADD ip a b b b c
  • 获得总数:PFCOUNT ip
  • 合并两个:PFMERGE ip3 ip1 ip2

场景:添加元素,统计的时候自动去重;特点HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。

4.3 Bitmaps

位存储;

  • 添加setbit key offset value
  • 获取getbit key offset
  • 统计BITCOUNT key [start end]