java中redis的使用(包含单个redis和分布式多个redis)以及redis的几种数据类型介绍

redis的五种数据类型 (1)Redis(Remote Dictionary Server 远程字段服务)是一个开源的使用ANSI C语言编写、支持网络、科技与内存亦可持久化的日志型、key-value数据库,并提供多种语言的API。(2)Redis是一个key-value存储系统,它支持存储的value类型相对更多,包括string、list、set、zset(sorted set --有序集合)和hash。这些数据结构都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。 阅读详情

redis:非关系型数据库,以key-value的形式存储数据,功能之一是做缓存功能。

首先是单个redis在java中的使用。

  //redis连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        //在指定时刻通过pool能够获取到的最大的连接的jedis个数,默认8
        config.setMaxTotal(8);
        // 最大能够保持idle的数量,控制一个pool最多有多少个状态为idle的jedis实例,默认8
        config.setMaxIdle(8);
        // 在容器中的最小的闲置连接数,默认0
        config.setMinIdle(0);
        // 当连接池内的连接耗尽时,getBlockWhenExhausted为true时,连接会阻塞,
        // 超过了阻塞的时间(设定的maxWaitMillis,单位毫秒)时会报错
        //默认-1
        config.setMaxWaitMillis(1000);
        //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;默认是false
        config.setTestOnBorrow(true);
        //testWhileIdle:如果为true,表示有一个idle object evitor线程对idle object进行扫描,
        // 如果validate失败,此object会被从pool中drop掉;
        // 这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;默认是false
        config.setTestWhileIdle(false);
        //timeBetweenEvictionRunsMillis:表示idle object evitor两次扫描之间要sleep的毫秒数,逐出扫描的时间间隔(毫秒),
        // 如果为负数,则不运行逐出线程,默认为-1
        config.setTimeBetweenEvictionRunsMillis(-1);
        //通过连接池获取redis对象,并设置ip 端口 过期时间 密码 默认库的实例
        JedisPool jdpool = new JedisPool(config, "127.0.0.1", 6379, 10000, null, 0);
        Jedis jedis = jdpool.getResource();
        //向redis中写入数据
        jedis.set("test", "test1");
        //关闭连接
        jedis.close();

代码很短,通过连接池获取redis对象,然后操作redis数据库。

但是想在很多分布式项目需要部署在多台机器上。这时候一个redis服务就不够了。所以需要用到ShardeJedis对象。

redis分布式。

        //两个JedisShardInfo对象,分别填入两个redis服务的连接信息,然后放入一个list中
        JedisShardInfo jedisShardInfo1 = new JedisShardInfo("127.0.0.1", 6379, 5000);
        jedisShardInfo1.setPassword("123");
        JedisShardInfo jedisShardInfo2 = new JedisShardInfo("127.0.0.2", 6379, 5000);
        jedisShardInfo2.setPassword("456");
        List<JedisShardInfo> infos = Arrays.asList(jedisShardInfo1, jedisShardInfo2);
        //连接池配置信息
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(600);
        config.setMaxIdle(300);
        config.setMaxWaitMillis(1000);
        config.setTestOnBorrow(true);
        //从连接池获取redis对象
        ShardedJedisPool shardedJedisPool = new ShardedJedisPool(config, infos);
        ShardedJedis shardedJedis = shardedJedisPool.getResource();
        //操作redis数据库
        shardedJedis.set("test", "aaaa");

这里我们在连接池中放入了两个JedisShardInfo,所以当你把数据存入缓存的时候数据会进入两个redis中的其中一个。至于会进入哪一个,它会根据key来进行判定,你也可以在初始化pool的时候用参数keyTagPattern来指定。redis自带一个pattern

DEFAULT_KEY_TAG_PATTERN = Pattern.compile("\\{(.+?)\\}");

注意:

jedis和shardedJedis都是redis对象,可以对redis进行操作,但是shardedJedis不支持对多个key进行操作。例如如果想要在所有key中进行模糊搜索就不行。

 

redis语法

redis是以key-value的形式存储数据的,其中value的类型分为string,hash,list,set(集合),sorted set(有序集合)

1.string

set key value(设置指定 key 的值)

get key(获取指定 key 的值)

mget key1 key2 key3(所有(一个或多个)给定 key 的值,如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil )

append key value(如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾)

2.hash(Redis hash (java中的map),是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis中每个 hash 可以存储 232 - 1 键值对(40多亿))

hget key field(查看哈希表 key 中,指定的字段是否存在)

hset key field value(将哈希表 key 中的字段 field 的值设为 value)

hgetall(获取在哈希表中指定 key 的所有字段和值)

3.list(Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素))

llen key(获取列表长度)

lpush key value1 value2(将一个或多个值插入到列表头部)

rpush key value1 value2(将一个或多个值插入到列表尾部)

lrange key start stop(获取列表指定范围内的元素start,stop可以为正数和负数,正数代表第几个元素,负数代表倒数第几个元素)

4.set(Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员))

sadd key member1 member2(向集合添加一个或多个成员)

scard key (获取集合的成员数)

srem key member1 member2(移除集合中一个或多个成员)

5.sorted set(Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员))

zadd key score1 member1 score2 member2(向有序集合添加一个或多个成员,或者更新已存在成员的分数)

zcared key(获取有序集合的成员数)

zrem key member1 member2(移除有序集合中的一个或多个成员)

以上5中类型的存储方式,我们常用到的是前三种,对于这三种数据的使用场景,我的理解是

当需要记录的数据不需要进行增减并且不会修改的时候可以转为byte用string存储

当需要存储数据集合并且集合的数量会增减但是集合里单个元素不会修改的时候可以用list或set

当需要储存对象并且对象的属性需要修改,可以用hash

在上面列出的语法是比较常用的几个,其实还有很多语法没有写出来,大家可以自己去了解,推荐一下我经常浏览的网站http://www.runoob.com/redis/redis-keys.html

之所以要看这些语法,是因为在java中使用redis的方法名和redis的语法完全一样

例如:

redis.set()

redis.get()

redis.lpush()

redis.rpush()

最后,在文章一开始贴出的示例代码,其实可以进行封装工具类,或者通过spring bean的形式注入,所有的配置信息参数在properties文件中灵活配置。方法很多,就不详细说明了。

 

 

 

Java 中使用 Redis 的几种方式优缺点对比 Redis 是一个高性能的键值对存储系统,广泛用于缓存、消息队列、分布式锁等场景。在 Java 开发中,集成 Redis 是提升应用性能和扩展性的常用方式。随着 Redis 客户端和技术栈的不断发展,开发者可以通过多种方式在 Java 中使用 Redis。本文将详细介绍几种常见的 Redis 集成方式,分析其优缺点,帮助开发者选择适合自己项目的实现方式。 阅读详情

相关推荐

java检测redis是否可用的方法示例

主要给大家介绍了关于java检测redis是否可用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

Redis--------Java Redis存储对象列表

需要注意的是,Java序列化不是最优的序列化方式,因为它会产生较大的对象存储和传输负担。另外,如果使用Jackson等JSON序列化库,我们可以将对象列表序列化为JSON格式,具有更好的可读性和可测试性。Java Redis可以使用Java序列化的方式存储对象列表。

LJH_java10086的博客 1656

Ubuntu 22.04 LTS下Xenomai 3.3实时内核配置全攻略(附常见错误排查)

本文详细介绍了在Ubuntu 22.04 LTS系统上配置Xenomai 3.3实时内核的完整流程,包括环境准备、内核补丁应用、编译优化及常见错误排查。特别针对工业自动化和机器人控制场景,提供了性能优化建议和故障解决方案,帮助开发者实现毫秒级精度的实时任务处理。

weixin_29268385的博客 463

搭建一个redis高可用系统

一、单个实例 当系统中只有一台redis运行时,一旦该redis挂了,会导致整个系统无法运行。 单个实例 二、备份 由于单台redis出现单点故障,就...

一个有趣、有料、有内涵的地方! 132

LVGL项目内存告急?试试把中文字库放到SD卡里(基于LvglFontTool V0.5)

本文详细介绍了在LVGL嵌入式项目中如何通过将中文字库存储到SD卡来优化内存使用。针对Flash资源有限的MCU,如STM32F103,提供了基于LvglFontTool V0.5的外部字库生成与动态加载方案,适用于多字号、多语言及OTA场景,显著减少固件体积并提升显示灵活性。

weixin_33726318的博客 456

光度立体三维重建——光源标定

光源标定的目的是为了确定光源方向或强度,一般利用物体表面的明暗信息、阴影信息或者反射特性三类信息中的其中一种即可,也可以将三种信息结合。采用不同标定物,是利用不同标定物的反射特性获取更加精确的光源信息。

wfengzi5的博客 1560

redis存储对象的方法

一,redis没有直接存储对象的方法,不过redis要以存储字节,所以可以先把对象自己写的一个序列化和反序列化的方法。 package com.gametech.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; i

王广帅--游戏开发-服务器开发 9322

aubo i5 + realsense D435i识别抓取实践二

aubo i5 + realsense D435i识别抓取实践二前言一、手眼标定是什么?二、标定软件安装1.aruco_ros安装2.vision_visp安装3.easy_handeye安装4.realsense驱动安装5.安装realsense ROS软件包三、配置1.launch文件修改2.打印二维码四、手眼标定1.启动launch文件2.标定步骤3.发布tf关系 前言 前面配置好了aubo机械臂的ROS软件包,机械臂可以正常运行后,接下来我们进行机械臂与相机的手眼标定。手眼标定分为eye_on_ha

转角 6373

Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)

Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 2012-08-01 14:51:44 来源:开发界 作者:admin 栏目:Redis 责任编辑:redis 打印文章 加入开发界收藏 [导读]Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)在Jedis开发中,我们很多时候希望直接把一个对象放到Redis...

zhrglchp的专栏 438

Android存储空间不足下,APP出现奔溃等情况

版权声明:本文为博主原创文章,未经博主允许不得转载。 1. 问题起因     实时录制视频,使用getExternalCacheDir()函数返回的路径作为文件缓存区 2. 问题产生     系统在空间不足的情况下第一清除getExternalCacheDir和getCache文件下的缓存,导致正在录制的视频出现Error。 3. 解决方案     第一

OverseasAndroid的博客 4159

医疗影像处理实战:如何用Slicer和Mimics将.nii.gz文件转为.ply格式(附避坑指南)

本文详细介绍了利用3D Slicer和Materialise Mimics软件,将医学影像中常见的.nii.gz格式文件转换为通用三维网格.ply格式的完整实战流程。文章重点分享了从数据分割、DICOM序列导出到高质量网格生成的核心步骤与关键参数设置,并提供了针对常见问题的避坑指南,旨在帮助医学影像研究者和工程师高效完成从体数据到三维模型的关键转换。

weixin_28304023的博客 102

jedis 读写分离_redis读写分离及可用性设计

/*** 初始化切片池*/private static void initialShardedPool() throwsException {long start =System.nanoTime();IRedisBaseSV sv= (IRedisBaseSV) ServiceFactory.getService(IRedisBaseSV.class);//初始化JedisPoolConfigC...

weixin_32115711的博客 190

STM32Cube高效开发教程<基础篇>(一)----概述

一、 STM32系列器件和开发工具发展历史声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、 STM32系列器件和开发工具发展历史。

我的博客 1171

redis java 获取数据类型_java中redis的使用(包含单个redis和分布式多个redis)以及redis的几种数据类型介绍...

redis:非关系型数据库,以key-value的形式存储数据,功能之一是做缓存功能。首先是单个redis在java中的使用。//redis连接池配置对象JedisPoolConfig config = new JedisPoolConfig();//在指定时刻通过pool能够获取到的最大的连接的jedis个数,默认8config.setMaxTotal(8);// 最大能够保持idle的数量,控...

weixin_34270705的博客 634

从原理到落地:Mamba-YOLOv8 全面实战指南(源码 + 训练 + 部署一次学会)

在目标检测领域,CNN与Transformer的较量从未停歇。本文提出一种革命性的架构——,将状态空间模型(SSM)首次引入YOLO框架。实验表明,该模型在COCO数据集上达到54.3% mAP@0.5,推理速度达89 FPS(RTX 4090),相比原版YOLOv8提升12.7%精度与23%速度。本文将完整揭示其技术原理与工程实现,助您掌握这一前沿技术。

FJN110的博客 119

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Redis redis五种数据类型和使用场景

一、redis基本基本介绍 1、 redis解决分布式环境下缓存不同步 让缓存集中处理(大家使用同一个缓存服务),我们需要一个类似于MYSQL这样可以通过服务来提供第三方的缓存工具(缓存服务器);流行的第三方缓存服务器:memcache/redis 2、REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统(...

m0_38068812的博客 8677

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Redis的数据类型介绍

​ 【1】键不能重复​ 【2】作用:标识存储的数据​ 【3】数据类型:string​ 【4】命名规则:​ 1)不能太长:因为查询的效率低,查询起来不方便​ 2)不能太短:容易重复,同时可读性也差​ 3)按照规范:HEIMA_STU_LIST**值(value):**支持5种数据类型值的数据类型值的格式说明string字符串类型,类似于Java中Stringhash由键值对组成,类似于Java中Maplist列表类型,类似于Java中List,元素是存取有序,可以重复。

几许的博客 2483

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

单个Redis和分布式Redis连接池的区别(重点)

1、单个Redis连接池 package com.mmall.common; import com.mmall.util.PropertiesUtil; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; pub...

Richard_666的博客 648

Redis实现分布式锁的几种方式

​众所周知,项目开发中难免会遇到高并发场景,而保证数据安全则成为其中的重中之重.。

weixin_45936627的博客 2555

SpringBoot使用Redis实现分布式缓存

springboot使用Redis实现分布式缓存 Redis实现主从复制 Redis集群的构建

不迁怒,不贰过。小知识,大智慧。 4585

Java使用Redis的详细教程

Redis是一个基于内存的key-value结构数据库,即非关系型数据库,具有高性能、丰富的数据类型、持久化、高可用性和分布式等特点。在Java项目中,Redis通常用于缓存、分布式锁、计数器、消息队列和排行榜等场景。

weixin_73060959的博客 3228

【分布式】Redis分布式缓存

本文介绍了什么是Redis分布式缓存,它的特点,多种实现方式区别,主从复制模式详解,cluster模式详解,具体使用等

qq_44845473的博客 3071

Redis的数据类型及如何在Java中操作Redis,配置连接池

Redis的数据类型(面试常考)及如何在Java中操作Redis,配置连接池(好处)

weixin_63233905的博客 2366

Java分布式篇4——Redis

Java分布式篇4——Redis 1、互联网架构的演变历程 1.1、第一阶段 数据访问量不大,简单的架构即可搞定! 1.2、第二阶段 数据访问量大,使用缓存技术来缓解数据库的压力 不同的业务访问不同的数据库 1.3、第三阶段 主从读写分离。 之前的缓存确实能够缓解数据库的压力,但是写和读都集中在一个数据库上,压力又来了,一个数据库负责写,一个数据库负责读,分工合作,让master(主数据库)来响应事务性(增删改)操作,让slave(从数据库)来响应非事务性 (查询)操作,然后再采用主从复制来把ma

gyfghh的博客 4145

SpringBoot+Redis实现分布式WebSocket

在分布式系统架构中实现WebSocket的通信机制,它允许在不同的服务器节点之间共享和同步WebSocket会话状态,从而实现跨多个服务器的实时消息传递。会话共享:在分布式系统中,用户的WebSocket连接可能与不同的服务器建立,这就要求系统能够在不同服务器间共享WebSocket会话信息,以便消息能够被正确地传递到所有相关的客户端。负载均衡:使用负载均衡可以提高系统的可用性和伸缩性。

★【World Of Moshow 郑锴】★ 7149

Redis几种数据类型的使用笔记

关于Redis我们先要问:什么是Redis?个人认为它是一种key - value 存储系统。

MADAO的博客 1024
上一篇: Maven中的GroupID和ArtifactID什么意思
下一篇: java poi导出大批量数据excel
KK~
KK~
博客等级 码龄9年 28粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值