redis简单利用与安装

[复制链接]
发表于 2026-1-22 06:15:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
redis

redis 是什么

Redis 是一个开源的,利用 C 语言编写的,支持网络交互的,内存中的Key-Value 数据结构存储体系,支持多种语言,它可以用作数据库、缓存和消息中心件。
一、存储体系特性

  • 内存存储与长期化

    • Redis 紧张将数据存储在内存中,这使得它可以大概实现极高的读写速率。在内存中举行数据利用可以极大地淘汰访问延长,实用于对相应时间要求苛刻的场景。比方,在高并发的 Web 应用中,Redis 可以快速相应频仍访问的数据哀求,提拔用户体验。
    • 同时,Redis 支持数据的长期化,可以大概将内存中的数据生存到磁盘中。如许,在服务器重启时可以再次加载数据进利用用,确保数据不会由于服务器故障而丢失。长期化方式包罗 RDB(快照)和 AOF(只追加文件)两种,用户可以根据实际需求选择符合的方式。

  • 高性能读写

    • Redis 的性能极高,读的速率可达 110000 次 / 秒,写的速率可达 81000 次 / 秒。这种良好的性能使其在处理处罚大量并发哀求时体现精彩。无论是作为数据库直接提供数据服务,还是作为缓存层加速数据访问,Redis 都能快速相应哀求,进步体系的团体性能。
    • 比方,在及时数据分析场景中,Redis 可以快速存储和检索大量的及时数据,为数据分析提供高效的数据支持。

二、数据结构丰富

  • 多种数据结构支持

    • Redis 提供了丰富的数据结构,包罗 list(列表)、set(聚集)、zset(有序聚集)、hash(哈希表)等。这些数据结构为开发者提供了机动的数据存储和利用方式。
    • 比方,利用 list 可以实现消息队列,生产者将消息推入列表一端,斲丧者从另一端取出消息举行处理处罚;利用 set 可以举行去重利用,快速判定一个元素是否存在于聚会合;利用 zset 可以实现排行榜功能,根据元素的分值举行排序。

  • 机动的数据利用

    • 差别的数据结构支持差别的利用方法,Redis 提供了丰富的下令来利用这些数据结构。开发者可以根据具体需求选择符合的数据结构和利用下令,实现高效的数据管理。
    • 好比,对 hash 数据结构可以举行字段的添加、修改和删除利用,方便存储和管理复杂的结构化数据。

三、原子性利用与分布式扩展

  • 原子性利用

    • Redis 的全部利用都是原子性的,这意味着一个利用要么完全实行乐成,要么完全不实行,不会出现部分实行的环境。这种原子性包管了数据的划一性和完备性。
    • 同时,Redis 还支持对几个利用归并后的原子性实行,比方利用变乱(MULTI/EXEC 下令)可以将多个利用打包成一个原子利用,确保这些利用要么全部乐成实行,要么全部不实行。这在必要包管多个利用的划一性的场景中非常有效,好比在金融买卖业务体系中。

  • 分布式扩展

    • Redis 具有极高的分布式集群化扩展性,支持 master-slave(主从)模式。在主从模式下,可以将数据复制到多个从节点,实现数据的冗余备份和读利用的负载平衡。主节点负责写利用,从节点负责读利用,进步了体系的团体性能和可用性。
    • 别的,Redis 还可以通太过片(sharding)技能将数据分布到多个节点上,进一步进步体系的存储容量和处理处罚本领。这种分布式扩展本领使得 Redis 可以大概顺应大规模数据存储和高并发访问的需求。

四、应用场景广泛

  • 数据库

    • Redis 可以用作数据库,直接存储和管理数据。由于其高性能和丰富的数据结构,实用于一些对性能要求高、数据规模相对较小的场景,如缓存数据、会话管理、及时数据存储等。
    • 比方,在交际网络应用中,可以利用 Redis 存储用户的在线状态、挚友列表等数据。

  • 缓存

    • 作为缓存是 Redis 最常见的应用场景之一。将经常访问的数据存储在 Redis 中,可以大大淘汰对后端数据库的访问压力,进步体系的相应速率。当数据发生变革时,可以同时更新数据库和 Redis 缓存,确保数据的划一性。
    • 好比,在电商平台中,商品的热门信息可以缓存到 Redis 中,进步页面加载速率。

  • 消息中心件

    • 利用 Redis 的发布 / 订阅功能可以实现消息中心件的作用。生产者将消息发布到特定的频道,斲丧者订阅这些频道,吸取并处理处罚消息。这种方式可以实现及时的消息通报,实用于及时关照、日记处理处罚等场景。
    • 比方,在分布式体系中,可以利用 Redis 实现变乱关照机制,当一个节点发生特定变乱时,将消息发布到 Redis 频道,其他节点订阅该频道并举行相应的处理处罚。

简单来说:
1.Redis 将数据存储在内存中,也支持数据的长期化,可以将内存中的数据保持在磁盘中,重启的时间可以再次加载进利用用。
2.性能极高 , Redis 能读的速率是 110000 次/s,写的速率是 81000 次/s 。
3.Redis 供 list,set,zset,hash 等数据结构的存储。
4.原子 – Redis 的全部利用都是原子性的,同时 Redis 还支持对几个利用全并后的原子性实行。
5.Redis 分布式集群化扩展性极,高即 master-slave(主-从)模式。
为什么利用 redis

在当今 web3.0 期间,利用 Redis 有以下紧张缘故起因:
一、办理传统关系型数据库性能标题

  • 应对大量访问压力

    • 随着互联网的发展,Web 应用面临着越来越多的用户访问和数据处理处罚需求。传统的关系型数据库在大量访问压力下轻易出现性能标题,如毗连数量限定和 IO 瓶颈。Redis 作为一种高性能的内存数据库,可以有效地缓解这些标题。
    • 比方,在高并发的电商平台中,大量用户同时举行商品欣赏和购买利用,对数据库的访问压力巨大。利用 Redis 缓存热门商品信息和用户购物车数据,可以淘汰对关系型数据库的访问次数,进步体系的相应速率。

  • 办理毗连数量标题

    • 传统关系型数据库通常对毗连数量有肯定的限定,当毗连数量过多时,会导致数据库性能降落乃至瓦解。Redis 可以作为一个独立的缓存层,吸取来自应用步调的大量毗连,减轻关系型数据库的毗连压力。
    • 好比,在交际网络应用中,用户频仍地查察挚友动态和消息关照。利用 Redis 缓存这些数据,可以淘汰对关系型数据库的毗连需求,进步体系的稳固性。

  • 突破 IO 瓶颈

    • 关系型数据库的 IO 利用通常比力耗时,尤其是在大量数据读写的环境下。Redis 将数据存储在内存中,读写速率极快,可以大大淘汰 IO 利用的时间,进步体系的性能。
    • 比方,在数据分析场景中,必要对大量数据举行及时查询和处理处罚。利用 Redis 作为缓存,可以快速获取频仍访问的数据,淘汰对关系型数据库的 IO 压力,进步数据分析的服从。

二、数据缓存与存储优化

  • 数据缓存

    • Redis 可以对部分数据举行缓存,将经常访问的数据存储在内存中,以便快速访问。当数据发生变革时,可以同时更新数据库和 Redis 缓存,确保数据的划一性。
    • 好比,在消息网站中,热门消息文章的访问频率很高。将这些文章的内容缓存到 Redis 中,可以大大进步页面加载速率,淘汰对数据库的访问压力。

  • 直接存储某些数据

    • 对于一些特定的数据,如会话信息、设置参数等,可以直接存储在 Redis 中。这些数据通常不必要复杂的关系型数据库结构,而且对读写速率要求较高。
    • 比方,在在线游戏中,玩家的会话状态可以存储在 Redis 中,方便快速获取和更新玩家的游戏状态。

三、与关系型数据库相互依靠

  • 不能完全更换关系型数据库

    • 固然 Redis 具有很多长处,但它不能完全更换关系型数据库。关系型数据库在数据的完备性、划一性和复杂查询方面具有上风,得当存储结构化的数据和举行复杂的变乱处理处罚。
    • 比方,在企业级应用中,订单数据、用户信息等必要包管数据的精确性和完备性,得当存储在关系型数据库中。而 Redis 可以作为缓存层,进步这些数据的访问速率。

  • 相互增补

    • Redis 和关系型数据库可以相互依靠,共同构建一个高效的应用体系。Redis 可以缓存关系型数据库中的数据,淘汰数据库的访问压力;关系型数据库可以作为数据的长期存储层,包管数据的安全性和可靠性。
    • 好比,在电商平台中,商品信息可以存储在关系型数据库中,同时将热门商品的信息缓存到 Redis 中。当用户查询商品时,先从 Redis 中获取数据,如果没有找到,则从关系型数据库中查询,并将结果缓存到 Redis 中,以便下次快速访问。

Linux 下利用 Docker 安装 redis

从官网下载:
官方所在:Redis configuration | Docs
创建 redis 设置文件: mkdir -p /opt/redis/conf
数据映射挂载卷: mkdir -p /opt/redis/data
复制 redis.conf 文件到/opt/redis/conf 目次下(留意,此文件已设置暗码为 123)

允许长途毗连访问

拉取镜像
docker pull redis:6.0
安装下令
docker run -d -p 6379:6379 --name redis --restart=always --privileged=true -v /opt/redis/conf/redis.conf:/etc/redis/redis.conf -v /opt/redis/data:/data redis:6.0
redis 数据结构

5 种根本常用结构

一、String(字符串)

  • 用途:

    • 可以存储字符串、整数或浮点数等简单数据范例。
    • 常用于缓存单个值,如用户信息、计数器等。

  • 特点:

    • 是二进制安全的,可以存储任何范例的数据。
    • 支持对字符串举行追加、截取、自增自减等利用。

二、Hash(哈希)

  • 用途:

    • 存储对象信息,比方用户的属性(姓名、年事、性别等)。
    • 得当存储必要以字段情势访问的数据。

  • 特点:

    • 类似于 Java 中的 HashMap,由键值对构成。
    • 可以对单个字段举行利用,如增长、删除或修改特定字段的值。

三、List(列表)

  • 用途:

    • 实现消息队列、栈等数据结构。
    • 可以存储有序的元素聚集。

  • 特点:

    • 可以从两头举行插入和弹出利用。
    • 支持按照索引访问元素。

四、Set(聚集)

  • 用途:

    • 存储不重复的元素聚集,比方用户的标签、爱好爱好等。
    • 可用于实现交集、并集、差集等聚集运算。

  • 特点:

    • 元素无序且唯一。
    • 可以快速判定一个元素是否存在于聚会合。

五、Zset(Sorted Set:有序聚集)

  • 用途:

    • 实现排行榜、优先级队列等功能。
    • 存储带有分数的元素聚集,并根据分数举行排序。

  • 特点:

    • 元素具有唯一性,但每个元素都关联一个分数。
    • 可以按照分数范围获取元素。



String(字符串) 

一、根本概念
String 范例是 Redis 最根本的数据范例之一,它通过一个 key 对应一个 value 的方式举行存储。这种简单而直接的存储方式使得它在很多场景下都非常实用。
二、二进制安全的特性
Redis 的 String 范例具有二进制安全的特点,这意味着它可以存储任何范例的数据,包罗但不限于文本、图片(以二进制情势存储)、序列化的对象等。这种特性使得 Redis 在存储各种复杂数据时具有很大的机动性。比方,可以将序列化后的 Java 对象存储在 Redis 中,实现对象的缓存和快速访问。
三、存储容量
String 范例的值最大能存储 512MB。这个容量对于大多数应用场景来说已经富足大,可以满意存储大量文本、图片或其他数据的需求。
四、单值缓存的应用场景

  • 设置和获取值:

    • 利用 set key value 下令可以设置一个键值对,将特定的 value 存储在指定的 key 下。
    • get key 下令用于获取指定 key 对应的 value。
    • del key 下令可以删除指定的 key 及其对应的值。
    • keys * 下令可以列出全部的 key。

  • 存储 JSON 字符串:

    • 单值缓存的值可以是 JSON 字符串。这在存储复杂数据结构时非常有效,比方存储一个包罗多个字段的对象的 JSON 表现情势。通过将对象序列化为 JSON 字符串并存储在 Redis 中,可以方便地举行缓存和快速访问。

五、计数器的应用场景

  • 设置初始值:

    • set news_views:1 0 可以设置文章的访问量初始值为 0。这里的 news_views:1 是一个特定的 key,表现文章 1 的访问量。

  • 增长和淘汰计数器:

    • incr news_views:1 用于将文章的访问量加 1。每次实行这个下令,Redis 会主动将指定 key 的值增长 1。
    • decr news_views:1 则将文章的访问量减 1。

  • 获取计数器的值:

    • get news_views:1 可以获取文章的当前访问量值。

通过利用 Redis 的 String 范例,可以方便地实现单值缓存和计数器等功能,为应用步调提供高效的数据存储和访问方式。


Hash(哈希)

一、数据结构特点
Redis 的 Hash 范例是一个 string 范例的 field(字段)和 value 的映射表。它非常适实用于存储对象,由于可以将对象的各个属性作为 field,对应的值作为 value 举行存储。比方,存储用户信息时,可以将用户的 ID、姓名、年事等属性分别作为 field,对应的具体值作为 value 存储在一个 Hash 中。

二、常用下令及功能

  • 存储键值对:

    • hset key field value 下令用于在指定的哈希表(key)中存储一个 field 和 value 的键值对。如果哈希表不存在,会主动创建。这个下令可以方便地向 Hash 中添加或更新一个属性的值。

  • 获取键值:

    • hget key field 下令用于获取指定哈希表(key)中对应 field 的键值。通过这个下令,可以快速获取对象的特定属性值。

  • 删除键值对:

    • hdel key field 下令用于删除指定哈希表(key)中的一个 field 键值对。如果要删除多个 field,可以多次实行这个下令。

  • 获取 field 数量:

    • hlen key 下令用于返回指定哈希表(key)中的 field 的数量。这个下令可以快速相识 Hash 中存储了多少个属性。

  • 获取全部键值对:

    • hgetall key 下令用于返回指定哈希表(key)中全部的键值对。这个下令会返回一个包罗全部 field 和 value 的列表,方便对整个对象举行遍历和处理处罚。

三、应用场景举例

  • 存储用户购物车信息:可以将用户的购物车作为一个 Hash 存储,每个商品的 ID 作为 field,商品的数量、代价等信息作为 value。如许可以方便地对购物车举行添加、删除商品以及查询购物车中商品的信息等利用。
  • 存储体系设置信息:将将体系的各种设置参数作为 field,对应的设置值作为 value 存储在一个 Hash 中。如许可以方便地举行设置的读取和修改,而且可以对差别的设置举行分组管理。
总之,Redis 的 Hash 范例提供了一种方便、高效的方式来存储和操尴尬刁难象范例的数据,在很多实际应用场景中都有广泛的应用。

List(列表)

一、数据结构特点
Redis 列表是简单的字符串列表,按照插入序次举行排序。这意味着可以在列表的头部(左边)或尾部(右边)插入元素,而且元素在列表中的位置是固定的,按照插入的先后序次分列。
二、常用下令及功能

  • 插入元素:

    • lpush key value[value...]:将一个或多个值插入到指定 key 列表的表头(最左边)。比方,lpush mylist value1 value2 会将 value1 和 value2 依次插入到名为 mylist 的列表的头部。
    • rpush key value[value...]:将一个或多个值插入到指定 key 列表的表尾(最右边)。比方,rpush mylist value3 value4 会将 value3 和 value4 依次插入到名为 mylist 的列表的尾部。

  • 移除并返回元素:

    • lpop key:移除并返回指定 key 列表的头元素。实行这个下令后,列表的第一个元素将被移除,并返回该元素的值。
    • rpop key:移除并返回指定 key 列表的尾元素。与 lpop 类似,这个下令会移除并返回列表的末了一个元素。

  • 获取指定区间内的元素:

    • lrange key start stop:返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 确定。比方,lrange mylist 0 -1 会返回 mylist 列表中的全部元素。


三、常见用法

  • Stack(栈):

    • 实现方式为 LPUSH + LPOP,即先利用 lpush 将元素依次压入栈中,然后利用 lpop 从栈顶弹出元素。这种方式遵照 “后进先出”(FILO)的原则,类似于数据结构中的栈。

  • Queue(队列):

    • 实现方式为 LPUSH + RPOP,即先利用 lpush 将元素依次插入到队列的尾部,然后利用 rpop 从队列的尾部弹出元素。这种方式遵照 “先辈先出”(FIFO)的原则,类似于数据结构中的队列。

四、应用场景举例

  • 消息队列:可以利用 Redis 列表作为消息队列,生产者利用 lpush 将消息插入到列表中,斲丧者利用 rpop 从列表中获取消息举行处理处罚。
  • 使命队列:将使命存储在列表中,工作历程利用 lpop 从列表中获取使命举行处理处罚,实现使命的分发和实行。
  • 汗青记载:可以将用户的利用汗青记载存储在列表中,方便后续查询和分析。
总之,Redis 的列表范例提供了一种机动、高效的方式来处理处罚有序的字符串聚集,可以应用于多种场景。
 
Set(聚集)

一、数据结构特点
Redis 的 Set 是一种无序聚集,这意味着聚会合的元素没有特定的序次。Set 中的元素是唯一的,不允许重复。
二、常用下令及功能

  • 添加元素:

    • sadd key member[member...]:往聚集 key 中存入一个或多个元素。如果元素已经存在于聚会合,则会被忽略。如果聚集 key 不存在,则会新建一个聚集。比方,sadd myset element1 element2 会将 element1 和 element2 添加到名为 myset 的聚会合。

  • 删除元素:

    • srem key member[member...]:从聚集 key 中删除一个或多个元素。比方,srem myset element1 会从 myset 聚会合删除 element1。

  • 获取全部元素:

    • smembers key:获取聚集 key 中全部的元素。这个下令会返回一个包罗聚会合全部元素的列表。比方,实行 smembers myset 会返回 myset 聚会合的全部元素。

  • 获取元素个数:

    • scard key:获取聚集 key 的元素个数。这个下令会返回一个整数,表现聚会合元素的数量。比方,实行 scard myset 会返回 myset 聚会合元素的个数。

三、应用场景举例

  • 标签体系:可以利用 Set 来存储用户的标签。每个用户的标签聚集是一个 Set,通过 sadd 下令添加标签,srem 下令删除标签,smembers 下令获取用户的全部标签。
  • 共同关注:在交际网络中,可以利用 Set 来存储用户的关注列表。通过对两个用户的关注聚集举行交集运算,可以得到他们的共同关注用户。
  • 去重功能:Set 的唯一性特点可以用于数据去重。比方,在处理处罚日记数据时,可以将日记中的 IP 所在存储在 Set 中,以去除重复的 IP 所在。
总之,Redis 的 Set 范例提供了一种高效的方式来存储和利用无序的唯一元素聚集,可以应用于多种场景。
 
zset(sorted set:有序聚集)

一、数据结构特点
Redis 的有序聚集(Zset)与平凡聚集类似,也是不允许重复的成员,但它是有序的。每个元素都会关联一个 double 范例的分数,Redis 通过这个分数来为聚会合的成员举行从小到大的排序。
二、关键特性

  • 成员唯一性:Zset 的成员是唯一的,这意味着不能有重复的元素存在于同一个有序聚会合。
  • 分数可重复:固然成员是唯一的,但分数可以重复。这使得可以有多个元素具有类似的分数,它们在排序中的位置将根据插入的先后序次大概其他规则来确定。

三、常用下令及功能

  • 添加带分值元素:

    • zadd key score member[[score member]..]:往有序聚集 key 中参加带分值的元素。可以同时添加一个或多个元素,每个元素由分数和成员构成。比方,zadd myzset 10 element1 20 element2 会将 element1 以分数 10 和 element2 以分数 20 添加到名为 myzset 的有序聚会合。

  • 删除元素:

    • zrem key member[member...]:从有序聚集 key 中删除一个或多个元素。比方,zrem myzset element1 会从 myzset 有序聚会合删除 element1。

  • 获取元素分值:

    • zscore key member:返回有序聚集 key 中元素 member 的分值。比方,实行 zscore myzset element1 会返回 element1 在 myzset 有序聚会合的分数。

  • 获取元素个数:

    • zcard key:返回有序聚集 key 中元素的个数。比方,实行 zcard myzset 会返回 myzset 有序聚会合的元素数量。

四、应用场景举例

  • 排行榜:可以利用 Zset 来实现各种排行榜,比方游戏得分排行榜、用户活泼度排行榜等。将用户的 ID 或其他标识作为成员,用户的得分或活泼度作为分数,通过 zadd 下令添加元素,然后可以利用 zrevrange 等下令获取排行榜的前几名。
  • 时间线:在交际网络或消息平台中,可以利用 Zset 来存储用户的动态或消息文章,以发布时间作为分数,动态或文章的 ID 作为成员。如许可以方便地按照时间序次获取最新的动态或文章。
  • 优先级队列:Zset 可以用作优先级队列,将使命的优先级作为分数,使命的标识作为成员。高优先级的使命会排在前面,可以通过 zpopmin 或 zpopmax 下令获取并删除优先级最高的使命。
 
设置失效时间

一、需求配景
在很多应用场景中,我们并不盼望 Redis 的键不绝存在。好比缓存数据,为了进步性能而将一些数据存储在 Redis 中,但这些数据大概随着时间的推移变得不再有效,必要被主动清算以开释内存空间。又如验证码,通常只在肯定时间内有效,逾期后就应该被主动删除。Redis 提供的设置键逾期时间的下令恰恰满意了这些需求。
二、设置逾期时间的方式

  • 设置值时直接设置有效时间:

    • 利用 set name jim EX 30 下令可以在设置键值对的同时设置失效时间为 30 秒。此中 EX 表现以秒为单位设置逾期时间。同样,PX 表现以毫秒为单位设置逾期时间,且 EX 和 PX 不区分巨细写。比方 set name jim PX 30000 表现设置键 name 的值为 jim,并以毫秒为单位设置逾期时间为 30000 毫秒。

  • 设置值后设置有效时间:

    • expire key 时间(秒):在设置键值对之后,可以利用 expire 下令为键设置逾期时间,单位为秒。比方 expire name 60 表现为键 name 设置逾期时间为 60 秒。
    • pexpire key 时间(毫秒):与 expire 类似,pexpire 以毫秒为单位设置键的逾期时间。比方 pexpire name 60000 表现为键 name 设置逾期时间为 60000 毫秒。

三、查察剩余时间的下令

  • ttl key:查察键的剩余时间,单位为秒。实行这个下令会返回键的剩余生存时间,如果键不存在大概已颠末期,会返回 -2;如果键没有设置逾期时间,会返回 -1。
  • pttl key:查察键的剩余时间,单位为毫秒。与 ttl 类似,但返回的时间单位是毫秒。
四、应用场景举例

  • 缓存管理:在缓存体系中,可以为缓存数据设置公道的逾期时间,确保缓存数据在肯定时间后主动失效,制止缓存数据占用过多内存。比方,对于经常变革的数据,可以设置较短的逾期时间,以包管缓存中的数据始终是最新的。
  • 验证码验证:在用户注册、登录等场景中,天生的验证码通常只在肯定时间内有效。可以将验证码存储在 Redis 中,并设置得当的逾期时间,逾期后主动删除,确保验证码的安全性和有效性。
springBoot 集成利用 redis

一、概述

在 Spring Boot 应用中,集成 Redis 可以极大地进步数据的存储和访问服从。Jedis 是 Redis 官方推出的 Java 客户端,但直接利用 Jedis 大概会比力繁琐。而 Spring-data-redis 作为 Spring 各人族的一部分,提供了更简单、高效的方式来在 Spring 应用中访问 Redis 服务。它对底层的 Redis 开发包(如 Jedis、JRedis 和 RJC)举行了高度封装,通过 RedisTemplate 提供了丰富的 Redis 利用接口。
二、Spring-data-redis 针对 Jedis 的功能


  • 毗连池主动管理和高度封装的 RedisTemplate:

    • Spring-data-redis 主动管理 Redis 毗连池,制止了手动管理毗连的复杂性。
    • 提供了高度封装的 “RedisTemplate” 类,简化了 Redis 的利用。通过这个模板类,可以方便地举行各种数据范例的存储和读取利用。

  • 归类封装的利用接口:

    • 将 Jedis 客户端中的大量 API 举行了归类封装,将同一范例的利用封装为差别的 operation 接口。
    • ValueOperations:用于简单的键值对(K-V)利用,如设置和获取单个值。
    • SetOperations:用于 set 范例数据的利用,如添加、删除元素,判定元素是否存在等。
    • ZSetOperations:用于 zset 范例数据的利用,如添加元素并设置分数,获取范围内的元素等。
    • HashOperations:针对 map 范例的数据利用,如设置和获取哈希表中的字段值。
    • ListOperations:针对 list 范例的数据利用,如在列表的头部或尾部添加元素,获取列表中的元素范围等。

  • 变乱利用封装:

    • Spring-data-redis 将变乱利用举行了封装,由容器控制变乱的开始、提交和回滚。可以方便地在 Spring 应用中利用变乱来包管数据的划一性。

  • 序列化 / 反序列化战略:

    • 针对数据的 “序列化 / 反序列化”,提供了多种可选择的战略(RedisSerializer)。
    • JdkSerializationRedisSerializer:实用于 POJO 对象的存取场景,利用 JDK 自己的序列化机制。但这种方式大概会导致序列化后的字节数组较大,而且在差别 JDK 版本之间大概存在兼容性标题。
    • StringRedisSerializer:在 Key 大概 value 为字符串的场景下非常实用。它根据指定的 charset 对数据的字节序枚举行编码成 string,是 “new String (bytes, charset)” 和 “string.getBytes (charset)” 的直接封装。是最轻量级和高效的战略。
    • JacksonJsonRedisSerializer:利用 Jackson-json 工具提供了 JavaBean 与 JSON 之间的转换本领。可以将 POJO 实例序列化成 JSON 格式存储在 Redis 中,也可以将 JSON 格式的数据转换成 POJO 实例。这种方式在必要存储复杂对象而且盼望以 JSON 格式举行存储和传输时非常方便。

三、利用步调


  • 在项目中添加 Spring-data-redis 和 Jedis 的依靠。
  • 设置 Redis 毗连信息,如主机所在、端标语、暗码等。
  • 在 Spring Boot 应用中注入 RedisTemplate 或相应的 operation 接口,举行 Redis 利用。
    搭建:
1.添加 redis 依靠
  1. <dependency>
  2. ​
  3.    <groupId>org.springframework.boot</groupId>
  4. ​
  5.    <artifactId>spring-boot-starter-data-redis</artifactId>
  6. ​
  7. </dependency>
复制代码
2.设置毗连 redis(.yml)
  1. spring:
  2. ​
  3.    redis:
  4. ​
  5.    host: 192.168.31.100
  6. ​
  7.    port: 6379
  8. ​
  9.    password: 111
  10. ​
  11.    database: 0
  12. ​
  13.    pool:
  14. ​
  15.    max-active: 8 *# 连接池最大连接数(使用负值表示没有限制)*max-wait: -1ms *# 连接池最大阻塞等待时间(使用负值表示没有限制)*
  16. ​
  17.    max-idle: 8 *# 连接池中的最大空闲连接*
  18. ​
  19.    min-idle: 0 *# 连接池中的最小空闲连接*
  20. ​
  21.    timeout: 5000ms *# 连接超时时间(毫秒)*
复制代码
3.注入 RedisTemplate
  1. @Autowired
  2. ​
  3. RedisTemplate redisTemplate;
复制代码
4.测试
  1. System.out.println(redisTemplate.hasKey("e"));//判断键是否在
  2.        System.out.println(redisTemplate.delete("e"));//删除指定的键
  3.        System.out.println(redisTemplate.hasKey("e"));//判断键是否在
  4. ​
  5. ​
  6.        ValueOperations valueOperations = redisTemplate.opsForValue();
  7.                        valueOperations.set("name","jim");
  8.                        valueOperations.set("count",1);
  9.                        valueOperations.increment("count");
  10.                        valueOperations.increment("count");
  11.                        valueOperations.set("yzm","12345",10, TimeUnit.SECONDS);
  12.        System.out.println(redisTemplate.hasKey("name"));
  13. ​
  14.        HashOperations hashOperations = redisTemplate.opsForHash();
  15.        hashOperations.put("news","newsdz1",20);
  16. ​
  17.        ListOperations listOperations = redisTemplate.opsForList();
  18.        
  19. 序列化键值
  20. redisTemplate.setKeySerializer(new StringRedisSerializer());
  21. redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<User>(User.class));      
复制代码
必要被 Redis 缓存的类,必须实现序列化接口
具体分析:

  • 判定键是否存在和删除键:

    • System.out.println(redisTemplate.hasKey("e"));:判定键 "e" 是否存在于 Redis 中。
    • System.out.println(redisTemplate.delete("e"));:删除键 "e",并返回是否删除乐成的布尔值。
    • System.out.println(redisTemplate.hasKey("e"));:再次判定键 "e" 是否存在,验证删除利用是否乐成。

  • 设置键值对和自增利用:

    • ValueOperations valueOperations = redisTemplate.opsForValue();:获取用于利用简单键值对的 ValueOperations 对象。
    • valueOperations.set("name","jim");:设置键为 "name",值为 "jim" 的键值对。
    • valueOperations.set("count",1);:设置键为 "count",值为 1 的键值对。
    • valueOperations.increment("count");:将键 "count" 的值自增 1。
    • valueOperations.increment("count");:再次将键 "count" 的值自增 1。
    • valueOperations.set("yzm","12345",10, TimeUnit.SECONDS);:设置键为 "yzm",值为 "12345",并设置逾期时间为 10 秒。

  • 利用哈希范例数据:

    • HashOperations hashOperations = redisTemplate.opsForHash();:获取用于利用哈希范例数据的 HashOperations 对象。
    • hashOperations.put("news","newsdz1",20);:在键为 "news" 的哈希中,设置字段为 "newsdz1",值为 20 的键值对。

  • 利用列表范例数据:

    • ListOperations listOperations = redisTemplate.opsForList();:获取用于利用列表范例数据的 ListOperations 对象。

  • 序列化键值:

    • redisTemplate.setKeySerializer(new StringRedisSerializer());:设置键的序列化器为 StringRedisSerializer,确保键以字符串情势举行序列化。
    • redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<User>(User.class));:设置值的序列化器为 Jackson2JsonRedisSerializer,用于将 Java 对象序列化为 JSON 格式存储在 Redis 中。这里指定了要序列化的对象范例为 User 类。

留意事项

  • 必要被 Redis 缓存的类必须实现序列化接口,这是由于 Redis 在存储对象时必要将对象序列化为字节数组举行存储。如果不实现序列化接口,在存储和读取对象时会抛出非常。
  • 在设置键值对时,如果没有指定逾期时间,那么键值对将不绝存在于 Redis 中,直到被手动删除或 Redis 内存不敷时被清算。
  • 在利用差别的利用接口(如 ValueOperations、HashOperations、ListOperations 等)时,必要根据具体的业务需求选择符合的接口举行利用,以进步代码的可读性和可维护性。
 
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表