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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/125162.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode力扣】42.接雨水(困难)

目录 1、题目介绍 2、解题 2.1、解题思路 2.2、图解说明 2.3、解题代码 1、题目介绍 原题链接&#xff1a;42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,…

【Go 编程实践】从零到一:创建、测试并发布自己的 Go 库

为什么需要开发自己的 Go 库 在编程语言中&#xff0c;包&#xff08;Package&#xff09;和库&#xff08;Library&#xff09;是代码组织和复用的重要工具。在 Go 中&#xff0c;包是代码的基本组织单位&#xff0c;每个 Go 程序都由包构成。包的作用是帮助组织代码&#xf…

学习笔记|构建一元线性回归模型|方差分析|方差齐性|检验残差正态性|规范表达|《小白爱上SPSS》课程:SPSS第二十讲: 一元线性回归分析怎么做?

目录 学习目的软件版本原始文档一元线性回归分析一、实战案例二、统计策略三、SPSS操作四、结果解读第一个表格为模型摘要第二表格为方差分析表第三个表格为模型系数第四张散点图&#xff08;主要检验方差齐性&#xff09; 第五张直方图和P-P图&#xff08;检验残差正态性&…

计算机毕设 基于大数据的股票量化分析与股价预测系统

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕…

单通道低压 H 桥电机驱动芯片AT9110H 兼容L9110 马达驱动芯片

H桥直流电机驱动电路是一种用于控制直流电机运转的电路&#xff0c;其主要特点是可以实现正反转控制&#xff0c;控制电机转速和方向&#xff0c;同时也具有过流保护功能。 H桥电路由四个功率晶体管和一些辅助电路组成&#xff0c;其中两个晶体管用于控制电机正转&#xff0c;…

【Mysql】去重(distinct)

目录 distinct 单字段 多字段 统计&#xff08; count ) distinct name为张三的有5条数据并且重复 单字段 语法&#xff1a; select distnct 字段名 from 表 这里的去重并不是删掉重复 多字段 select distinct 字段名1&#xff0c;字段名2 from 表 统计&#xff08; coun…

java通过FTP跨服务器动态监听读取指定目录下文件数据

背景&#xff1a; 1、文件数据在A服务器&#xff08;windows&#xff09;&#xff08;不定期在指定目录下生成&#xff09;&#xff0c;项目应用部署在B服务器&#xff08;Linux&#xff09;&#xff1b; 2、项目应用在B服务器&#xff0c;监听A服务器指定目录&#xff0c;有新…

【vue会员管理系统】篇五之系统首页布局和导航跳转

一、效果图 1.首页 2.会员管理&#xff0c;跳转&#xff0c;跳其他页面也是如此&#xff0c;该页的详细设计会在后面的章节完善 二、代码 新增文件 components下新增文件 view下新增文件&#xff1a; 1.componets下新建layout.vue 放入以下代码&#xff1a; <template…

学术论文的实证数据来源

一、引言 在当今的学术研究中&#xff0c;数据是至关重要的。无论是自然科学、社会科学还是人文科学&#xff0c;都需要借助数据来支撑和证明其研究假设和理论。然而&#xff0c;数据的来源却是多种多样的&#xff0c;而且不同的学科领域也有其特定的数据来源。本文旨在探讨论文…

30道高频Vue面试题快问快答

※其他的快问快答&#xff0c;看这里&#xff01; 10道高频Qiankun微前端面试题快问快答 10道高频webpack面试题快问快答 20道高频CSS面试题快问快答 20道高频JavaScript面试题快问快答 30道高频Vue面试题快问快答 面试中的快问快答 快问快答的情景在面试中非常常见。 在面试过…

linux 操作系统

先讲一下叭&#xff0c;自己学这的原因&#xff0c;是因为我在做项目的时候使用到啦Redis&#xff0c;其实在windows系统上我其实也装啦Redis上&#xff0c;但是我觉得后期在做其他的项目的时候可能也会用到这个然后就想着要不先学学redis&#xff0c;然后在后面也不至于什么都…

国标28181-2022检测内容GB28181-2022检测内容

目前国标28181-2022平台全项检测一共181项&#xff0c;总的检测相对2016版本要复杂很多&#xff0c;增加了一些比较重要的功能,下面列举下检测项(qq 123011785):

求臻医学MRD产品喜获北京市新技术新产品(服务)证书

近日&#xff0c;北京市科学技术委员会、中关村科技园区管理委员会、北京市发展和改革委员会等五大部门联合公示了2023年度第一批&#xff08;总第十八批&#xff09;北京市新技术新产品&#xff08;服务&#xff09;名单。凭借领先的技术能力、产品创新能力及质量可靠性等优势…

2023最新版本 FreeRTOS教程 -9-互斥量(基本使用和解决优先级反转)

互斥量是一种特殊的二进制信号量 使用场景1 &#xff08;互斥访问&#xff09; 外设的独立访问 如打印 协议操作 使用场景2 解决优先级反转 外设的独立访问 如打印 协议操作 使用场景2 解决优先级反转 我们以较为复杂的场景2来分析 -1- 创建三个任务 优先级从低到高&…

【教学类-40-03】A4骰子纸模制作3.0(6.5CM嵌套+记录表)

作品展示 背景需求 骰子2.0&#xff08;7字形&#xff09;存在幼儿不会“包边”的问题&#xff0c;求助老师帮忙示范&#xff0c;最后累的还是老师 1.0版本&#xff0c;边缘折线多&#xff0c;幼儿剪起来费力。 2.0版本&#xff0c;边缘折线多&#xff0c;幼儿剪起来费力。&a…

【ChatGLM2-6B】小白入门及Docker下部署

【ChatGLM2-6B】小白入门及Docker下部署 一、简介1、ChatGLM2是什么2、组成部分3、相关地址 二、基于Docker安装部署1、前提2、CentOS7安装NVIDIA显卡驱动1&#xff09;查看服务器版本及显卡信息2&#xff09;相关依赖安装3&#xff09;显卡驱动安装 2、 CentOS7安装NVIDIA-Doc…

“产业大数据”助推园区实现可持续发展!

​产业园区在现代经济体系中扮演着重要角色&#xff0c;不仅是地方经济的重要支柱&#xff0c;更是企业发展的舞台。产业园区要想实现可持续的长远发展&#xff0c;不仅需要不断的招引优质企业入驻&#xff0c;更要时刻关注园内的企业&#xff0c;培育有潜力的企业&#xff0c;…

华为OD机试 - 最优策略组合下的总的系统消耗资源数(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明4、思路 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷…

FPGA时序分析与约束(10)——生成时钟

一、概述 最复杂的设计往往需要多个时钟来完成相应的功能。当设计中存在多个时钟的时候&#xff0c;它们需要相互协作或各司其职。异步时钟是不能共享确定相位关系的时钟信号&#xff0c;当多个时钟域交互时&#xff0c;设计中只有异步时钟很难满足建立和保持要求。我们将在后面…

如何改善食品饮料包装生产企业的OEE?

食品饮料这类商品在我们的日常生活中十分常见&#xff0c;它们存在于各类商店、超市或路边的小店里。而食品饮料的包装是吸引人们购买该产品的一个重要因素。为了在这个市场中脱颖而出并提高盈利能力&#xff0c;企业需要关注设备的综合效率&#xff0c;即OEE&#xff08;Overa…