Redis值的几种类型和应用

本文介绍了Redis中的五种数据结构:字符串、哈希、列表、无序集合和有序集合,并详细探讨了每种数据结构的应用场景,如使用哈希实现购物车功能、利用列表实现队列等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis

内存存储,键值存储key: value

Redis值的五种数据结构

redis的value有五种数据结构:
分别是:字符串,哈希,列表,无序集合,有序集合。
Set和ZSET中元素不能重复
在这里插入图片描述

API
value为string的API
  • keys *查看当前库中共有多少个key

  • get key查看某个key的值

  • mget key查看多个key的值,mget k1 k2 k3

  • del key删除key,key中的value页删除了

  • expire key 100,100秒后删除key(多少秒都可)

  • set key1 value每次设置一个键值

  • mset key2 value key3 value key4 value批量设置键值

原子加减

key存储的value可以转换为数字,并对value做加减

  • incr key:加一
  • decr key:减一
  • incr key 数字:value加上指定的数字
  • decr key 数字
hashAPI

hash是可以实现购物车的,看应用

  • hset key field1 value field2 value
  • hsetnx key ...
  • hget key field
  • mhget key field1 field2
  • hlen keykey中元素的数量
  • HGETALL KEY:返回key下所有
  • HINCRBY key field 数字:增加
list

list可以看成是一个管子,从管子两端都能放入数据。

  • LPUSH key 元素
  • RPUSH key 元素

应用

string
  • 存储对象:key:json
  • 存储session:set cookie短令牌 用户session
  • 分布式锁:setnx lock 1,设置成功获取锁
hash
  • 存储对象
  • string能实现的都能实现
  • 购物车:用户id(key),商品编号(field),商品数量(value)
  • 有个小缺点:过期时间只能应用在key上,不能应用到field上面

购物车:用户id:商品1 数量,商品2 数量,商品3 数量
在这里插入图片描述
突然觉得有点头晕,站起身感觉人都在晃动,原来是台湾花莲县地震了…

list

list可以看成是一个管子,从管子两端都能放入数据。

  • 实现栈
  • 实现队列
  • 实现阻塞队列

事务与乐观锁
# 开启事务
multi
# 减库存
decr product_id_num
decr product_id_num
decr product_id_num
# 更新订单状态
set id_order_status created

# 提交事务
exec

并发场景下如果不用锁Java代码这么写肯定会出现超卖的问题。事务开启之前product_id_num的值是1000,如果exec执行之前另一个客户端把product_id_num的值改了结果会怎么样?这个事务应该作废吗?会作废吗?

# 乐观锁
# watch监听这个key的值,如果值发生变化下面的事务会被作废
watch product_id_num

# 开启事务
multi
# 减库存
decr product_id_num
decr product_id_num
decr product_id_num
# 更新订单状态
set id_order_status created

# 提交事务
exec

# 结束监听
unwatch
分布式事务
# 返回1,插入成功
setnx global_tx_key 1
expire global_tx_key 20
# 返回0,插入失败
setnx global_tx_key 1

# redission锁续命······
# 

在这里插入图片描述

Redis 是一种高性能的键对数据库,支持多种数据类型的存储操作。以下是 Redis 支持的主要数据类型: ### 1. **字符串 (String)** 这是最简单的一种类型,在 Redis 中可以是一个普通的字符串、整数或浮点数- 可以执行诸如 `SET`, `GET` 等基本命令。 - 还能进行数学运算如 `INCR` `DECR` 来递增或递减数字型字符串。 - 字符串的最大长度为512MB。 **示例:** ```bash SET mykey "Hello" GET mykey ``` ### 2. **哈希表 (Hash)** 用于存储字段之间的映射关系,类似于其他语言中的字典(Dictionary)或关联数组。 - 使用场景包括但不限于表示对象属性集合等复杂结构。 - 常见命令有 `HSET`, `HGET`, `HMSET`, `HDEL` 等。 **示例:** ```bash HSET user:1000 name "Alice" age 30 HGETALL user:1000 ``` ### 3. **列表 (List)** 按插入顺序排列的一系列元素构成的双向链表形式的数据结构。 - 允许从两端高效地添加或删除节点;同时也支持随机位置的操作。 - 经常用作队列系统的基础组件之一。 - 相关指令例如 `LPUSH`, `RPUSH`, `LPOP`, `RPOP`. **示例:** ```bash LPUSH mylist "first" RPUSH mylist "second" LRANGE mylist 0 -1 ``` ### 4. **集合 (Set)** 无序且不允许重复成员组成的容器。 - 提供了一组独特的功能来处理交集(`SINTER`)、并集(`SUNION`)及差分(`SDIFF`)计算。 - 对应的基本操作包含 `SADD`, `SMEMBERS`, `SCARD` (获取集合大小)、`SREM` 删除指定成员等。 **示例:** ```bash SADD fruits apple banana orange SMEMBERS fruits ``` ### 5. **有序集合 (Sorted Set 或 Zset)** 每个元素除了本身之外还附带有一个分数(score),以此为基础按照升序排序。 - 能够快速找到排名最高的几项记录或是特定范围内的条目。 - 关联命令像 `ZADD`, `ZRANK`, `ZRANGEBYSCORE`, `ZREMRANGEBYSCORE` 等都非常实用。 **示例:** ```bash ZADD leaderboard 100 playerA 90 playerB 85 playerC ZREVRange leaderboard 0 2 WITHSCORES ``` 了解这些不同类型及其特性可以帮助开发者更有效地利用 Redis 的优势来进行各种应用场景下的缓存设计与优化工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值