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

相关推荐
爱写代码的阿森8 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_9 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白10 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面10 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧10 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈10 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy10 小时前
log4net 数据库存日志正确配置
数据库
赵丙双11 小时前
Redis 概率相关的数据类型
redis
liuxiaowei311 小时前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba