文章目录
- Redis数据类型(5种常用)
- string类型
- 基本操作
- 扩展操作(主要是对数字)
- 注意事项
- key命名约定
- hash类型
- hash类型的存储特点
- 基本操作
- 扩展操作(主要是对数字)
- 注意事项
- list类型
- 存储特点
- 基本操作
- 扩展操作
- 注意事项
- set类型
- 存储特点
- 基本操作
- 扩展操作(主要是集合间的基本运算)
- 应用场景
Redis数据类型(5种常用)
redis本身是k-v形式存储数据的,而下文所指的数据类型都是对value进行修饰的。key永远是字符串
常用的五种value的数据类型
- string
- hash
- list
- set
- sorted_set/zset(应用较少)
string类型
基本操作
setnx指令的作用有点像一个返回boolean的函数,如果设置成功,如
setnx k4 v4
则会返回1表示设置成功。
反之,返回0就是设置失败,如:
setnx k4 v5,因为k4这个key值已经存在了
关于append操作,有点像字符串拼接的意思,是直接将新的信息拼接到原始字符串后面。返回更新后value的长度。
如何选择set(单指令)和mset(多指令)?
数据量大的时候应该选择多指令,因为考虑到发送指令到服务器的网络延时。单指令条数过多的时候,受网络延迟的影响也就越大。
扩展操作(主要是对数字)
注意事项
格外注意:
6.redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响
key命名约定
习惯上我们用表名+主键名+主键值+字段名 作为key值的命名
hash类型
hash类型的存储特点
业务场景:有的数据有大量的重复部分,而只有局部的差别
于是自然想到,能不能把左边完全相同的数据抽取出来成为公共部分呢
于是我们得到了一种新的存储形式
需要注意的是,hash在这里并不是指的某一条数据,而是指的右边整体的存储空间,这个存储空间的本质是多个键值对数据
(有点像套娃,整体看起来key-hash,而hash内部又是key-value的形式,整体呈现key-filed-value形式的存储结构)
注意:hash自身实现了存储结构优化
基本操作
和string类型的操作差别不大,主要是在指令前加了字母 “h”
扩展操作(主要是对数字)
注意事项
list类型
存储特点
总结起来就是:多个数据、数据有序(先后顺序)
list类型的底层是通过双链表实现的——因此增删快,查找慢
整体的结构是key-list形式。list作为value值。list内部又有更多的有序数据
基本操作
list底层基于双向链表实现,表现为一个队列,因此左右都能操作,且遵循fifo的逻辑。
扩展操作
字母b代表block,阻塞
blpop和lpop的区别:blpop可以设置等待时间。如果当前list中有指定的数据,则会直接弹出。否则将等待指定的时间,若等待时间到期而未能取出数据,则会返回nil表示取数据失败
注意事项
第三条较为重要,也更常用。相当于select *的意思。
set类型
存储特点
和Java的set不能说毫不相关吧,起码是一模一样
set用于存储更多的数据,提供更高的查询效率,这也是set类型最显著的特征
set类型在结构上和hash一模一样(是一种类hash结构),只是在value的存储方式上有所简化。相当于将hash中的value和filed合并为value。
set另一个显著的特征是不允许有重复的值
基本操作
扩展操作(主要是集合间的基本运算)
应用场景
黑白名单