(二)Redis数据类型之String类型

数据存储类型介绍

业务数据的特殊性,分析数据类型应该有哪些

作为缓存使用
  • 原始业务功能设计
    秒杀
    618活动
    双十一活动
    排队购票
  • 运营平台监控到的突发高频访问数据
    突发市政要闻,被强势关注围观
  • 高频、复杂的统计数据
    在线人数
    投票排行榜

附加功能
系统功能优化或升级

  • 单服务器升级集群
  • Session管理
  • Token管理
Redis 数据类型(5种常用)
  • string --> String
  • hash --> Hashmap
  • list --> LinkList
  • set --> HashSet
  • sorted_set --> TreeSet

String

redis 数据存储格式

  • redis自身是一个Map,其中所有的数据都是采用key:value的形式存储
  • 数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串
    在这里插入图片描述

String 类型

  • 存储的数据:单个数据,最贱的数据存储类型,也是最常用的数据存储类型 存储数据的格式:一个存储空间保存一个数据
  • 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用
    在这里插入图片描述

String 类型数据的基本操作

- 添加/修改数据
	set key value
	
- 获取数据
	get key
	
- 删除数据
	del key

m 代表 Multiple
- 添加/修改多个数据
	mset key1 valueq key2 value2 …
	
- 获取多个数据
	mget key1 key2 …

- 获取数据字符个数(字符串长度)
	strlen key

- 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
	append key value

eg:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

String类型数据的扩展操作

业务场景一

大型企业级应用中,分表操作是基本操作,使用多张表存储同类型数据,但是对应的主键id必须保证统一性,不能重复。Oracle数据库具有sequence设定,可以解决该问题,但是MySQL数据库并不具有类似的机制,那么如何解决?

解决方案

  • 设置数值数据增加指定范围的值

    incr key    对该key的值进行自增 +1
    incrby key increment   对该key的值进行指定值(increment)相加
    	即:key为num,指定值increment为10,则num+10
    	注意:incrby只能对整型数字进行使用,如果数据类型为不是整型,即有小数,则无法成功,只能incrbyfloat 将其转成整型
    	且increment可正可负   正为加,负为减
    incrbyfloat key increment  对该key的值进行小数类型相加
    
  • 设置数值数据减少指定范围的值

    decr key   对该key的值进行自减 -1
    decrby key increment  对该key的值进行指定值(increment)相减
    	increment可正可负  正为减,负为加
    

在这里插入图片描述
在这里插入图片描述

String作为数值操作
  • string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。
  • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
    注意:按数值进行操作的数据,如果原始数据不能转成数值,或超过了redis数值上线范围,将会报错。
    9223372036854775807 (java中long型数据最大值,Long.MAX_VALUE)
    在这里插入图片描述

Tips 1:

  • redis用于控制数据库表主键id,为数据库表主键提供生成策略,保障数据库表的主键唯一性
  • 此方案适用于所有数据库,且支持数据库集群
业务场景二:

1、“最强女生”,启动海选投票,只能通过微信投票,每个微信号每4个小时只能投1票。

2、电商商家开启热门商品推荐,热门商品不能一直处于热门期,每种商品热门期维持3天,3天后自动取消热门

3、新闻网站会出现热点新闻,热点新闻最大的特征是对时效性,如何自动控制热点新闻的时效性

解决方案
如:
第一个例子,你投票,投完我帮你记着,然后过了四小时就帮你擦了,然后你下次来投,就看你的名字有没有在我这里记着,如果没有,那么你再投,投完我再给你记4小时。
这样的话,就得有个new_id = HB123212,然后给这个id设置时长,等到时长到了,我们就把这个id给它擦掉。

  • 设置数据具有指定的声明周期
    setex key seconds value
    psetex key milliseconds value
    
    两者的差别在于,前者是秒,后者是毫秒。

在这里插入图片描述

Tips 2:

  • redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作
String 类型的注意事项
  • 数据操作不成功的反馈与数据正常操作之间的差异
    1、表示运行结果是否成功
     (integer)0–>false 失败
     (integer)1–>true 成功
    2、表示运行结果值
     (integer)3–>3 3个
     (integer)1–>1 1个
  • 数据未获取到
    (nil)等同于null
  • 数据最大存储量
    512MB
  • 数值计算最大范围(java中的long的最大值)
业务场景三:

主页高频访问信息显示控制,例如新浪微博大V主页显示粉丝数与微博数量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

key的设置约定
  • 数据库中的热点数据key命名惯例
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值