目录
一、连接
打开开发工具( IDEA ) ,在需要连接Redis的项目中,找到 pom.xml 配置文件导入依赖
在pom.xml 配置文件中导入以下依赖 :
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
打开本地的Redis【windows连接】,如果是连接虚拟机的Redis RedisDesktopManager数据库只需要打开虚拟机并且连接,开发工具即可连接,如果不知道的可以看我博客 :
在本地进行连接后,在IDEA 开发工具中,编程以下代码可以进行连RedisDesktopManager数据库。
//host : IP port : 端口号 Jedis jedis = new Jedis("localhost", 6379); //登入密码 jedis.auth("123456"); //查看是否连接成功 System.out.println(jedis.ping()); //进入为1的数据库 jedis.select(1);
输入如图,表示连接成功 :
二、数据访问
1. 字符串(String)
以下有增删改查的实例及语法
代码实例 :
package com.zking.ssm.redis; import redis.clients.jedis.Jedis; /** * @author CloudJun * @create 2023-11-03 16:27 */ public class Demo2 { public static void main(String[] args) { //host : IP port : 端口号 Jedis jedis = new Jedis("localhost", 6379); //登入密码 jedis.auth("123456"); //查看是否连接成功 System.out.println(jedis.ping()); //进入为1的数据库 jedis.select(1); //增加 jedis.set("name","ikun"); jedis.set("hobby","披坚执锐"); //修改数据 jedis.set("name","艾德犸"); //查看数据 System.out.println(jedis.get("name")); System.out.println(jedis.get("hobby")); //删除 jedis.del("hobby"); //增加一个key名为 mm 值为 : 情况不对,披坚执锐 30秒后自动删除 jedis.setex("mm",30,"情况不对,披坚执锐"); } }
输入如图 :
数据库储存 :
2. 哈希(Hash)
以下有增删改查的实例及语法
代码实例 :
package com.zking.ssm.redis; import redis.clients.jedis.Jedis; /** * @author CloudJun * @create 2023-11-03 16:27 */ public class Demo2 { public static void main(String[] args) { //host : IP port : 端口号 Jedis jedis = new Jedis("localhost", 6379); //登入密码 jedis.auth("123456"); //查看是否连接成功 System.out.println(jedis.ping()); //进入为1的数据库 jedis.select(2); //以哈希(Hash)的增加储存值 jedis.hset("user","name","渣渣灰"); jedis.hset("user","sex","男"); jedis.hset("user","age","21"); //获取指定的字段值 这里获取的是user为key名的sex字段属性值 System.out.println(jedis.hget("user", "sex")); //查询指定key中的字段属性是否存在 这里查询user的sex字段属性是否存在 Boolean sex = jedis.hexists("user","sex"); System.out.println(sex); //获取指定key中的长度 获取user的长度,就是有多少个字段属性 Long user_len = jedis.hlen("user"); System.out.println(user_len); //删除指定的字段值 删除key名为user的sex属性字段及sex的值 jedis.hdel("user","sex"); } }
输入如图 :
数据库储存 :
如果增加时,想同时将多个值增加到一个key中,我们创建一个工具类
RedisUtils (工具类)
package com.zking.ssm.redis; import redis.clients.jedis.Jedis; import java.util.Map; import java.util.Set; /** * @author CloudJun * @create 2023-11-03 18:28 */ public class RedisUtils { public static void setHashMap(Jedis jedis, String key, Map<String,String> map){ if ( map !=null && map.size() > 0 ) { Set<String> keys = map.keySet(); for (String k : keys){ jedis.hset(key,k,map.get(k)); } } } }
在将使用实例中的代码修改为以下
package com.zking.ssm.redis; import redis.clients.jedis.Jedis; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; /** * @author CloudJun * @create 2023-11-03 16:27 */ public class Demo2 { public static void main(String[] args) { //host : IP port : 端口号 Jedis jedis = new Jedis("localhost", 6379); //登入密码 jedis.auth("123456"); //查看是否连接成功 System.out.println(jedis.ping()); //进入为1的数据库 jedis.select(2); Map<String, String> map = new HashMap(); map.put("name","渣渣灰"); map.put("sex","男"); map.put("age","21"); //以哈希(Hash)的增加储存值 // jedis.hset("user","name","渣渣灰"); // jedis.hset("user","sex","男"); // jedis.hset("user","age","21"); RedisUtils.setHashMap(jedis,"user",map); //获取指定的字段值 这里获取的是user为key名的sex字段属性值 System.out.println(jedis.hget("user", "sex")); //查询指定key中的字段属性是否存在 这里查询user的sex字段属性是否存在 Boolean sex = jedis.hexists("user","sex"); System.out.println(sex); //获取指定key中的长度 获取user的长度,就是有多少个字段属性 Long user_len = jedis.hlen("user"); System.out.println(user_len); //删除指定的字段值 删除key名为user的sex属性字段及sex的值 jedis.hdel("user","sex"); System.out.println(jedis.hlen("user")); } }
( 储存删除的结果都是相同的 )
3. 列表(List)
以下有关于列表的语法案例
代码实例 :
package com.zking.ssm.redis; import redis.clients.jedis.Jedis; /** * @author CloudJun * @create 2023-11-03 16:27 */ public class Demo3 { public static void main(String[] args) { //host : IP port : 端口号 Jedis jedis = new Jedis("localhost", 6379); //登入密码 jedis.auth("123456"); //查看是否连接成功 System.out.println(jedis.ping()); //进入为1的数据库 jedis.select(2); //将一个或多个值插入到列表头部 jedis.lpush("hobby", "洗脚", "spa", "按摩"); //获取列表的长度 llen方法 获取hobby的长度 3 System.out.println(jedis.llen("hobby")); //根据索引获取列表中的元素 获取hobby中下标为0的属性值 System.out.println(jedis.lindex("hobby", 0)); //查看指定范围内的元素 获取hobby中下标从0到1的属性值 System.out.println(jedis.lrange("hobby", 0, 1)); } }
输出如图 :
数据库储存如图 :
4. 集合(Set)
以下有关于集合的语法案例
代码实例 :
package com.zking.ssm.redis; import redis.clients.jedis.Jedis; /** * @author CloudJun * @create 2023-11-03 16:27 */ public class Demo4 { public static void main(String[] args) { //host : IP port : 端口号 Jedis jedis = new Jedis("localhost", 6379); //登入密码 jedis.auth("123456"); //查看是否连接成功 System.out.println(jedis.ping()); //进入为1的数据库 jedis.select(2); //向集合添加一个或多个元素 增加一个名称为game的集合,有"gogo","振刀","农药","飞机"这四个值 jedis.sadd("game","gogo","振刀","农药","飞机"); //获取集合中的元素数量 获取game集合中一共有多少个值 System.out.println(jedis.scard("game")); //查询集合是否存在 查询名称为game的集合是否存在 System.out.println(jedis.exists("game")); } }
输出如图 :
数据库储存如图 :
三、项目应用
1. 作用
在项目中,Redis可以用于以下几个方面的应用:
1. 缓存:Redis可以作为缓存服务器,将常用的数据存储在内存中,以加快数据访问的速度。通过将数据存储在Redis中,可以减轻数据库的负载,提高系统的响应速度。
2. 会话管理:Redis可以用于存储用户的会话信息,例如用户登录状态、购物车信息等。通过将会话数据存储在Redis中,可以实现分布式会话管理,提高系统的可伸缩性和可靠性。
3. 消息队列:Redis提供了发布/订阅功能,可以用于实现简单的消息队列。可以将需要处理的任务作为消息发布到Redis中,然后由消费者订阅并处理这些消息,实现任务的异步处理。
4. 数据库:Redis支持持久化存储,可以将数据持久化到磁盘中,以防止数据丢失。可以将Redis作为主数据库或辅助数据库,存储一些关键的业务数据。
5. 计数器和排行榜:Redis提供了原子操作,可以用于实现计数器和排行榜功能。可以通过Redis的原子操作实现对计数器的增加、减少和查询,以及对排行榜的更新和查询。
6. 分布式锁:Redis提供了分布式锁的功能,可以用于实现多个进程或线程之间的互斥访问。可以通过Redis的原子操作实现对锁的获取和释放,以确保在同一时间只有一个进程或线程可以访问某个资源。
总的来说,Redis在项目中的应用非常广泛,可以用于缓存、会话管理、消息队列、数据库、计数器和排行榜、分布式锁等多个方面,可以提高系统的性能、可伸缩性和可靠性。
2. 实例
在获取完数据之后,是一个List集合,里面是一个对象,对象中有一个属性为状态,类型为int,如何使用自定义注解将这个状态以文本的形式显示在页面中
首先,需要定义一个自定义注解,用于标注状态的文本表示。
hobby_value
package com.CloudJun.ssm.redis;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author CloudJun
* @create 2023-11-05 16:23
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface hobby_value {
String value() default "";
}
然后,创建一个对象来方便模拟数据储存,进行获取。
User
package com.CloudJun.ssm.redis;
import lombok.Data;
/**
* @author CloudJun
* @create 2023-11-05 16:21
*/
@Data
public class User {
private Integer id;
private String name;
private Integer hobby;
public User(Integer id, String name, Integer hobby) {
this.id = id;
this.name = name;
this.hobby = hobby;
}
}
接下来,可以编写一个工具类,用于获取状态的文本表示。该工具类通过反射获取对象的状态属性上的注解值,并返回该值作为文本表示。
StatusTextUtil
package com.CloudJun.ssm.redis;
import java.lang.reflect.Field;
/**
* @author CloudJun
* @create 2023-11-05 17:02
*/
public class StatusTextUtil {
public static String getStatusText(Object obj) {
Class<?> clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(hobby_value.class)) {
try {
field.setAccessible(true);
int status = field.getInt(obj);
return field.getAnnotation(hobby_value.class).value();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return null;
}
}
最后,在页面中使用该工具类获取状态的文本表示,并显示在页面上。
为了方便创建一个测试类,进行数据的模拟获取并且转换成文本来回显到页面上
package com.CloudJun.ssm.redis;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author CloudJun
* @create 2023-11-03 16:27
*/
public class Demo5 {
public static void main(String[] args) throws NoSuchFieldException {
//host : IP port : 端口号
Jedis jedis = new Jedis("localhost", 6379);
//登入密码
jedis.auth("123456");
//查看是否连接成功
System.out.println(jedis.ping());
//进入为3的数据库
jedis.select(3);
//增加
jedis.set("1","打篮球");
jedis.set("2","踢足球");
jedis.set("3","做运动");
jedis.set("4","洗脚spa");
jedis.set("5","打豆豆");
jedis.set("6","打游戏");
//数据模拟,我们查询返回的有过对象集合,想要显示在页面上是不完美的,比如: 状态,爱好
List<User> lists = new ArrayList<User>();
//这里是演示用户的爱好的数字进行转化为爱好的状态文字
User u1 = new User(1,"坤坤酱",1);
User u2 = new User(2,"丘比特",2);
User u3 = new User(3,"独孤贱",3);
User u4 = new User(4,"卡卡西",4);
User u5 = new User(5,"沸羊羊",5);
User u6 = new User(6,"钢铁侠",6);
lists.add(u1);
lists.add(u2);
lists.add(u3);
lists.add(u4);
lists.add(u5);
lists.add(u6);
for (User u: lists) {
String hobby = jedis.get(u.getHobby()+"");
// hobby_value h = u.getClass().getDeclaredField("hobby").getAnnotation(hobby_value.class);
// System.out.println(hobby);
String text = StatusTextUtil.getStatusText(u);
String hobby_val = text=hobby;
System.out.println("姓名:"+u.getName()+",爱好:"+hobby_val);
}
}
}
执行结果 :
这样,你就可以根据状态int数据将其转换为对应的文本表示,并展现在页面中了。