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

news2024/11/25 2:45:34

目录

一、连接

二、数据访问

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL表的增删改查(基础且保姆级的教程)

CRUD 1.注释:在SQL中可以使用"--空格 描述"来表示注释说明 2.CRUD即增加(Create), 查询(Retrieve), 更新(Update),删除(Delete)四个单词首字母的缩写 新增(Create) 简述(一般写法): insert into 表名 values(列,列...) ->给出列的数目和类型,都是要和表结构匹配…

vue3 组件篇 Icon

文章目录 组件介绍如何在项目中搭建iconfont字体图标库快速创建一套iconfont修改 或 新增iconfont 组件安装与使用组件代码参数说明关于dxui组件库 组件介绍 Icon&#xff08;图标&#xff09;组件是一种常见的用户界面元素&#xff0c;用于在网页、移动应用和桌面应用中显示图…

世微LED 大功率升压恒流驱动芯片 平板显示LED背光板灯串恒流控制器 AP9193

概述 AP9193 是一款高效率、高精度的升 压型大功率 LED 灯恒流驱动控制芯片。 AP9193 内置高精度误差放大器&#xff0c;固 定关断时间控制电路&#xff0c;恒流驱动电路等&#xff0c; 特别适合大功率、多个高亮度 LED 灯的串 恒流驱动。 AP9193 采用固定关断时间的控制方 式…

【验证码系列】Google验证码从数据训练到机器自动识别算法构建

文章目录 1. 写在前面2. CSCI级设计决策2.1. Google验证码突防关联2.2. Google验证码突防行为设计决策 3. Google验证码突防体系结构设计3.1. Google验证码突防部件3.1.2. Google验证码突防组成 3.2. Google验证码突防软件3.2.1. Google验证码突防软件体系结构3.2.2. Google验证…

网页JS代码,加密与不加密的区别

网页中用JS实现的功能&#xff0c;不加密时&#xff0c;是对所有访问者透明的&#xff0c;任何人都可以直接查看、分析其中的功能逻辑。而经混淆加密后的JS&#xff0c;以密文形式存在&#xff0c;可防止它人窥探。 例1&#xff0c;某网站JS代码&#xff1a; 使用JShaman对图中…

Airpods - 放到洗衣机里洗,最后成功救回 Airpods Pro,功能恢复如初!

前几天加班回来很晚了&#xff0c;倒头就睡&#xff0c;耳机放在裤兜子里&#xff0c;因为第二天是周末&#xff0c;睡到自然醒&#xff0c;没想到打开洗衣机洗衣服也没想起来耳机还在兜里。&#xff08;此时想抽自己的大嘴巴子&#xff09;洗完衣服去晒衣服&#xff0c;发现耳…

自动识别图片文字表格:高效神器,告别繁琐手动操作

现代科技的快速发展为我们的生活带来了许多便利和效率提升。在数据处理和文档管理方面&#xff0c;自动化技术也日益成熟和普及。一项非常有用的技术是自动识别文字生成表格&#xff0c;它可以将大量的图片识别成文本并转换为表格形式&#xff0c;使得数据的整理和分析更加简便…

【CIO人物展】国家能源集团信息技术主管王爱军:中国企业数智化转型升级的内在驱动力...

王爱军 本文由国家能源集团信息技术主管王爱军投递并参与《2023中国数智化转型升级优秀CIO》榜单/奖项评选。丨推荐企业—锐捷网络 大数据产业创新服务媒体 ——聚焦数据 改变商业 随着全球信息化和网络化的进程日益加速&#xff0c;数字化转型已经成为当下各大企业追求的核心…

浅析应急疏散照明设计在高层建筑中的应用

【摘要】作为工程设计人员&#xff0c;对高层建筑的应急照明设计应有足够的认识和重视&#xff0c;以保证在出现失火事件时&#xff0c;可以有效地引导建筑内的人员安全逃离、正确疏散&#xff0c;这是建筑设计的*大价值所在。在设计应急照明时&#xff0c;应根据当地的情况选择…

香港金融科技周VERTU CSO Sophie谈Web3.0的下一个风口 手机虚拟货币移动支付

10月31日&#xff0c;香港金融科技周正式拉开帷幕。这项香港金融科技界地年度盛事今年已经踏入了第八届&#xff0c;本届活动吸引超过数百位金融科技专业人士、创业者和行业领袖现场参与&#xff0c;线上参与观众超过10万人次。 在金融科技周的圆桌会议上&#xff0c;VERTU首席…

使用群晖Docker搭建HomeAssistant并实现异地公网访问

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 使用群晖Docker搭建HomeAssistant并实现异地公网访问 文章目录 使用群晖Docker搭建HomeAssistant…

[云原生案例2.1 ] Kubernetes的部署安装 【单master集群架构 ---- (二进制安装部署)】节点部分

文章目录 1. 常见的K8S安装部署方式1.1 Minikube1.2 Kubeadm1.3 二进制安装部署 2. Kubernetes单master集群架构 ---- &#xff08;二进制安装部署&#xff09;2.1 前置准备2.2 操作系统初始化2.3 部署 docker引擎 ---- &#xff08;所有 node 节点&#xff09;2.4 部署 etcd 集…

Kanna库

LuaHTTP是一个用于发送HTTP请求的Lua库&#xff0c;它提供了简单且易于使用的接口。您可以使用LuaHTTP库发送GET、POST、PUT、DELETE等类型的HTTP请求&#xff0c;并处理响应。 以下是LuaHTTP库的一个示例用法&#xff1a; local http require(“socket.http”) local respo…

wscat

wscat 是一个用于 WebSocket 通信测试的命令行工具 安装wscat flynnsinflynnsin:~$ sudo npm install -g wscat loadDep:ws → afterAdd ▄ ╢████████████████████████████████████░░░░░░░░░░░░░░░░░░░░░░░…

挑战100天 AI In LeetCode Day02(1)

挑战100天 AI In LeetCode Day02&#xff08;1&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-32.1 题目2.2 题解 三、面试经典 150 题-33.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&#xff0c;面向程序…

【Java】封装、继承、多态

面向对象的重要特征&#xff1a;封装、继承、多态&#xff1b; 面向对象的语言的语言并不止Java&#xff0c;C也是面向对象的语言&#xff1b; 访问限定符 public&#xff1a;在哪里都可以使用&#xff08;公开的&#xff09;&#xff1b;private&#xff1a;仅在当前类可以使用…

Turtle绘制五角星-第10届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第4讲。 Turtle绘制五角星&…

【扩散模型】5、Diffusion models beat GAN | 使用类别引导图像生成

论文&#xff1a;Diffusion models beat GAN on image Synthesis 代码&#xff1a;https://github.com/openai/guided-diffusion 出处&#xff1a;OPENAI | NIPS2021 时间&#xff1a;2021 贡献&#xff1a; 在本文章之前&#xff0c;扩散模型生成的图片已经非常逼真了&am…

同样是巡检,巡检系统在不同行业运用大不同

随着智能巡检系统使用的扩大&#xff0c;巡检管理系统越来越被人们认可使用与喜爱&#xff0c;尚未使用的也都在准备的路上了&#xff0c;然而如何选择还是有些模糊的。今天我们就一起看下智能巡检系统在不同行业是如何运用的。 写在前面知识普及&#xff0c;为了长远发展的需…

07_es分布式搜索引擎3

一、数据聚合 1.聚合的分类 ①聚合可以对文档数据的统计&#xff0c;分析&#xff0c;运算 ②聚合的分类 桶Bucket聚合&#xff1a;对文档按照字段分组度量Metric聚合:计算最大值&#xff0c;最小值&#xff0c;平均值管道pipeline聚合:以聚合的结果为基础聚合 ③聚合的类…