Java操作redis常见类型数据存储

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Java操作redis常见类型数据存储

一、Java连接Redis


       redis与mysq都是数据库,java操作redis其实跟操作mysql的过程是差不多的,首先都是导入依赖、建立连接,只是方式不同,redis是非关系数据库而mysql是关系数据库。

什么是关系数据库与非关系数据库?

       关系数据库 是一种基于关系模型的数据库系统,其中数据以表格形式组织,并使用 SQL(Structured Query Language)进行查询和管理。在关系数据库中,数据由多个表格组成,每个表格包含多个行和列,每行代表一个记录,每列代表一个属性。关系数据库中的表格之间可以建立关系,通过这些关系可以实现数据的联合查询和更新。关系数据库最常见的例子是MySQL、Oracle和SQL Server等。

非关系数据库(NoSQL)是相对于传统的关系数据库而言的,它采用了非关系数据模型来存储和处理数据。非关系数据库通常不使用表格,而是使用其他形式的数据结构,例如键值对、文档、图形等,以便更好地处理大量非结构化数据。NoSQL数据库通常具有较高的可扩展性、灵活性和性能,并且能够处理复杂的数据处理任务。非关系数据库最常见的例子是MongoDB、Cassandra和Redis等。


1.1 导入pom依赖

在maven项目中导入redis依赖

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


1.2 建立连接

首先的启动redis,Linux版与windos版启动redis方式详情文章在上一篇

本次为了方便就使用了本机进行测试使用redis

package com.liwen.test;
import redis.clients.jedis.Jedis;
/**
 * @ 用户  liwen
 * @当前日期 2023/11/5
 * @当前项目名称 SpringMvc-crud
 */
public class demo1 {
    public static void main(String[] args) {
//        建立redis数据库连接
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.auth("123456");
        System.out.println(jedis.ping());
    }
}


604cf57e635147048d750e7d5c959ee5.png


二、Java使用Redis


   Redis支持五种基本的数据类型:字符串(string),哈希(hash),列表(list),集合(set)和有序集合(sorted set,也被称为zset)。这些数据类型在数据库中都以key-value的形式保存,所有的key都是字符串类型的。

   具体来说,Redis的字符串是二进制安全的,这意味着他们可以包含任何数据,比如图片或者JSON。哈希是一个键值对的集合,适合用于存储对象。列表是简单的字符串列表,按插入顺序排序,适用于队列和栈等场景。集合是一个无序的字符串集合,用于存储不重复的数据。有序集合和集合类似,但每个元素都关联了一个分数,根据这个分数进行排序,适用于排行榜等场景。

此外,从Redis 5.0.5版本开始,还增加了两种数据类型:位图和地理位置。位图是一种压缩的字符串表示形式,可以节省空间;地理位置则用于存储地理坐标信息。


2.1 字符串 String

package com.liwen.test;
import redis.clients.jedis.Jedis;
/**
 * @ 用户  liwen
 * @当前日期 2023/11/5
 * @当前项目名称 SpringMvc-crud
 */
public class demo1 {
    public static void main(String[] args) {
//        建立redis数据库连接
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.auth("123456");
        System.out.println(jedis.ping());
        //string:set get del sexex ttl
        jedis.select(3);//指定数据库
        //添加数据
        jedis.set("string_name", "Java文昊");
        //get key 获取
        System.out.println(jedis.get("string_name"));
        //type key 查看类型
        System.out.println(jedis.type("string_name"));
        //keys * 或 keys key 查看所有或者指定的key
        System.out.println(jedis.keys("*"));
        //SETEX KEY_NAME TIMEOUT VALUE    给键值对设置过期时间
        jedis.setex("string_test", 100, "ready");
        //ttl key 获取键值对剩余的存活时间
        System.out.println(jedis.ttl("string_test"));
    }
}


94cfca6e058c435ba644956bb67c125d.png


2.2 哈希 Hash

package com.liwen.test;
import redis.clients.jedis.Jedis;
import java.util.Map;
/**
 * @ 用户  liwen
 * @当前日期 2023/11/6
 * @当前项目名称 SpringMvc-crud
 */
public class demo {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.auth("123456");
        System.out.println(jedis.ping());
        //Hash
        jedis.select(4);//指定数据库
        //hset key field1 value1 [field2 value2]  同时将多个field-value设置到哈希表key中
        jedis.hset("hash_user", "name", "李文昊");
        jedis.hset("hash_user", "sex", "男");
        jedis.hset("hash_user", "age", "18");
        //hget key field   获取指定的字段值
        System.out.println(jedis.hget("hash_user", "sex"));
        //hdel key field   删除指定的字段值
        jedis.hdel("hash_user", "sex");
        //hgetall key   查询指定key的所有字段
        Map<String, String> hash_user_map = jedis.hgetAll("hash_user");
        System.out.println(hash_user_map);
        //hexists key field   查询指定key中的字段是否存在
        Boolean hash_user = jedis.hexists("hash_user", "sex");
        System.out.println(hash_user);
        //hlen key   获取指定key中的长度
        Long hash_user_len = jedis.hlen("hash_user");
        System.out.println(hash_user_len);
    }
}


ef8b85d128ed460e9a37070ecf106a1a.png

优化一下

 public 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));
            }
        }
    }


调用方法

      Map map = new HashMap<>();
        map.put("name", "李文昊");
        map.put("sex", "男");
        map.put("age", "18");
        setHashMap(jedis, "user", map);


2.3 列表 List

package com.liwen.test;
import redis.clients.jedis.Jedis;
/**
 * @ 用户  liwen
 * @当前日期 2023/11/6
 * @当前项目名称 SpringMvc-crud
 */
public class demo3 {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.auth("123456");
        System.out.println(jedis.ping());
        jedis.select(4);//指定数据库
        //lpush key value1 value2 value3   将一个或多个值插入到列表头部
        jedis.lpush("List_hobby", "sing", "jump", "rap", "basketball");
        //llen key    获取列表的长度
        System.out.println(jedis.llen("List_hobby"));
        //lindex key index   根据索引获取列表中的元素
        System.out.println(jedis.lindex("List_hobby", 2));
        //lrange key start sop   查看指定范围内的元素
        System.out.println(jedis.lrange("List_hobby", 0, 3));
    }
}


2fb99b01f1df45139b3629c24026ed10.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
18天前
|
存储 Java 开发者
Java 中 Set 类型的使用方法
【10月更文挑战第30天】Java中的`Set`类型提供了丰富的操作方法来处理不重复的元素集合,开发者可以根据具体的需求选择合适的`Set`实现类,并灵活运用各种方法来实现对集合的操作和处理。
|
15天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
31 1
|
18天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
38 2
|
21天前
|
存储 NoSQL PHP
PHP与Redis结合使用,提升数据存储性能
随着互联网应用的发展,PHP与Redis的结合成为提升数据存储性能的重要手段。PHP作为流行的服务器端语言,常用于网站开发;Redis作为高性能内存数据库,以其快速读写能力,有效优化数据访问速度,减轻数据库压力。两者结合通过缓存机制显著提升应用响应速度,支持高并发场景下的稳定性和可扩展性。
|
26天前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
1月前
|
消息中间件 存储 监控
redis 的List类型 实现 排行榜
【10月更文挑战第8天】
37 2
|
1月前
|
存储 NoSQL Redis
redis-set类型
【10月更文挑战第6天】
44 1
|
1月前
|
Java 编译器
Java“返回类型为 void 的方法不能返回一个值”解决
在 Java 中,如果一个方法的返回类型被声明为 void,那么该方法不应该包含返回值的语句。如果尝试从这样的方法中返回一个值,编译器将报错。解决办法是移除返回值语句或更改方法的返回类型。
|
1月前
|
设计模式 Java
Java“不能转换的类型”解决
在Java编程中,“不能转换的类型”错误通常出现在尝试将一个对象强制转换为不兼容的类型时。解决此问题的方法包括确保类型间存在继承关系、使用泛型或适当的设计模式来避免不安全的类型转换。
|
1月前
|
Java
Java 中锁的主要类型
【10月更文挑战第10天】
下一篇
无影云桌面