🎬 艳艳耶✌️:个人主页
🔥 个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》
⛺️ 越努力 ,越幸运。
1、Java连接Redis
Redis与MySQL都是数据库,java操作redis其实跟操作mysql的过程是一样的。
1.1 导入依赖
打开IDEA,进入Java项目,导入pom依赖,代码如下:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
1.2 Redis服务器准备
导入依赖后,找到redis.bat双击启动redis(时常忘记文件位置的可以新开快捷方式置于桌面),如下:
1.3 建立连接
在java项目包下,新建一个名为redis的Package用来存放建立链接的java代码,如下:
在redis包下,新建java类,并添加以下代码,如下:
package redis;
import redis.clients.jedis.Jedis;
/**
* @author 谌艳
* @site www.shenyan.com
* @create 2023-11-05 21:21
*/
public class Demo1 {
public static void main(String[] args) {
// 建立链接
Jedis jedis = new Jedis("localhost",6379);//IP地址+端口号
// 设置密码
jedis.auth("123456");
// 测试链接是否成功
System.out.println(jedis.ping());
// ok
}
}
然后启动Demo1方法,进行测试链接是否成功,效果如下:
2.Java操作Redis的常见类型数据存储
在进行存储数据前,我们先需要将Java链接上Redis,参考第一模块,如上。
链接上Redis之后,才可进行数据存储。
2.1 String(字符串)存取值操作
2.1.1 指定存储数据的数据库与存储入库操作
代码如下:
package redis;
import redis.clients.jedis.Jedis;
/**
* @author 谌艳
* @site www.shenyan.com
* @create 2023-11-05 21:56
*/
public class Demo2 {
public static void main(String[] args) {
// 建立链接
Jedis jedis = new Jedis("localhost",6379);//IP地址+端口号
// 设置密码
jedis.auth("123456");
// String的操作
jedis.select(1);//指定数据库
jedis.set("yanyan","是个大美女");//往指定的数据库中添加数据
}
}
效果如下:
2.1.2 存储数据的修改与查询
添加以下代码:
jedis.set("yanyan","yanyan将原有数据修改了");//将原先存储的数据修改
System.out.println(jedis.get("yanyan"));//查询
修改效果如下:
2.1.3 数据临时存储
在Demo2中加入以下代码:
jedis.setex("time",20,"设置过期时间为52秒");//为"time"键设置过期时间
System.out.println(jedis.ttl("time"));//获取键的剩余生存时间并且打印返回
效果展示:
过期就没有了
2.2 哈希数据结构存取值操作
案例:
- 创建一个名为 "user" 的哈希表,并向其中添加三个字段:"name"、"hobby" 和 "age",并分别设置它们的值。
2.2.1 存值(新增与修改)
1. Jedis存值
新建Demo3
package redis;
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @author 谌艳
* @site www.shenyan.com
* @create 2023-11-05 22:13
*/
public class Demo3 {
public static void main(String[] args) {
// 建立链接
Jedis jedis = new Jedis("localhost",6379);//IP地址+端口号
// 设置密码
jedis.auth("123456");
// 哈希数据结构的操作
// 哈希表是 Redis 中的一种数据结构,它允许你在一个键下存储多个字段和与这些字段相关联的值。
jedis.select(1);//指定数据库
// 创建一个名为 "user" 的哈希表,并向其中添加三个字段:"name"、"hobby" 和 "age",并分别设置它们的值
jedis.hset("user","name","艳艳耶");//姓名,将 "name" 字段设置为 "Kissship"
jedis.hset("user","hobby","超级大美女");//爱好设置
jedis.hset("user","age","18");//年龄设置
}
}
效果图:
2. 通过Map对象存值
以下是具体实现代码与逻辑详解:
Demo3:
Map map = new HashMap();//创建一个名为map的HashMap对象,用于存储键值对数据
map.put("name","炸鸡");//名字
map.put("hobby","喜欢吃炸鸡");//爱好
map.put("age","17");//年龄
RedisUtils.setHashMap(jedis,"user",map);//调用自定义的工具类方法setHashMap,并传递
RedisUtils:
package redis;
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class RedisUtils {
//通过Java中的Map对象进行数据存储
public static void setHashMap(Jedis jedis, String Key, Map<String,String> map) {
//空值检查
//首先检查传入的map对象是否为非空且包含至少一个键值对。如果map为空或不包含键值对,方法不会执行任何操作,直接返回。
if (map != null && map.size() > 0) {
//遍历Map并存储数据
Set<String> keys = map.keySet();//如果map不为空且包含键值对,方法会通过map.keySet()获取所有的键(字段名)。
for (String k : keys) {//在循环中,对于每个键k,map.get(k)获取到对应的值(字段值)。
jedis.hset(Key,k,map.get(k));//将当前键值对存储到Redis
}
}
}
}
效果展示:
2.2.2 取值(查询)
1. 获取哈希表中特定字段的值(单个查询)
System.out.println(jedis.hget("user", "hobby"));//从名为"user"的哈希表中获取键为"hobby"的字段的值,并将其打印到控制台
2. 获取整个哈希表的内容(查询所有)
System.out.println(jedis.hgetAll("user"));//获取名为"user"的哈希表中的所有字段和它们的值,然后将它们打印到控制台
2.2.3 删除
1. 删除特定字段(单个属性删除)
Long hdel = jedis.hdel("user","age");//删除名为"user"的哈希表中的特定字段"age"及其中的值
单个删除代码执行效果如下:
2. 删除哈希表(删除所有)
jedis.del("user");//删除名为"user"的键以及与之相关的哈希表
删除所有代码执行效果如下:
user的哈希表已经删除成功了
3.Redis中项目的应用
Redis(Remote Dictionary Server)是一个开源的内存数据库系统,它以键值对的形式存储数据,具有高效的读写速度,特别适合于缓存和实时数据处理等场景。以下是 Redis 在不同项目中的一些常见应用:
缓存系统:
Redis 最常见的用途之一是作为缓存系统。它可以存储热门或频繁访问的数据,从而加快读取速度,减轻后端数据库的负担。这对于网站、应用程序和服务的性能优化非常重要。
会话存储:
Redis 可以用于存储会话信息,特别是在分布式系统中。通过将会话数据存储在 Redis 中,可以实现负载均衡、容错和扩展性,同时保证会话数据的快速访问。
消息队列:
Redis 的列表数据结构非常适合作为消息队列的基础。发布者可以将消息推送到列表中,而订阅者可以从列表中获取消息,从而实现异步通信、任务队列等功能。
实时分析和计数:
Redis 提供了各种数据结构(如 HyperLogLog、Bitmaps 等)和操作,可以用于实时分析和计数,例如统计网站的访问次数、用户在线状态等。
地理信息系统(Geospatial):
Redis 支持地理信息数据结构,可以用于存储位置坐标和距离计算。这使得 Redis 在构建位置服务和地理信息系统方面非常有用。
推荐系统:
Redis 可以用于构建推荐系统,通过存储用户喜好和商品信息,以及实时计算相似度等信息,从而为用户提供个性化的推荐。
实时分布式锁:
Redis 提供了基于 SETNX(set if not exists)命令和 Lua 脚本等方法,可以实现分布式系统中的实时锁定机制,用于协调多个节点的操作。
实时排行榜:
利用 Redis 的有序集合(Sorted Sets)结构,可以实现实时排行榜功能,例如游戏中的积分排名、热门商品排名等。
持久化和数据备份:
Redis 支持数据的持久化,可以将内存中的数据定期保存到磁盘上,以保证数据的安全性。这对于关键业务数据非常重要。
分布式锁与分布式限流:
Redis 提供了基于 Lua 脚本的原子操作,可以实现分布式锁和限流,保证在分布式环境下的数据一致性和流量控制。
请注意,虽然 Redis 提供了强大的功能,但也需要谨慎使用。例如,需要考虑数据的一致性、持久化策略、内存消耗等方面的问题。同时,Redis 是一个基于内存的数据库,因此需要足够的内存资源来支持。