目录
打开开发工具( IDEA ) ,在需要连接Redis的项目中,找到 pom.xml 配置文件导入依赖
在pom.xml 配置文件中导入以下依赖 :
redis.clients
jedis
2.9.0
打开本地的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);
输入如图,表示连接成功 :
以下有增删改查的实例及语法
代码实例 :
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,"情况不对,披坚执锐"); } }输入如图 :
数据库储存 :
以下有增删改查的实例及语法
代码实例 :
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, Mapmap) { if ( map !=null && map.size() > 0 ) { Setkeys = 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); Mapmap = 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")); } }( 储存删除的结果都是相同的 )
以下有关于列表的语法案例
代码实例 :
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)); } }输出如图 :
数据库储存如图 :
以下有关于集合的语法案例
代码实例 :
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")); } }输出如图 :
数据库储存如图 :
在项目中,Redis可以用于以下几个方面的应用:
1. 缓存:Redis可以作为缓存服务器,将常用的数据存储在内存中,以加快数据访问的速度。通过将数据存储在Redis中,可以减轻数据库的负载,提高系统的响应速度。
2. 会话管理:Redis可以用于存储用户的会话信息,例如用户登录状态、购物车信息等。通过将会话数据存储在Redis中,可以实现分布式会话管理,提高系统的可伸缩性和可靠性。
3. 消息队列:Redis提供了发布/订阅功能,可以用于实现简单的消息队列。可以将需要处理的任务作为消息发布到Redis中,然后由消费者订阅并处理这些消息,实现任务的异步处理。
4. 数据库:Redis支持持久化存储,可以将数据持久化到磁盘中,以防止数据丢失。可以将Redis作为主数据库或辅助数据库,存储一些关键的业务数据。
5. 计数器和排行榜:Redis提供了原子操作,可以用于实现计数器和排行榜功能。可以通过Redis的原子操作实现对计数器的增加、减少和查询,以及对排行榜的更新和查询。
6. 分布式锁:Redis提供了分布式锁的功能,可以用于实现多个进程或线程之间的互斥访问。可以通过Redis的原子操作实现对锁的获取和释放,以确保在同一时间只有一个进程或线程可以访问某个资源。
总的来说,Redis在项目中的应用非常广泛,可以用于缓存、会话管理、消息队列、数据库、计数器和排行榜、分布式锁等多个方面,可以提高系统的性能、可伸缩性和可靠性。
在获取完数据之后,是一个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
lists = new ArrayList(); - //这里是演示用户的爱好的数字进行转化为爱好的状态文字
- 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数据将其转换为对应的文本表示,并展现在页面中了。