第124天学习打卡(Redis Set Hash Zset 三种特殊数据类型 事务 乐观锁)
发布日期:2021-05-14 03:19:57 浏览次数:22 分类:精选文章

本文共 2536 字,大约阅读时间需要 8 分钟。

Redis 数据结构与命令详解

Redis 是一种开源的分布式数据库,支持多种数据结构,适用于各种应用场景。本文将详细介绍 Redis 的核心数据结构及其相关命令。


一、Set(集合)

1.1 Set 定义

Set 是 Redis 中的一个基本数据结构,特点如下:

  • 无序:Set 中的元素没有固定的顺序
  • 无重复:Set 中的元素是唯一的,不允许重复
  • 动态大小:Set 的大小可以动态增加或减少

1.2 常用命令

# 添加元素
sadd myset "hello"
sadd myset "kuangshen"
sadd myset "lovekuangshen"
# 查看集合元素
smembers myset
# 判断元素是否存在
sismember myset hello
# 移除元素
srem myset hello
# 获取集合大小
scard myset
# 随机抽取元素
srandmember myset

1.3 应用场景

Set 适用于需要存储一组唯一值且不关心顺序的场景,例如:

  • 用户点赞列表
  • 抗重复链接存储

二、Hash(哈希)

2.1 Hash 定义

Hash 是 Redis 中的另一个核心数据结构,特点如下:

  • 键值对:Hash 存储一组键-值对
  • 动态扩展:Hash 的值可以是字符串、数字等任意类型
  • 无序存储:Hash 中的键是无序的

2.2 常用命令

# 添加或更新键值对
hmset myhash field1 hello field2 world
# 获取单个字段值
hget myhash field1
hgetall myhash # 获取全部键值对
# 删除字段
hdel myhash field1
# 获取字段数量
hlen myhash
# 判断字段是否存在
hexists myhash field1

2.3 应用场景

Hash 适用于需要存储多个键-值对且值经常变动的场景,例如:

  • 用户信息存储(如用户名、年龄等)
  • 应用配置管理

三、Zset(有序集合)

3.1 Zset 定义

Zset 是 Set 的扩展版本,增加了一个分数值,特点如下:

  • 有序:Zset 中的元素按分数值排序
  • 动态大小:支持按分数值自动排序

3.2 常用命令

# 添加元素(可选分数值)
zadd myset 1 one
zadd myset 2 two 3 three
# 查看元素
zrange myset 0 -1
zrangebyscore myset -inf +inf
# 移除元素
zrem myset one
# 获取集合大小
zcard myset
# 随机抽取元素
srandmember myset
# 随机删除元素
spop myset
# 移动元素
smove myset myset2 element
# 计算区间内元素数量
zcount myset 1 3

3.3 应用场景

Zset 适用于需要存储有序数据的场景,例如:

  • 班级成绩表
  • 工资表排序

四、Geospatial(地理位置)

4.1 Geospatial 定义

Redis 地理位置(Geospatial)用于存储地理位置信息,支持以下操作:

  • 添加经纬度
  • 计算两地距离
  • 查询附近城市
  • 找出地理范围内的元素

4.2 常用命令

# 添加地理位置
geoadd china:city 116.40 39.90 beijing
geoadd china:city 121.47 31.23 shanghai
# 获取地理信息
geopos china:city beijing
geodist china:city beijing shanghai km
# 查询附近城市
georadius china:city 110 30 1000 km
georadius china:city 110 30 500 km withdist
# GeoHash 转换
geohash china:city beijing chongqing

4.3 应用场景

地理位置适用于需要定位和距离计算的场景,例如:

  • 打车服务(计算距离)
  • 附近的人搜索

五、Hyperloglog

5.1 Hyperloglog 定义

Hyperloglog 是 Redis 中的基数统计算法,适用于需要统计唯一访问次数的场景。

5.2 常用命令

# 添加元素
pfadd mykey a b c d
# 合并集合
pfmerge mykey mykey2
# 获取基数
pfcount mykey

5.3 应用场景

Hyperloglog 适用于需要统计独立访客数量的场景,例如:

  • 网站流量分析

六、Bitmaps(位图)

6.1 Bitmaps 定义

Bitmaps 是 Redis 中的位操作数据结构,用于存储二进制位信息。

6.2 常用命令

# 设置或清除位
setbit sign 0 1
getbit sign 3
bitcount sign

6.3 应用场景

Bitmaps 适用于需要记录状态的场景,例如:

  • 考勤打卡记录
  • 用户活跃度统计

七、事务

7.1 事务定义

Redis 事务是一组命令的集合,特点如下:

  • 原子性:整个事务要么全部执行,要么全部无效
  • 顺序性:命令按顺序执行
  • 排他性:在事务中,其他命令不能修改数据

7.2 常用命令

# 开启事务
multi
# 执行事务
exec
# 取消事务
discard

7.3 事务示例

# 正常执行事务
multi
set k1 v1
set k2 v2
exec

7.4 乐观锁实现

# 监控键
watch money
# 事务执行失败时解锁
unwatch

八、监控

8.1 监控实现

Redis 的乐观锁机制可以实现分布式监控,避免并发问题。

8.2 示例

# 设置监控
watch money
# 开启事务
multi
decrby money 20
incrby out 20
exec

Redis 提供了丰富的数据结构和命令,适用于多种场景。如果需要进一步了解 Redis 的命令或高级功能,可以参考 Redis 官方文档。

上一篇:linux搭建FTP服务器
下一篇:交叉编译openSSL

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月19日 23时46分37秒