【Redis】Java连接redis进行数据访问及项目的实例应用场景

目录

一、连接

二、数据访问

1. 字符串(String)

2. 哈希(Hash)

3. 列表(List)

4. 集合(Set)

三、项目应用

1. 作用

2. 实例


一、连接

打开开发工具( IDEA ) ,在需要连接Redis的项目中,找到 pom.xml 配置文件导入依赖

 在pom.xml 配置文件中导入以下依赖 : 

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

打开本地的Redis【windows连接】,如果是连接虚拟机的Redis RedisDesktopManager数据库只需要打开虚拟机并且连接,开发工具即可连接,如果不知道的可以看我博客 : 

【Redis】的简介和安装配置(Linux和windows)及操作命令icon-default.png?t=N7T8https://blog.csdn.net/SAME_LOVE/article/details/134187143?spm=1001.2014.3001.5502

在本地进行连接后,在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数据将其转换为对应的文本表示,并展现在页面中了。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值