Redis-使用java代码操作Redis

Redis-使用java代码操作Redis_第1张图片

                                                    艳艳耶✌️:个人主页

                                                  个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》

                                                    ⛺️ 越努力 ,越幸运。

 

1、Java连接Redis

Redis与MySQL都是数据库,java操作redis其实跟操作mysql的过程是一样的。

1.1 导入依赖

打开IDEA,进入Java项目,导入pom依赖,代码如下:


    redis.clients
    jedis
    2.9.0

1.2 Redis服务器准备

导入依赖后,找到redis.bat双击启动redis(时常忘记文件位置的可以新开快捷方式置于桌面),如下:

Redis-使用java代码操作Redis_第2张图片

1.3 建立连接

在java项目包下,新建一个名为redis的Package用来存放建立链接的java代码,如下:

Redis-使用java代码操作Redis_第3张图片

 在redis包下,新建java类,并添加以下代码,如下:

package redis;

import redis.clients.jedis.Jedis;

/**
 * @author 谌艳
 * @site www.shenyan.com
 * @create 2023-11-05 21:21
 */
public class Demo1 {
    public static void main(String[] args) {
//      建立链接
        Jedis jedis = new Jedis("localhost",6379);//IP地址+端口号
//      设置密码
        jedis.auth("123456");
//      测试链接是否成功
        System.out.println(jedis.ping());
//        ok
    }
}

然后启动Demo1方法,进行测试链接是否成功,效果如下:

Redis-使用java代码操作Redis_第4张图片

Redis-使用java代码操作Redis_第5张图片

2.Java操作Redis的常见类型数据存储

在进行存储数据前,我们先需要将Java链接上Redis,参考第一模块,如上。

链接上Redis之后,才可进行数据存储。

2.1 String(字符串)存取值操作

2.1.1 指定存储数据的数据库与存储入库操作

代码如下:

package redis;
import redis.clients.jedis.Jedis;

/**
 * @author 谌艳
 * @site www.shenyan.com
 * @create 2023-11-05 21:56
 */
public class Demo2 {
    public static void main(String[] args) {
//      建立链接
        Jedis jedis = new Jedis("localhost",6379);//IP地址+端口号
//      设置密码
        jedis.auth("123456");

//      String的操作
        jedis.select(1);//指定数据库
        jedis.set("yanyan","是个大美女");//往指定的数据库中添加数据
    }

}

效果如下:

Redis-使用java代码操作Redis_第6张图片

2.1.2 存储数据的修改与查询

添加以下代码:

jedis.set("yanyan","yanyan将原有数据修改了");//将原先存储的数据修改
        System.out.println(jedis.get("yanyan"));//查询

修改效果如下:

Redis-使用java代码操作Redis_第7张图片

Redis-使用java代码操作Redis_第8张图片

2.1.3 数据临时存储

在Demo2中加入以下代码:

jedis.setex("time",20,"设置过期时间为52秒");//为"time"键设置过期时间
System.out.println(jedis.ttl("time"));//获取键的剩余生存时间并且打印返回

效果展示:

Redis-使用java代码操作Redis_第9张图片

过期就没有了

Redis-使用java代码操作Redis_第10张图片

2.2 哈希数据结构存取值操作

案例:

  • 创建一个名为 "user" 的哈希表,并向其中添加三个字段:"name"、"hobby" 和 "age",并分别设置它们的值。
2.2.1 存值(新增与修改)
1. Jedis存值

新建Demo3

package redis;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author 谌艳
 * @site www.shenyan.com
 * @create 2023-11-05 22:13
 */
public class Demo3 {
    public static void main(String[] args) {
//      建立链接
        Jedis jedis = new Jedis("localhost",6379);//IP地址+端口号
//      设置密码
        jedis.auth("123456");

//      哈希数据结构的操作
//      哈希表是 Redis 中的一种数据结构,它允许你在一个键下存储多个字段和与这些字段相关联的值。
        jedis.select(1);//指定数据库
//      创建一个名为 "user" 的哈希表,并向其中添加三个字段:"name"、"hobby" 和 "age",并分别设置它们的值
        jedis.hset("user","name","艳艳耶");//姓名,将 "name" 字段设置为 "Kissship"
        jedis.hset("user","hobby","超级大美女");//爱好设置
        jedis.hset("user","age","18");//年龄设置


    }

}

效果图:

Redis-使用java代码操作Redis_第11张图片

2. 通过Map对象存值

以下是具体实现代码与逻辑详解:

Demo3:

   Map map = new HashMap();//创建一个名为map的HashMap对象,用于存储键值对数据
        map.put("name","炸鸡");//名字
        map.put("hobby","喜欢吃炸鸡");//爱好
        map.put("age","17");//年龄
        RedisUtils.setHashMap(jedis,"user",map);//调用自定义的工具类方法setHashMap,并传递

RedisUtils:

package redis;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.Map;

import java.util.Set;

public class RedisUtils {
        //通过Java中的Map对象进行数据存储
        public static void setHashMap(Jedis jedis, String Key, Map map) {
            //空值检查
            //首先检查传入的map对象是否为非空且包含至少一个键值对。如果map为空或不包含键值对,方法不会执行任何操作,直接返回。
            if (map != null && map.size() > 0) {
                //遍历Map并存储数据
                Set keys = map.keySet();//如果map不为空且包含键值对,方法会通过map.keySet()获取所有的键(字段名)。
                for (String k : keys) {//在循环中,对于每个键k,map.get(k)获取到对应的值(字段值)。
                    jedis.hset(Key,k,map.get(k));//将当前键值对存储到Redis
                }
            }
        }
    }

效果展示:

Redis-使用java代码操作Redis_第12张图片

2.2.2 取值(查询)
1. 获取哈希表中特定字段的值(单个查询)
  System.out.println(jedis.hget("user", "hobby"));//从名为"user"的哈希表中获取键为"hobby"的字段的值,并将其打印到控制台
2. 获取整个哈希表的内容(查询所有)
  System.out.println(jedis.hgetAll("user"));//获取名为"user"的哈希表中的所有字段和它们的值,然后将它们打印到控制台

Redis-使用java代码操作Redis_第13张图片

2.2.3 删除
1. 删除特定字段(单个属性删除)
Long hdel = jedis.hdel("user","age");//删除名为"user"的哈希表中的特定字段"age"及其中的值

单个删除代码执行效果如下:

Redis-使用java代码操作Redis_第14张图片

2. 删除哈希表(删除所有)
jedis.del("user");//删除名为"user"的键以及与之相关的哈希表

删除所有代码执行效果如下:

user的哈希表已经删除成功了

Redis-使用java代码操作Redis_第15张图片

3.Redis中项目的应用


Redis(Remote Dictionary Server)是一个开源的内存数据库系统,它以键值对的形式存储数据,具有高效的读写速度,特别适合于缓存和实时数据处理等场景。以下是 Redis 在不同项目中的一些常见应用:

缓存系统:

Redis 最常见的用途之一是作为缓存系统。它可以存储热门或频繁访问的数据,从而加快读取速度,减轻后端数据库的负担。这对于网站、应用程序和服务的性能优化非常重要。
会话存储:

Redis 可以用于存储会话信息,特别是在分布式系统中。通过将会话数据存储在 Redis 中,可以实现负载均衡、容错和扩展性,同时保证会话数据的快速访问。
消息队列:

Redis 的列表数据结构非常适合作为消息队列的基础。发布者可以将消息推送到列表中,而订阅者可以从列表中获取消息,从而实现异步通信、任务队列等功能。
实时分析和计数:

Redis 提供了各种数据结构(如 HyperLogLog、Bitmaps 等)和操作,可以用于实时分析和计数,例如统计网站的访问次数、用户在线状态等。
地理信息系统(Geospatial):

Redis 支持地理信息数据结构,可以用于存储位置坐标和距离计算。这使得 Redis 在构建位置服务和地理信息系统方面非常有用。
推荐系统:

Redis 可以用于构建推荐系统,通过存储用户喜好和商品信息,以及实时计算相似度等信息,从而为用户提供个性化的推荐。
实时分布式锁:

Redis 提供了基于 SETNX(set if not exists)命令和 Lua 脚本等方法,可以实现分布式系统中的实时锁定机制,用于协调多个节点的操作。
实时排行榜:

利用 Redis 的有序集合(Sorted Sets)结构,可以实现实时排行榜功能,例如游戏中的积分排名、热门商品排名等。
持久化和数据备份:

Redis 支持数据的持久化,可以将内存中的数据定期保存到磁盘上,以保证数据的安全性。这对于关键业务数据非常重要。
分布式锁与分布式限流:

Redis 提供了基于 Lua 脚本的原子操作,可以实现分布式锁和限流,保证在分布式环境下的数据一致性和流量控制。
请注意,虽然 Redis 提供了强大的功能,但也需要谨慎使用。例如,需要考虑数据的一致性、持久化策略、内存消耗等方面的问题。同时,Redis 是一个基于内存的数据库,因此需要足够的内存资源来支持。

Redis-使用java代码操作Redis_第16张图片

你可能感兴趣的:(redis)