【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结构,可以将对象中的**每个字段独立存储** : ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ee9975d30b0142e096b093b5f95d160c.png) 常见命令: | 格式 | 说明 | |----------------------|-------------------------------------------| | 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依赖 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4b6faa662d9d44bf89ace32b4f4233b6.png) 2、建立连接 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4bfe996f5e6948cc9f6a76e61d7cb47b.png) 3、测试String ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/88e2c9ef9db54be08ac69d5c8741b7d7.png) 4、释放资源 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6b8d50b7472f4bf282ae577c6fadea2c.png) #### 连接池 jedis本身是线程不安全的,频繁地创建和销毁会损耗性能,故有**连接池** 代替jedis直连 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e068ad429c8c4cb5ac5d4da581088d36.png) ### (二)SpringDataRedis 提供了对Redis客户端的整合,提供了RedisTemplate统一API来操作Redis,支持Redis哨兵和Redis集群,支持基于Lettuce的响应式编程,支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化、支持基于Redis的JDKCollection实现、支持Redis发布订阅模型。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/743d9b9bd0ff485d9c1b02add7216165.png) #### 使用步骤 1、引入依赖 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c9e54cafc9bb4420b7404cb5c4586ef8.png) 2、配置文件 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c96697c7db474f8285cd30bb3e199254.png) 3、注入RedisTemplate ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/61c1b8ee31bb48ecb7a8b8e427422e82.png) 4、编写测试 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b81b16cb1ea1430c89e1acab129ed28b.png) #### RedisTempalte的RedisSerializar RedisTemplate的set方法可接受的是任何的object数据,只不过写之前会把object序列化为字节形式,默认采用JDK序列化。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5567b8a44da24d70a436d8acb300cba3.png) ### StringRedisTemplate 为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入JSON结果中,带来额外的存储开销。为了节约内存空间,不使用JSON序列化器来处理value,而是统一使用String序列化器。spring提供了一个StringRedisTemplate类,key和value的序列化方式默认就是String。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d88e7f1b38eb42aba4cc07a190e71bf9.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/97e6d9964fe8430c8022eb763d545a1c.png)

相关推荐
Elastic 中国社区官方博客4 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪6 小时前
两次连接池泄露的BUG
java·数据库
cr7xin7 小时前
缓存三大问题及解决方案
redis·后端·缓存
爱怪笑的小杰杰7 小时前
浏览器端缓存地图请求:使用 IndexedDB + ajax-hook 提升地图加载速度
ajax·okhttp·缓存
TDengine (老段)8 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq7422349848 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE8 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle
Dxy12393102169 小时前
MySQL的SUBSTRING函数详解与应用
数据库·mysql
码力引擎9 小时前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
杨云龙UP9 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql