面试相关
redis数据类型详解
00 分钟
2024-11-23
2024-11-23
type
status
date
slug
summary
tags
category
icon
redis是基于键值对来存储一系列信息的非关系型数据库,也就是说每条信息都一定有一个key。
使用的工具是StringRedisTemplate

一、基本数据类型

1.String(字符串):应用:计数器、分布式锁、共享session、缓存预热

  • SET key value:设置指定键的值。
  • GET key:获取指定键的值。
  • INCR key:将键的值增加1,如果键不存在则创建并设为0后再加1。
  • DECR key:将键的值减少1,如果键不存在则创建并设为0后再减1。
  • INCRBY key increment:将键的值增加指定的增量。
  • DECRBY key decrement:将键的值减少指定的减量。

设置和获取键值

增加和减少数值

追加值

2.Hash(哈希):结构是key:(key:value);应用:缓存用户信息

  • HSET key field value:设置哈希表中字段的值。
  • HGET key field:获取哈希表中字段的值。
  • HMSET key field1 value1 [field2 value2 ...]:同时设置哈希表中多个字段的值。
  • HMGET key field1 [field2 ...]:获取哈希表中多个字段的值。
  • HGETALL key:获取哈希表中所有字段和值。
  • HDEL key field1 [field2 ...]:删除哈希表中的一个或多个字段。
  • HEXISTS key field:检查哈希表中是否存在指定字段。
  • HLEN key:获取哈希表中字段的数量。
  • HKEYS key:获取哈希表中所有的字段。
  • HVALS key:获取哈希表中所有的值。

设置和获取哈希表字段

获取哈希表所有字段和值

删除哈希表字段

3.List(列表):有序可重复;应用:消息队列,文章列表

  • LPUSH key value1 [value2 ...]:将一个或多个值插入列表的头部。
  • RPUSH key value1 [value2 ...]:将一个或多个值插入列表的尾部。
  • LPOP key:移除并返回列表的第一个元素。
  • RPOP key:移除并返回列表的最后一个元素。
  • LRANGE key start stop:获取列表中指定范围的元素。
  • LLEN key:获取列表的长度。
  • LINDEX key index:获取列表中指定位置的元素。
  • LSET key index value:设置列表中指定位置的元素值。
  • LREM key count value:从列表中移除指定数量的值。

插入值到列表头部和尾部

移除并返回列表的第一个和最后一个元素

获取列表中指定范围的元素

4.集合(Set):无序且不重复;应用:关注列表,共同关注,生成随机数抽奖

  • SADD key member1 [member2 ...]:将一个或多个成员添加到集合中。
  • SMEMBERS key:获取集合中的所有成员。
  • SISMEMBER key member:检查成员是否存在于集合中。
  • SREM key member1 [member2 ...]:从集合中移除一个或多个成员。
  • SCARD key:获取集合中成员的数量。
  • SINTER key1 [key2 ...]:获取多个集合的交集。
  • SUNION key1 [key2 ...]:获取多个集合的并集。
  • SDIFF key1 [key2 ...]:获取多个集合的差集。
  • SRANDMEMBER key [count]:随机返回集合中的一个或多个成员。

添加和移除集合成员

获取集合中的所有成员

检查成员是否存在于集合中

5.有序集合(Sorted Set):有序且不重复,分数可以相同。点赞排行榜()

  • ZADD key score1 member1 [score2 member2 ...]:将一个或多个成员及其分数添加到有序集合中。
  • ZRANGE key start stop [WITHSCORES]:按分数从小到大返回有序集合中指定范围的成员。
  • ZREVRANGE key start stop [WITHSCORES]:按分数从大到小返回有序集合中指定范围的成员。
  • ZRANK key member:返回成员在有序集合中的排名,分数从小到大。
  • ZREVRANK key member:返回成员在有序集合中的排名,分数从大到小。
  • ZREM key member1 [member2 ...]:从有序集合中移除一个或多个成员。
  • ZCARD key:获取有序集合中成员的数量。
  • ZCOUNT key min max:统计有序集合中分数在指定范围内的成员数量。
  • ZSCORE key member:获取成员在有序集合中的分数。
  • ZINCRBY key increment member:将成员的分数增加指定的增量。
  • ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的交集,并将结果存储在新的有序集合中。
  • ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的并集,并将结果存储在新的有序集合中。

添加和移除有序集合成员

获取有序集合中指定范围的成员

获取成员的排名

6.通用命令

  • DEL key:删除键。
  • EXISTS key:检查键是否存在。
  • EXPIRE key seconds:设置键的过期时间(秒)。
  • TTL key:获取键的剩余生存时间(秒)。
  • TYPE key:获取键的类型。
  • KEYS pattern:查找符合给定模式的键。
  • FLUSHDB:清空当前数据库中的所有键。
  • FLUSHALL:清空所有数据库中的所有键。

删除键

检查键是否存在

设置键的过期时间

获取键的剩余生存时间

清空当前数据库

清空所有数据库

二、高级数据类型

1. Bitmaps(位图)

特点
  • 位图是一种特殊的字符串类型,每个位可以存储 0 或 1。
  • 位图操作可以用于高效地存储和检索二进制数据。
应用场景
  • 用户签到:记录用户每天是否签到,每个位表示一天,1 表示签到,0 表示未签到。
  • 统计分析:记录某个时间段内用户的活跃情况,如每日登录用户数。
  • 权限控制:记录用户的权限,每个位表示一种权限。
常用命令
  • SETBIT key offset value:设置指定偏移量上的位值。
  • GETBIT key offset:获取指定偏移量上的位值。
  • BITCOUNT key [start] [end]:统计指定键中 1 的数量。
  • BITOP operation destkey key [key ...]:对多个位图进行按位操作(AND、OR、NOT、XOR)。

2. HyperLogLog

特点
  • 用于估计集合的基数(即集合中不重复元素的数量)。
  • 占用空间极小,每个 HyperLogLog 只占用 12 KB 内存。
  • 有一定的误差率,但误差率通常在 0.81% 以内。
应用场景
  • 独立访客统计:统计网站的独立访客数。
  • 日活用户:统计应用的每日活跃用户数。
  • 去重统计:统计某一时间段内的不重复事件数。
常用命令
  • PFADD key element [element ...]:添加一个或多个元素到 HyperLogLog。
  • PFCOUNT key [key ...]:返回一个或多个 HyperLogLog 的近似基数。
  • PFMERGE destkey sourcekey [sourcekey ...]:将多个 HyperLogLog 合并到一个新的 HyperLogLog 中。

3. GEO(地理信息)

特点
  • 用于存储和查询地理位置信息。
  • 支持基于经纬度的地理位置操作,如距离计算、半径查询等。
应用场景
  • 附近的人:查找附近的用户或地点。
  • 位置服务:提供基于地理位置的服务,如地图标注、导航等。
  • 物流配送:优化配送路径,计算配送距离。
常用命令
  • GEOADD key longitude latitude member [longitude latitude member ...]:添加一个或多个地理空间元素。
  • GEOPOS key member [member ...]:获取一个或多个地理空间元素的经纬度。
  • GEODIST key member1 member2 [unit]:计算两个地理空间元素之间的距离。
  • GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]:查找指定半径内的地理空间元素。
  • GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]:查找指定元素周围的地理空间元素。
  • GEOHASH key member [member ...]:获取一个或多个地理空间元素的 Geohash 编码。

4. Bloom Filter(布隆过滤器)

特点
  • 用于高效地判断某个元素是否在一个集合中。
  • 占用空间小,查询速度快,但有一定的误判率。
应用场景
  • 网页爬虫:判断某个 URL 是否已经被抓取过。
  • 黑名单:判断某个 IP 地址是否在黑名单中。
  • 缓存穿透:防止缓存穿透,判断某个键是否存在于缓存中。
注意
  • Redis 本身并不直接支持 Bloom Filter,但可以通过 Redis 模块(如 RedisBloom)来实现。
上一篇
Redis缓存三兄弟解决方案及实现
下一篇
抽象类和接口的区别