一、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类,并添加以下代码,如下:
public static void main(String[] args) { // 建立链接Jedis jedis = new Jedis("localhost",6379);//IP地址+端口号 // 设置密码jedis.auth("123456"); // 测试链接是否成功System.out.println(jedis.ping());}
然后启动Demo1方法,进行测试链接是否成功,效果如下:
二、Java操作Redis的常见类型数据存储
在进行存储数据前,我们先需要将Java链接上Redis,参考第一模块,如上。
链接上Redis之后,才可进行数据存储。
2.1 String(字符串)存取值操作
2.1.1 指定存储数据的数据库与存储入库操作
代码与注释如下:
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("KISS","Kisship添加数据了");//往指定的数据库中添加数据} }
效果如下:
2.1.2 存储数据的修改与查询
添加以下代码:
jedis.set("KISS","Kisship将原有数据修改了");//将原先存储的数据修改 System.out.println(jedis.get("KISS"));//查询
修改效果如下:
查询效果如下:
2.1.3 数据临时存储
在Demo2中加入以下代码:
jedis.setex("time",20,"设置过期时间为20秒");//为"time"键设置过期时间 System.out.println(jedis.ttl("time"));//获取键的剩余生存时间并且打印返回
代码解释:
setex
是 Redis 命令的一部分,示例的方法用于设置一个键值对,并为该键设置一个过期时间。ttl
是 Redis 命令的一部分,它用于获取键的剩余生存时间。
效果展示,如下:
还未过期前的效果:
过期后的效果:
2.2 哈希数据结构存取值操作
案例:
- 创建一个名为 "user" 的哈希表,并向其中添加三个字段:"name"、"hobby" 和 "age",并分别设置它们的值。
2.2.1 存值(新增与修改)
1. Jedis存值
新建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","Kissship");//姓名,将 "name" 字段设置为 "Kissship"jedis.hset("user","hobby","Play Computer games");//爱好设置jedis.hset("user","age","18");//年龄设置}
效果如下:
2. 通过Map对象存值
以下是具体实现代码与逻辑详解:
Demo3:
Map map = new HashMap();//创建一个名为map的HashMap对象,用于存储键值对数据 map.put("name","鸭翅牙齿");//名字 map.put("hobby","look girls");//爱好 map.put("age","17");//年龄 RedisUtils.setHashMap(jedis,"user",map);//调用自定义的工具类方法setHashMap,并传递三个参数
RedisUtils:
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"的键以及与之相关的哈希表
删除所有代码执行效果如下:
2.3 列表存取值操作
在Java中操作Redis列表(list)进行取值时,通常会使用Redis的lindex
或lrange
命令,这两个命令有不同的逻辑:
使用
lindex
命令:
lindex
命令用于获取列表中指定索引位置的元素。索引从0开始,表示列表的第一个元素。- 例如,
jedis.lindex("mylist", 1)
将返回"mylist"列表中索引为1的元素。- 如果索引超出了列表的范围(即索引小于0或大于等于列表的长度),
lindex
会返回null。使用
lrange
命令:
lrange
命令用于获取列表中指定范围的元素。- 你可以指定起始索引和结束索引,从而获取这个范围内的元素,包括起始索引和结束索引。
- 例如,
jedis.lrange("mylist", 0, 2)
将返回"mylist"列表中的前3个元素,因为索引0表示第一个元素,索引2表示第三个元素。- 如果你希望获取整个列表,可以使用
jedis.lrange("mylist", 0, -1)
,其中-1表示列表的最后一个元素。
2.3.1 存值
//将七首音乐歌曲的名称依次添加到名为"music"的列表的左侧,即列表的开头。如果"music"列表之前不存在,它会被创建,然后这些值会被添加到列表中,形成一个包含这些音乐歌曲名称的有序列表。jedis.lpush("music","《可爱女人》","《晴天》","《稻香》","《夜曲》","《东风破》","《红尘客栈》","《黑色毛衣》");
运行代码结果如下:
2.3.2 取值
//从"music"列表中获取索引为1的元素,并将其打印到控制台System.out.println(jedis.lindex("music", 1));//从名为"music"的列表中获取索引范围从0到5的所有元素System.out.println(jedis.lrange("music", 0, 5));
运行代码结果如下:
三、Redis中的项目应用
最后Java与Redis的集成以及Redis中的项目应用就到这里,祝大家在敲代码的路上一路通畅!