首页 > 数据库 >Redis_基础

Redis_基础

时间:2023-12-12 18:01:52浏览次数:38  
标签:Redis 元素 基础 value Jedis key 序列化

Redis_基础

SQL与NoSQL对比

  1. 数据结构:结构化---非结构化
  2. 数据关联:关联的---无关联
  3. 查询方式:SQL查询---非SQL
  4. 事务特性:ACID---BASE
  5. 存储方式:磁盘---内存
  6. 扩展性:垂直---水平
  7. 使用场景:数据结构固定,相关业务对数据安全性、一致性要求较高---数据结构不固定,对一致性、安全性要求不高,对查询性能要求高。

Redis简介

全称:Remote Dictionary Server 远程字典服务
特征:

  1. 键值型,value支持多种不同数据结构,功能丰富。
  2. 单线程,每个命令具备原子性。
  3. 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
  4. 支持数据持久化。
  5. 支持主从集群,分片集群。
  6. 支持多语言客户端。

String类型

根据字符串的格式不同,分为3类:

  1. string:普通字符串
  2. int:整数类型,可以做自增、自减操作。
  3. float:浮点类型,可以做自增、自减操作。

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m。

常用命令:SET增,GET查,MSET批量增,MGET批量查,INCR设置自增1,INCRBY设置自增x,INCRBYFLOAT设置自增x,SETNX不存在才执行增,SETEX增并且设置有效期。

key的层级结构

key的格式:[项目名]:[业务名]:[类型]:[id]
如果value是一个java对象,例如一个user对象,则可以将对象序列化成JSON字符串后存储。

Hash类型

也叫散列,其value是一个无序字典。

常用命令:HSET key field value增,HGET key field查,HMSET批量增field,HMGET批量查field,HGETALL查一个key中所有filed和value,HKEYS查一个key中所有field,查一个key中所有value,HINCRBY让一个hash类型key字段自增并指定步长,HSETNX如果field存在则不执行。

List类型

可以看成一个双向链表结构,支持正向检索和反向检索。
特点:有序、元素可以重复、插入删除快、查询速度一般。

常用命令:LPUSH key element... 左侧插入1个或多个,LPOP key左侧弹出,RPUSH key element...右侧插入1个或多个,RPOP key右侧弹出,LRANGE key star end返回范围内所有元素,BLPOP和BRPOP没有元素时等待指定时间,而不是直接返回nil(B代表阻塞)。

Set类型

可以看成一个value为null的HashMap。
特点:无序,元素不可重复,查找快,支持交集、并集、差集等功能。

常见命令:SADD key member向set添加,SREM key member移除,SCARD key计数,SISMEMBER key member判断元素在不在set中,SMEMBERS返回set所有元素。SINTER key1 key2求key1,key2的交集,SDIFF key1 key2求key1和key2的差集,SUNION key1 key2求key1和key2的并集。

SortedSet类型

每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表SkipList加hash表。
特点:可排序、元素不重复、查询速度快。

常见命令:ZADD key score member增,ZREM key member删,ZSCORE key member获取score值,ZRANK key member获取排名,ZCARD key获取元素个数,ZCOUNT key min max获取score在范围内的元素的个数,ZINCRBY key increment member让指定元素自增,ZRANGE key min max获取指定score范围内的元素,ZRANGEBYSCORE key min max按照score排序后,获取指定score范围内的元素,ZDIFF、ZINTER、ZUNION求差集、交集、并集

Redis的Java客户端

有哪些:
Jedis,Lettuce,Redisson,java-redis-client,vetrx-redis-client

Jedis

使用步骤:

  1. 引入依赖。
  2. 创建Jedis对象,建立连接。
  3. 使用Jedis,方法名和命令名一致。
  4. 释放资源。

Jedis连接池
Jedis本身是线程不安全的,并且频繁的创建和小会连接会有性能损耗,所以我们推荐大家使用Jedis连接池代替Jedis的直连方式。
使用方法:直接获取连接池对象,设置连接池配置、连接属性,从连接池获取连接jedisPool.getResource();

Spring Data Redis

介绍:

  1. 提供了对不同Redis客户端的整合(Lettuce和Jedis)
  2. 提供了RedisTemplate统一API来操作Redis
  3. 支持Redis的发布订阅模型
  4. 支持Redis哨兵和Redis集群
  5. 支持基于Lettuce的响应式编程
  6. 支持基于JDK、JSON、字符串、Spring对象的数据序列化和反序列化。
  7. 支持基于Redis的JDKCollection实现。

spring默认使用Lettuce。

使用步骤:

  1. 引入spring-boot-starter-data-redis依赖
  2. 在application.yml配置Redis信息
  3. 注入RedisTemplate

RedisTemplate的序列化

RedisTemplate可以接收任意的Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认采用JDK序列化。
缺点:可读性差、内存占用大。
改进:
redisTemplate.setKeySerializer(传入下面的参数);这个改的事key的序列化方式。
key和hashKey使用string序列化RedisSerializer.string()
value和hashValue使用JSON序列化jsonRedisSerializer
缺点:JSON序列化后会存储类的信息,占用大量空间。

StringRedisTemplate

为了节省内存空间,我们并不会用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,手动完成对象的序列化和反序列化。
Spring提供了一个StringRedisTemplate类,它的key和value的序列化方式默认都是String方式。省去了我们自定义RedisTemplate的过程。

RedisTemplate的2种序列化实践方案:

方案一:

  1. 自定义RedisTemplate
  2. 修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer
    弊端:会额外记录类的信息字节码,占用额外的空间

方案二:

  1. 使用StringRedisTemplate
  2. 写入Redis时,手动把对象序列化为JSON
  3. 读取Redis时,手动把读取到的JSON反序列化为对象。

标签:Redis,元素,基础,value,Jedis,key,序列化
From: https://www.cnblogs.com/espgod/p/17896433.html

相关文章

  • 02-python基础学习
    Python简介:python是一个解释型语言,主要理念就是优雅和简单。目前市面上存在两个版本的python,2版本现在已经停止更新。因此使用3.x版本编写的python代码无法使用2.xpython解释器进行处理。python源文件以.py结尾,其中的代码,通过使用python解释器解释执行。可以通过使用......
  • 【flink番外篇】3、fflink的source(内置、mysql、kafka、redis、clickhouse)介绍及示例(2
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • 【flink番外篇】3、flink的source(内置、mysql、kafka、redis、clickhouse)介绍及示例(3)-
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • Argo CD 基础
    Argoproj概述用于Kubernetes运行工作流程、管理集群和正确执行GitOps的开源工具。Argoproj组成ArgoWorkflows基于Kubernetes平台的原生工作流引擎,支持DAG和step-based工作流。ArgoEventsKubernetes上的基于事件的依赖管理器,用于触发Kubernetes中的Argo工作流和其他......
  • 零基础30天学会Java-韩顺平
    第一章概述了解了该视频课程的大纲和Java的基本知识,Java1995年推出,目前稳定维护的有Java8和Java11版本。JVM(Java虚拟机):JVM包含于JDK中,Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行"JRE(Java运行环境):JRE=JVM+Java的核心类库。JDK(Java开发工具包):JDK=JRE+Jav......
  • Tekton pipelineruns 基础
    pipelineruns概述PipelineRun允许你在集群上实例化和执行Pipeline。一个Pipeline指定一个或多个Tasks,按照期望的执行顺序执行。PipelineRun按照指定的顺序执行Pipeline中的Tasks,直到所有Tasks都成功执行或失败。PipelineRun会自动为Pipeline中的每个Task创建相应的taskrun。pipeli......
  • Tekton 基础
    Tekton概述Tekton是用于构建CI/CD系统的云原生解决方案。它由TektonPipelines(提供构建块)和支持组件(例如TektonCLI和TektonCatalog)组成,使Tekton成为一个完整的生态系统。Tekton是Linux基金会项目CD基金会的一部分。Tekton作为Kubernetes集群上的扩展安装和运行,......
  • Tekton Pipelines 基础
    Pipelines概述Pipeline是Tasks的集合,作为持续集成流的一部分,您可以定义并按照特定的执行顺序排列这些Tasks。Pipeline中的每个Tasks在Kubernetes集群上作为Pod执行。您可以配置各种执行条件来满足您的业务需求。Pipeline使用When表达式when表达式input:被评估的内容,支持使用静态......
  • Tekton TaskRun 基础
    TaskRun概述TaskRun允许您在集群上实例化和执行Task。任务指定执行容器映像的一个或多个Steps,每个容器映像执行特定的构建工作。TaskRun按照指定的顺序执行任务中的Steps,直到所有Steps执行成功或失败。TaskRun配置清单apiVersion:tekton.dev/v1#指定API版本。kind:TaskR......
  • Tekton Tasks 基础
    Tasks概述Task是一系列Step的组合,每个Step主要负责运行特定的构建或交付工具从而完成相关的一次特定事项;Task以Kubernetes集群上Pod运行。Task是名称空间级别的资源。Tasks组成Parameters:是使得Task及Pipeline资源定义出的“模板”更加具有通用性的关键要素之一Steps:具体执行的......