1.1在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java
如下图:关于如何使用window安装Redis,我已在上一篇博客中详细介绍了!!!
使用我们的Java开发工具去连接到 redis 服务
1.2导入pom依赖:
redis.clients
jedis
2.9.0
1.3创建类去连接:
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("127.0.0.1",6379);
//密码
jedis.auth("123456");
System.out.println("连接成功");
//查看服务是否运行
System.out.println("服务器正在运行: "+jedis.ping());
}
成功连接会返回PONG
这里我们就连接上了redis,接下来就在类中使用Java的方式去实例redis 的各种类型值的增删改查!!!
2.1Redis Java String(字符串) 实例
System.out.println(("--------获取字符串存储的数据并输出-----------"));
jedis.set("zking", "获取到zking字符值");
jedis.set("baidu", "获取到baidu字符值");
// 获取存储的数据并输出
System.out.println("redis 存储的字符串为: "+ jedis.get("zking"));
2.2Redis Java List(列表) 实例
System.out.println(("--------获取List存储的数据并输出-----------"));
jedis.lpush("tools-list","idea");
jedis.lpush("tools-list", "eclips");
// 获取存储的数据并输出
List list = jedis.lrange("tools-list", 0 ,1);
for(int i=0; i
2.3Redis Java Hash 实例
System.out.println(("--------获取哈希存储的数据并输出-----------"));
jedis.hset("java_goods","gname","iPhone15");
jedis.hset("java_goods","gprice","$99999");
jedis.hset("java_goods","gnum","12");
// #获取指定的字段值
System.out.println("当前获取的是"+jedis.hget("java_goods", "gprice"));
// #删除指定的字段值
jedis.hdel("java_goods","gprice");
// #查询指定key的所有字段
Map java_goods_map = jedis.hgetAll("java_goods");
System.out.println(java_goods_map);
// #查询指定key中的字段是否存在
Boolean java_goods = jedis.hexists("java_goods","gprice");
System.out.println("查询指定key中的字段是否存在"+java_goods);
// #获取指定key中的长度
Long java_goods_len = jedis.hlen("java_goods");
System.out.println("指定key中的长度是:"+java_goods_len);
2.4Redis Java 集合(Set)
jedis.select(3);//指定数据库
//lpush key value1 value2 value3 将一个或多个值插入到列表头部
jedis.lpush("List_hobby", "sing", "jump", "rap", "basketball");
//llen key 获取列表的长度
System.out.println(jedis.llen("List_hobby"));
//lindex key index 根据索引获取列表中的元素
System.out.println(jedis.lindex("List_hobby", 2));
//lrange key start sop 查看指定范围内的元素
System.out.println(jedis.lrange("List_hobby", 0, 3));
2.5Redis Java 集合(map)
System.out.println(("--------获取map的数据并输出-----------"));
jedis.select(2);
Map map= new HashMap <>();
map.put("name","lya");
map.put("age","99");
map.put("vehicle","奥迪A8");
RedisUtil.setHashMap(jedis,"user_map",map);
这里我们插入数据方法是一条一条的,这样就会让我们的效率变慢,所以我们封装一个工具类让我们调用
package com.zking.ssm.util;
import redis.clients.jedis.Jedis;
import java.util.Map;
import java.util.Set;
/**
* @author 程序猿-小李哥
* @site www.xiaolige.com
* @company 猪八戒有限集团
* @create 2023-11-03-19:12
*/
public class RedisUtil {
// hash批量添加
public static void setHashMap(Jedis jedis, String key, Map map){
if (map != null && map.size()>0){
Set keys =map.keySet();
for (String k :keys){
jedis.hset(key,k,map.get(k));
}
}
}
}
Redis一般用于存储和管理缓存数据,常用于应用程序中需要快速读写的场景。Redis还被广泛用于消息队列、计数器、实时排行榜等应用场景。
如以下:这里的1的状态就已经定好了是代表性别是男,2的状态就已经定好了是代表性别是女。我们项目中所使用的也是这样的Json格式的数据,用于存储一些基本不会改变的数据,其他地方会使用到的数据。像字典数据,系统参数数据
3.2使用Redis的实际应用场景示例:会议状态
实体类:
package com.lya.reids;
import lombok.Data;
@Data
public class Status {
private Integer id;
private String name;
private Integer zt;
public Status(Integer id, String name, Integer zt) {
this.id = id;
this.name = name;
this.zt = zt;
}
}
自定义注解,用于标注状态的文本表示
package com.lya.reids;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface status_value {
String value() default "";
}
接下来,可以编写一个工具类,用于获取状态的文本表示。该工具类通过反射获取对象的状态属性上的注解值,并返回该值作为文本表示。
StatusTextUtil :
package com.lya.utlils;
import com.lya.reids.status_value;
import com.lya.reids.status_value;
import java.lang.reflect.Field;
public class StatusTextUtil {
public static String getStatusText(Object obj) {
Class> clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(status_value.class)) {
try {
field.setAccessible(true);
int status = field.getInt(obj);
return field.getAnnotation(status_value.class).value();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return null;
}
}
建立一个模拟数据:
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","进行中");
//数据模拟
List lists = new ArrayList();
//将数字转成文字
Status u1 = new Status(1,"会议状态",1);
Status u2 = new Status(2,"会议状态",2);
Status u3 = new Status(3,"会议状态",3);
lists.add(u1);
lists.add(u2);
lists.add(u3);
for (Status u: lists) {
String hy = jedis.get(u.getZt()+"");
String text = StatusTextUtil.getStatusText(u);
String hy_val = text=hy;
System.out.println("会议:"+u.getName()+",会议状态:"+hy_val);
}
}
效果: