文章目录

  • Redis数据类型(5种常用)
  • string类型
  • 基本操作
  • 扩展操作(主要是对数字)
  • 注意事项
  • key命名约定
  • hash类型
  • hash类型的存储特点
  • 基本操作
  • 扩展操作(主要是对数字)
  • 注意事项
  • list类型
  • 存储特点
  • 基本操作
  • 扩展操作
  • 注意事项
  • set类型
  • 存储特点
  • 基本操作
  • 扩展操作(主要是集合间的基本运算)
  • 应用场景


Redis数据类型(5种常用)

redis本身是k-v形式存储数据的,而下文所指的数据类型都是对value进行修饰的。key永远是字符串

Redis存储3亿数据 redis存储大量数据_数据结构


常用的五种value的数据类型

  • string
  • hash
  • list
  • set
  • sorted_set/zset(应用较少)

string类型

Redis存储3亿数据 redis存储大量数据_nosql_02

基本操作

Redis存储3亿数据 redis存储大量数据_java_03


setnx指令的作用有点像一个返回boolean的函数,如果设置成功,如

setnx k4 v4

则会返回1表示设置成功。

反之,返回0就是设置失败,如:

setnx k4 v5,因为k4这个key值已经存在了

Redis存储3亿数据 redis存储大量数据_nosql_04


关于append操作,有点像字符串拼接的意思,是直接将新的信息拼接到原始字符串后面。返回更新后value的长度。

如何选择set(单指令)和mset(多指令)?

数据量大的时候应该选择多指令,因为考虑到发送指令到服务器的网络延时。单指令条数过多的时候,受网络延迟的影响也就越大。

扩展操作(主要是对数字)

Redis存储3亿数据 redis存储大量数据_Redis存储3亿数据_05

注意事项

Redis存储3亿数据 redis存储大量数据_Redis存储3亿数据_06


格外注意:

6.redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响

key命名约定

习惯上我们用表名+主键名+主键值+字段名 作为key值的命名

Redis存储3亿数据 redis存储大量数据_redis_07

hash类型

hash类型的存储特点

业务场景:有的数据有大量的重复部分,而只有局部的差别

Redis存储3亿数据 redis存储大量数据_java_08


于是自然想到,能不能把左边完全相同的数据抽取出来成为公共部分呢

于是我们得到了一种新的存储形式

Redis存储3亿数据 redis存储大量数据_java_09


需要注意的是,hash在这里并不是指的某一条数据,而是指的右边整体的存储空间,这个存储空间的本质是多个键值对数据

(有点像套娃,整体看起来key-hash,而hash内部又是key-value的形式,整体呈现key-filed-value形式的存储结构)

Redis存储3亿数据 redis存储大量数据_nosql_10


注意:hash自身实现了存储结构优化

Redis存储3亿数据 redis存储大量数据_redis_11

基本操作

和string类型的操作差别不大,主要是在指令前加了字母 “h”

Redis存储3亿数据 redis存储大量数据_nosql_12

扩展操作(主要是对数字)

Redis存储3亿数据 redis存储大量数据_Redis存储3亿数据_13

注意事项

Redis存储3亿数据 redis存储大量数据_Redis存储3亿数据_14

list类型

存储特点

Redis存储3亿数据 redis存储大量数据_redis_15


总结起来就是:多个数据、数据有序(先后顺序)

list类型的底层是通过双链表实现的——因此增删快,查找慢

整体的结构是key-list形式。list作为value值。list内部又有更多的有序数据

基本操作

Redis存储3亿数据 redis存储大量数据_redis_16


list底层基于双向链表实现,表现为一个队列,因此左右都能操作,且遵循fifo的逻辑。

扩展操作

Redis存储3亿数据 redis存储大量数据_数据结构_17


字母b代表block,阻塞

blpop和lpop的区别:blpop可以设置等待时间。如果当前list中有指定的数据,则会直接弹出。否则将等待指定的时间,若等待时间到期而未能取出数据,则会返回nil表示取数据失败

注意事项

Redis存储3亿数据 redis存储大量数据_Redis存储3亿数据_18


第三条较为重要,也更常用。相当于select *的意思。

set类型

存储特点

和Java的set不能说毫不相关吧,起码是一模一样

set用于存储更多的数据,提供更高的查询效率,这也是set类型最显著的特征

Redis存储3亿数据 redis存储大量数据_nosql_19


set类型在结构上和hash一模一样(是一种类hash结构),只是在value的存储方式上有所简化。相当于将hash中的value和filed合并为value。

Redis存储3亿数据 redis存储大量数据_数据结构_20


set另一个显著的特征是不允许有重复的值

Redis存储3亿数据 redis存储大量数据_Redis存储3亿数据_21

基本操作

Redis存储3亿数据 redis存储大量数据_nosql_22


Redis存储3亿数据 redis存储大量数据_nosql_23

扩展操作(主要是集合间的基本运算)

Redis存储3亿数据 redis存储大量数据_数据结构_24

应用场景

黑白名单

Redis存储3亿数据 redis存储大量数据_redis_25