Redis值的几种类型和应用

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锁续命······
# 

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值