redis 数据存储格式
- redis 存储的数据格式是一个映射的关系。自身是一个 Map,其中所有的数据都是采用
- key : value 的形式存储
- 数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串
在其存储的空间中如果几个数据,必然会有相应的key出现。
如下图,name对应 张三 , sex 对应 man 。可以理解为一个名称对应一个数据,一个key对应一个value
string 类型
- 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
- 存储数据的格式:一个存储空间保存一个数据
- 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用
- 存储方式: 一个key对应一个字符串
基本操作
- 添加/修改 set key value
- 获取数据 get key
- 删除数据 del key
在redis中如果以成功失败为返回 则是返回的 integer 1(成功)或者 integer 0(失败)。当获取不到数据时会返回nil
string 类型数据的基本操作
- 添加/修改多个数据 (m为Multiple的简写)
- mset key1 value1 key2 value2 …
- 获取多个数据
- mget key1 key2 …
基本操作和set get一样 当set的值已经存在时会将新的值会替换旧值。
- 获取数据字符个数(字符串长度)
- strlen key
- 如name: strlen name 返回值为4
- 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
- append key value
以上基本为string的7个基本的操作命令。
此时大家可能会发现 set mset 它两的功能基本上是一样的都是存放一个字符串数据,那它俩有什么区别,什么时候该用那个呢?
这个问题其实没有一个那个好,那个不好的一说。这个需要配合你的使用场景。其中主要考虑的就是它俩的执行时间,因为每次创建连接,存储数据,返回结果。这个都是需要一定的时间的。如果说存两个key,一个name,一个age。这个两个key相当较为简单,此时mset的执行时间相对两次的set所需要的时间的少的。但当数据量较大时可能mset的执行时间会很长,在因为redis是单线程操作的,这样就会导致redis的卡死,所有后续的操作都必须等待。所以当数据量较大时需要考虑适当的拆分,将一次运行的数据拆成多次处理。
string 类型数据的扩展操作
设置数值数据增加指定范围的值
- incr key
- incrby key increment
- incrbyfloat key increment
设置数值数据减少指定范围的值
- decr key
- decrby key increment
当string的值为纯数字时就可使用以上名称对数值进行加减操作
incrby key increment 和 decrby key increment 表示给该key加或减去给定的数值。Increment的值可正可负,当incrby key increment的increment为负时可实现减的效果,decrby 同理。 如果不知道该命令是怎么使用的可以使用上期说过的help 指令进行查看。
incrbyfloat key increment 表示可以给该值增加小数。如incrbyfloat key 1.5
string 作为数值操作
- string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。
- redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
- 注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。9223372036854775807(java中long型数据最大值,Long.MAX_VALUE)
设置数据具有指定的生命周期
- setex key seconds value
- psetex key milliseconds value
redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作,例如:多长时间可以投一次票,验证码的有效期等等。