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

目录

一、Java连接Redis

[1.1 导入pom依赖](#1.1 导入pom依赖)

[1.2 建立连接](#1.2 建立连接)

二、Java使用Redis

[2.1 字符串 String](#2.1 字符串 String)

[2.2 哈希 Hash](#2.2 哈希 Hash)

[2.3 列表 List](#2.3 列表 List)

[2.4 集合 Set](#2.4 集合 Set)

[2.4 有序集合 Sorted Set](#2.4 有序集合 Sorted Set)


一、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依赖

XML 复制代码
    <!--redis-->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>

1.2 建立连接

首先的启动redis,Linux版与windos版启动redis方式详情文章 http://t.csdnimg.cn/UBt3Z

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

java 复制代码
package text;

import redis.clients.jedis.Jedis;

/**
 * @author 云村小威
 * @create 2023-11-04 22:20
 */
public class demo1 {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        jedis.auth("123456");
        System.out.println(jedis.ping());
    }
}

二、Java使用Redis

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

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

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

2.1 字符串 String

java 复制代码
package text;

import redis.clients.jedis.Jedis;

/**
 * @author 云村小威
 * @create 2023-11-04 22:20
 */
public class demo1 {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        jedis.auth("123456");
        System.out.println(jedis.ping());

        //string:set get del sexex ttl
        jedis.select(3);//指定数据库
        //添加数据
        jedis.set("string_name", "云村小威");
        //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"));
    }
}

2.2 哈希 Hash

java 复制代码
        //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);

优化后:

java 复制代码
 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));
            }
        }
    }
java 复制代码
      Map map = new HashMap<>();
        map.put("name", "云村小威");
        map.put("sex", "男");
        map.put("age", "18");
        setHashMap(jedis, "user", map);

2.3 列表 List

java 复制代码
        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));

2.4 集合 Set

java 复制代码
        //sadd key value1 [value2]  向集合添加一个或多个元素
        jedis.sadd("set_user", "老六", "老五", "老七", "老八");
        //scard key   获取集合中的元素数量
        System.out.println(jedis.scard("set_user"));
        //exists key  是否存在
        System.out.println(jedis.exists("set_user"));

2.4 有序集合 Sorted Set

java 复制代码
        // -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
        jedis.zadd("mysort", 1.0, "飞鸟集");
        jedis.zadd("mysort", 2.0, "牧羊少年的奇幻之旅");
        jedis.zadd("mysort", 3.0, "皮囊");
        jedis.zadd("mysort", 4.0, "我与地坛");
        Map<String, Double> map = new HashMap<>();
        map.put("mutouliu", 5.0);
        jedis.zadd("mysort", map);
        //正序排列
        Set<String> mysort = jedis.zrange("mysort", 0, -1);
        System.out.println(mysort);
        //倒序排列
        Set<String> mysort1 = jedis.zrange("mysort", -1, 0);
        System.out.println(mysort1);

        //命令用于计算集合中元素的数量
        System.out.println(jedis.zcard("mysort"));
        //命令用于计算有序集合中指定分数区间的成员数量
        System.out.println(jedis.zcount("mysort", 0, 4));
        //命令在计算有序集合中指定字典区间内成员数量。
        System.out.println(jedis.zlexcount("mysort", "-", "+"));

相关推荐
麦香--老农17 分钟前
windows 钉钉缓存路径不能修改 默认C盘解决方案
缓存·钉钉
m0_7482448325 分钟前
StarRocks 排查单副本表
大数据·数据库·python
V+zmm1013429 分钟前
基于微信小程序的乡村政务服务系统springboot+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
C++忠实粉丝36 分钟前
Redis 介绍和安装
数据库·redis·缓存
wmd131643067121 小时前
将微信配置信息存到数据库并进行调用
数据库·微信
丰云1 小时前
一个简单封装的的nodejs缓存对象
缓存·node.js
Oneforlove_twoforjob1 小时前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存
xmh-sxh-13141 小时前
常用的缓存技术都有哪些
java
泰伦闲鱼1 小时前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs
是阿建吖!1 小时前
【Linux】基础IO(磁盘文件)
linux·服务器·数据库