专题二:redis的数据类型之string

2023-06-20,,

一、redis的数据存储格式

redis本身是一个Map,其中所有的数据都是采用 ”key:value“的方式进行存储的。
我们说的数据类型是数据存储的类型,也就是对应下图的value,key部分永远是字符串

 二、string类型

2.1 基本说明

存储的是单个数据,是最简单的数据存储类型
存储数据的格式:一个空间存储一个数据
保存内容:通常使用字符串,如果字符串的内容是纯数字,可以当数字用,但本质还是一个字符串

2.2 基本操作

功能 命令 说明
添加/修改数据 set key value 如果set已经有的key会覆盖之前的值
获取数据  get key 获取不存在的key返回null
删除数据 del key 删除一个存在的key返回1,删除成功;删除一个不存在的key返回0,删除失败
添加/修改多个数据 mset key1 value1 key2 value2 ...  
获取多个数据 mget key1 key2  
获取数据字符个数(字符串长度) strlen key  
追加信息到原始信息内部 append key value 如果原始信息存在就追加,否则就创建;返回的是value对应的长度

对于单数据操作和多数据操作的选择问题:

先来想一下,一条指令的执行过程,指令要发送给服务器,服务器处理之后,还要返回给客户端,这里可以看作是三个处理时间;假如是三条或者更多指令呢?至少一次回一个数据结果比回100个数据结果还是有差别的。当然并不是绝对要用哪一个,数据量小其实差别不大,如果数据量又足够特别大,最好还是要找到一个合适点进行数据切割再执行,毕竟之前就提及到redis的单线程工作,不能阻塞到那里。

2.3 扩展操作

(1)场景一:分库分表的主键唯一ID,我们不能每个表控制自己的主键ID,怎么办呢?

解决方案:

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

功能 命令 其他说明
对数值增 incr key 一次增1
指定增加数值 incrby key increment  
可以增加小数 incrbyfloat key increment  

设置数值数据减少指定范围的值

功能 命令 其他说明
对数值进行减操作 decr key 一次减少1
指定减少数值 decrby key increment  

说明:

string在redis内部默认就是一个字符串,当遇到增减类操作的时候,会转换为数值进行运算;
redis的操作都是原子性的,采用单线程处理;
按数值进行操作的数据,如果原始数据不能转换为数值,或者超过redis的数值上限范围,将报错。最大值:Long.MAX_VALUE

(2)场景二:微信投票,1小时候至多投一次;或者电商中每种商品3天热门,3天后下架;热点新闻等

解决:

设置数据具有指定的生命周期

功能 命令 其他说明
设置指定key存活时间 set key seconds value 单位秒
设置指定key存活时间 psetex key milliseconds value 单位毫秒

(3)场景3:新浪微博存储某个明星的粉丝数和微博数,这里用string怎么存呢?

解决:

set user:id:012345:fans  123456789            set user:id:012345:blogs  6790
采用json的方式:set user:id:012345  {id:012345, blogs:6790, fans:123456789}
扩展:当然也有可能你会想到hash,本节不做讨论,下一节描述

2.4 redis key的命名规范

表名:主键名:主键ID:字段名  

2.5 对于string操作的小结

对于数据操作成功失败的差异,表示运行结果是否成功,0代表失败或者false,1代表成功或者true
数据未获取到,返回nil,等同于null
数据最大存储量:512MB
数值计算存在最大范围:Long.MAX_VALUE

这一篇就到这里,下一篇写redis数据类型之hash。

专题二:redis的数据类型之string的相关教程结束。

《专题二:redis的数据类型之string.doc》

下载本文的Word格式文档,以方便收藏与打印。