当前位置: 首页 > article >正文

【Redis_1】初识Redis

一、Redis基础

在这里插入图片描述
Redis基本特征:
键值型,value支持多种不同的数据结构,功能丰富。
单线程,每个命令具备原子性。
低延迟,速度快(基于内存、I/O多路复用、良好的编码)。
支持数据持久化。
支持主从集群、分片集群。
支持多语言客户端。

二、Redis常见命令

(一)redis数据结构介绍

redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样:
在这里插入图片描述

(二)redis通用命令

命令说明
KEYS查看符合模板的所有key
DEL删除一个指定的key
EXISTS判断key是否存在
EXPIRE给key设置一个有效期,到期自动删除
TTL查看一个KEY的剩余有效期
help [command]查看一个命令的具体用法(如help keys)

(三)String类型

其value是字符串(将对象序列化为JSon),字符串具体内容又可分为以下三种类型(String字符,int整数类型,float浮点类型,这两个可以自增和自减):
在这里插入图片描述
常用操作:

名称说明
SET添加或者修改已经存在的一个String类型的键值对
GET根据key获取String类型的value
MSET批量添加多个String类型的键值对
MGET根据多个key获取多个String类型的value
INCR让一个整型的key自增1
INCRBY让一个整型的key自增并指定步长,例如:incrby num 2让num值自增2
INCRBYFLOAT让一个浮点类型的数字自增并指定步长
SETNX添加一个String类型的键值对,前提是这个key不存在,否则不执行
SETEX添加一个String类型的键值对,并且指定有效期

redis的key的格式:
[项目名]:[业务名]:[类型]:[id](如Arata:user:1)

(四) Hash类型

hash类型,也叫散列,类似于java中的hashMap结构,可以将对象中的每个字段独立存储:
在这里插入图片描述
常见命令:

格式说明
HSET key field value添加或者修改hash类型key的field的值
HGET key field获取一个hash类型key的field的值
HMSET批量添加多个hash类型key的field的值
HMGET批量获取多个hash类型key的field的值
HGETALL获取一个hash类型的key中的所有的field和value
HKEYS获取一个hash类型的key中的所有的field
HVALS获取一个hash类型的key中的所有的value
HINCRBY让一个hash类型key的字段值自增并指定步长
HSETNX添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

(五) List类型

和java中的LinkedList类似,可以看做是一个双向链表结构,既支持正向检索,又支持反向检索。故其有和LinkedList相似的特征(有序、元素可以重复、插入和删除快、查询速度一般)

命令说明
LPJSH key element …向列表左侧插入一个或多个元素
LPoP key移除并返回列表左侧的第一个元素,没有则返回nil
RPUSH key element …向列表右侧插入一个或多个元素
RPOP key移除并返回列表右侧的第一个元素
LRANGE key star end返回一段角标范围内的所有元素
BLPOP和BRPOP与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

(六)Set类型

类似于Java中的HashSet,可以看作是value为null的hashMap,具备与HashSet类似的特征(无序、元素不可以重复、查找快、支持交集并集差集等功能

命令说明
SADD key member …向set中添加一个或多个元素
SREM key member …移除set中的指定元素
SCARD key返回set中元素的个数
SISMEMBER key member判断一个元素是否存在于set中
SMEMBERS获取set中的所有元素
SINTER key1 key2 …求key1与key2的交集
SDIFF key1 key2 …求key1与key2的差集
SUNION key1 key2 …求key1和key2的并集

(七)SortedSet类型

可排序的Set集合,与Java中的TreeSet有些类似,但是底层数据结构差距较大。SortSet中每一个元素都带有score属性,可以基于score属性对元素排序,底层的实现是一个跳表(skipList)加Hash表,故具备特性:可排序、元素不重复、查询速度快。经常用于排行榜等功能。

命令说明
ZADD key score member添加一个或多个元素到sorted set,如果已经存在则更新其score值
ZREM key member删除sorted set中的一个指定元素
ZSCORE key member获取sorted set中的指定元素的score值
ZRANK key member获取sorted set中的指定元素的排名
ZCARD key获取sorted set中的元素个数
ZCOUNT key min max统计score值在给定范围内的所有元素的个数
ZINCRBY key increment member让sorted set中的指定元素自增,步长为指定的increment值
ZRANGE key min max按照score排序后,获取指定排名范围内的元素
ZRANGEBYSCORE key min max按照score排序后,获取指定score范围内的元素
ZDIFF、ZINTER、ZUNION求差集、交集、并集

默认升序,如果需要降序需要在命令中Z的后面加上REV即可

三、redis客户端

客户端说明
Jedis以Redis命令作为方法名称,学习成本低,简单实用。但是Jedis实例是线程不安全的,多线程环境下需要基于连接池来使用
Lettuce是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。
Redisson是一个基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map.Queue、Lock、Semaphore、AtomicLong等强大功能

“spring data Redis”兼容了jedis和lettuce

(一)Jedis

基本用法

1、引入jedis依赖
在这里插入图片描述

2、建立连接
在这里插入图片描述
3、测试String
在这里插入图片描述

4、释放资源
在这里插入图片描述

连接池

jedis本身是线程不安全的,频繁地创建和销毁会损耗性能,故有连接池代替jedis直连
在这里插入图片描述

(二)SpringDataRedis

提供了对Redis客户端的整合,提供了RedisTemplate统一API来操作Redis,支持Redis哨兵和Redis集群,支持基于Lettuce的响应式编程,支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化、支持基于Redis的JDKCollection实现、支持Redis发布订阅模型。
在这里插入图片描述

使用步骤

1、引入依赖
在这里插入图片描述
2、配置文件
在这里插入图片描述

3、注入RedisTemplate
在这里插入图片描述

4、编写测试
在这里插入图片描述

RedisTempalte的RedisSerializar

RedisTemplate的set方法可接受的是任何的object数据,只不过写之前会把object序列化为字节形式,默认采用JDK序列化。
在这里插入图片描述

StringRedisTemplate

为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入JSON结果中,带来额外的存储开销。为了节约内存空间,不使用JSON序列化器来处理value,而是统一使用String序列化器。spring提供了一个StringRedisTemplate类,key和value的序列化方式默认就是String。
在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/531848.html

相关文章:

  • cpp的STL与java的Collections Framework使用
  • 手写单例模式
  • 求职刷题力扣DAY34--贪心算法part05
  • 【Block总结】完全注意力Fully Attentional,同时捕捉空间和通道的注意力|即插即用
  • 猴子吃桃问题
  • AI视频编码器(3.2) 《Swin Transformer V2: Scaling Up Capacity and Resolution》
  • DeepSeek:人工智能领域的革新者与未来展望
  • VoIP中常见术语
  • Denavit-Hartenberg DH MDH坐标系
  • 【人工智能学习笔记 一】 AI分层架构、基本概念分类与产品技术架构
  • LabVIEW双光子成像系统:自主创新,精准成像,赋能科研
  • 文本预处理
  • Springboot中@Autowired和@Resource注解的区别和联系
  • Docker 安装详细教程(适用于CentOS 7 系统)
  • 金山打字游戏2010绿色版,Win7-11可用DxWnd完美运行
  • 【PyQt】getattr动态访问对象的属性
  • leetcode——二叉树展开为链表(java)
  • 从 C 到 C++:理解结构体中字符串的存储与操作
  • chrome浏览器chromedriver下载
  • 大数据数仓实战项目(离线数仓+实时数仓)1
  • 《逆向工程核心原理》第一~二章知识整理
  • Vue 3 30天精进之旅:Day 13 - 路由守卫
  • python-leetcode-二叉树的层序遍历
  • 【论文公式】MathType打大写手写字母
  • ANSYS Workbench打开cdb文件
  • Vue-el挂载点