【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。

相关推荐
掉头发的王富贵3 小时前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
Nturmoils3 小时前
WHERE 条件别凭习惯写,常用查询先跑一遍
数据库
云技纵横6 小时前
一个 @Async 让循环依赖暴雷:Spring 代理的暗坑
redis
Databend1 天前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent
犯困蛋挞yy1 天前
用Claude快速解决Redis代码报错反复无解的问题
redis
小七-七牛开发者2 天前
TokenPilot:让 LLM Agent 长会话成本降 60%+ 的上下文管理
缓存·agent·token·context·上下文·推理成本
ClouGence2 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将2 天前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Nturmoils3 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波3 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端