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

news2024/11/28 4:52:07

目录

一、Java连接Redis

1.1 导入pom依赖

1.2 建立连接

二、Java使用Redis

2.1 字符串 String

2.2 哈希 Hash

2.3 列表 List

2.4 集合 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依赖

    <!--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

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

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

        //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);

优化后:

 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

        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

        //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 

        // -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", "-", "+"));

 

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

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

相关文章

C++性能优化笔记-6-C++元素的效率差异-7-类型转换

C元素的效率差异 类型转换signed与unsigned转换整数大小转换浮点精度转换整数到浮点转换浮点到整数转换指针类型转换重新解释对象的类型const_caststatic_castreinterpret_castdynamic_cast转换类对象 类型转换 在C语法中&#xff0c;有几种方式进行类型转换&#xff1a; // …

【每日一题】重复的DNA序列

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;哈希表方法二&#xff1a;哈希表滑动窗口位运算 写在最后 Tag 【哈希表】【位运算滑动窗口哈希表】【字符串】【2023-11-05】 题目来源 187. 重复的DNA序列 题目解读 找出字符串中重复出现的字符串。 解题思路 方法…

Android Gldie复用只取之前decode过的缓存resource,Kotlin

Android Gldie复用只取之前decode过的缓存resource&#xff0c;Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.life…

数据可视化:地图

1.基础地图的使用 如何添加颜色表示层级 代码实现 """基础地图的使用 """ from pyecharts.charts import Map from pyecharts.options import VisualMapOpts# 准备地图对象 map Map() # 准备数据 data [("北京市", 9),("上海市…

【漏洞复现】Apache_HTTP_2.4.49_路径穿越漏洞(CVE-2021-41773)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞验证方式一 curl方式二 bp抓包 说明内容漏洞编号CVE-2021-41773漏洞名称Apache HTTP 路径穿越漏洞漏…

Transformer:开源机器学习项目,上千种预训练模型 | 开源日报 No.66

huggingface/transformers Stars: 113.5k License: Apache-2.0 这个项目是一个名为 Transformers 的开源机器学习项目&#xff0c;它提供了数千种预训练模型&#xff0c;用于在文本、视觉和音频等不同领域执行任务。该项目主要功能包括&#xff1a; 文本处理&#xff1a;支持…

YOLOv5源码中的参数超详细解析(5)— 验证部分(val.py)参数解析

前言:Hello大家好,我是小哥谈。YOLOv5是一种先进的目标检测算法,它可以实现快速和准确的目标检测。在YOLOv5源码中,train.py和detect.py文件讲完了之后,接着就是讲val.py文件了。本节课就结合源码对val.py文件进行逐行解析~!🌈 前期回顾: YOLOv5源码中的参数超详细解…

对Java的多线程的理解

说说对Java线程的理解 下面是AI的回答 Java线程就是Java程序里面可以同时运行多个任务。Java提供了几种创建和管理线程的方式&#xff0c;其中一种是继承Thread类&#xff0c;另一种是实现Runnable接口或Callable接口。jdk5提供了线程池&#xff0c;可以更方便地创建、启动和终…

3BHE022291R0101 PCD230A 专注于制造卓越人工智能

3BHE022291R0101 PCD230A 专注于制造卓越人工智能 BISTelligence是BISTel的一个分支&#xff0c;BISTel是为全球半导体和FPD制造商提供工程和软件自动化产品的领先供应商。半导体产品集团上个月被卖给了新思科技。在出售给Synopsys之后&#xff0c;Bisetlliegnce成立了两个部门…

面试—如何介绍项目中的多级缓存?

项目中使用的多级缓存也就是 分布式缓存 Redis 本地缓存 Caffeine&#xff0c;那么令 Caffeine 作为一级缓存&#xff0c;Redis 作为二级缓存&#xff0c;在项目中通过记录数据的访问次数&#xff0c;将热点数据放在 本地缓存&#xff0c;将非热点数据放在 Redis缓存 中&#…

生成式人工智能:网络攻击者手中的破坏性力量

2022 年底&#xff0c;公开可用的生成式人工智能工具的推出使我们进入了人类历史上最大的技术革命之一。 一些人声称它的影响与互联网、手机、智能手机和社交媒体的引入一样大&#xff0c;甚至更大。这些新的生成式人工智能技术的采用和发展速度是我们以前从未见过的。 虽然这…

【实战Flask API项目指南】之四 请求和响应处理

实战Flask API项目指南之 请求和响应处理 本系列文章将带你深入探索实战Flask API项目指南&#xff0c;通过跟随小菜的学习之旅&#xff0c;你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧&#xff01; 前言 当小菜踏入Flask后端开发的世界时&…

实证论文复刻|stata安慰剂检验

文章及代码来源&#xff1a;中国工业经济《税收征管数字化与企业内部薪酬差距》 目录 随机抽取对照组和实验组 随机设定政策时点 先po完整代码 *随机抽取对照组和控制组 forvalue i1/500{sysuse 数据1.dta, clear g obs_id _n //初始样本序号gen random_digit runiform() /…

读程序员的制胜技笔记04_有用的反模式(下)

1. 重新发明轮子 1.1. 发明家的特质就是要用质疑的心态对待所有事物&#xff0c;你从未停下质疑&#xff0c;那你将不可避免地成为一个发明家 1.2. 并非所有的事情都有现成的轮子可以拿来用 1.3. 自己重新写一个新的API&#xff0c;最终调用你使用的库 1.3.1. 你的API应该是…

C++二分查找算法的应用:最小好进制

本文涉及的基础知识点 二分查找 题目 以字符串的形式给出 n , 以字符串的形式返回 n 的最小 好进制 。 如果 n 的 k(k>2) 进制数的所有数位全为1&#xff0c;则称 k(k>2) 是 n 的一个 好进制 。 示例 1&#xff1a; 输入&#xff1a;n “13” 输出&#xff1a;“3” …

Canvas制作喷泉效果示例

Canvas能制作出很多动画效果&#xff0c;下面是一个制作喷泉效果的示例 效果图 源代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <meta name"viewport" content"widthdevice-width, initial-scale1 ,user-…

Kubernetes技术与架构-存储 3

如上所示&#xff0c;Kubernetes集群的存储层支持不同类型的存储资源&#xff0c;其提供Projected类型的存储功能整合多种存储资源&#xff0c;将secret、downwardAPI、configMap三种不同类型的存储资源整合成一个挂载到Pod的容器实例中 如上所示&#xff0c;整合两个secret类型…

给跪!我居然被封了!

起因 前两天不知道什么情况&#xff0c;突然收到一条违规信息&#xff0c;说我营销过度&#xff1f;&#xff1f;&#xff1f; 当时一看这个立马有点慌&#xff0c;我的Python爬虫群&#xff0c;付费社群等等不是都受到影响了&#xff1f; 啥我这个号朋友圈啥的都没发&#xff…

ChatGPT 的 Text Completion

该章节我们来学习一下 “Text Completion” &#xff0c;也就是 “文本完成” 。“Text Completion” 并不是一种模型&#xff0c;而是指模型能够根据上下文自动完成缺失的文本部分&#xff0c;生成完整的文本。 ⭐ Text Completion 的介绍 Text Completion 也称为文本自动补全…

项目管理之如何估算项目工作成本

在项目管理中&#xff0c;如何估算项目工作成本是一个关键问题。为了解决这个问题&#xff0c;我们可以采用自上而下的成本限额估算法和自下而上的成本汇总估算法。这两种方法各有优缺点&#xff0c;但都可以帮助我们准确地估算项目工作成本。 自上而下的成本限额估算法 自上…