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

简介: 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

目录
相关文章
|
5月前
|
安全 Java 编译器
Java类型提升与类型转换详解
本文详解Java中的类型提升与类型转换机制,涵盖类型提升规则、自动类型转换(隐式转换)和强制类型转换(显式转换)的使用场景与注意事项。内容包括类型提升在表达式运算中的作用、自动转换的类型兼容性规则,以及强制转换可能引发的数据丢失和运行时错误。同时提供多个代码示例,帮助理解byte、short、char等类型在运算时的自动提升行为,以及浮点数和整型之间的转换技巧。最后总结了类型转换的最佳实践,如避免不必要的转换、使用显式转换提高可读性、金融计算中使用BigDecimal等,帮助开发者写出更安全、高效的Java代码。
286 0
|
5月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
453 143
|
5月前
|
Java 测试技术
Java浮点类型详解:使用与区别
Java中的浮点类型主要包括float和double,它们在内存占用、精度范围和使用场景上有显著差异。float占用4字节,提供约6-7位有效数字;double占用8字节,提供约15-16位有效数字。float适合内存敏感或精度要求不高的场景,而double精度更高,是Java默认的浮点类型,推荐在大多数情况下使用。两者都存在精度限制,不能用于需要精确计算的金融领域。比较浮点数时应使用误差范围或BigDecimal类。科学计算和工程计算通常使用double,而金融计算应使用BigDecimal。
2119 102
|
3月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
116 7
|
4月前
|
存储 SQL NoSQL
Redis-常用语法以及java互联实践案例
本文详细介绍了Redis的数据结构、常用命令及其Java客户端的使用,涵盖String、Hash、List、Set、SortedSet等数据类型及操作,同时提供了Jedis和Spring Boot Data Redis的实战示例,帮助开发者快速掌握Redis在实际项目中的应用。
332 1
Redis-常用语法以及java互联实践案例
|
4月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
5月前
|
安全 算法 Java
Java泛型编程:类型安全与擦除机制
Java泛型详解:从基础语法到类型擦除机制,深入解析通配符与PECS原则,探讨运行时类型获取技巧及最佳实践,助你掌握泛型精髓,写出更安全、灵活的代码。
|
4月前
|
存储 消息中间件 缓存
Redis 简介:打造快速数据存储的利器
Redis 是一款开源的内存数据结构服务器,支持字符串、哈希、列表等多种数据结构,具备高性能、持久化、高可用及分布式特性,适用于缓存、会话管理、实时统计等场景。
|
7月前
|
缓存 监控 NoSQL
Redis 实操要点:Java 最新技术栈的实战解析
本文介绍了基于Spring Boot 3、Redis 7和Lettuce客户端的Redis高级应用实践。内容包括:1)现代Java项目集成Redis的配置方法;2)使用Redisson实现分布式可重入锁与公平锁;3)缓存模式解决方案,包括布隆过滤器防穿透和随机过期时间防雪崩;4)Redis数据结构的高级应用,如HyperLogLog统计UV和GeoHash处理地理位置。文章提供了详细的代码示例,涵盖Redis在分布式系统中的核心应用场景,特别适合需要处理高并发、分布式锁等问题的开发场景。
466 41
|
9月前
|
NoSQL Java API
在Java环境下如何进行Redis数据库的操作
总的来说,使用Jedis在Java环境下进行Redis数据库的操作,是一种简单而高效的方法。只需要几行代码,就可以实现复杂的数据操作。同时,Jedis的API设计得非常直观,即使是初学者,也可以快速上手。
387 94