java中使用redis

1、redis数据类型

1.1、5种数据类型

redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:字符串 string、哈希 hash、列表 list、集合 set、有序集合 sorted set / zset。

字符串(string):普通字符串,Redis中最简单的数据类型。哈希(hash):也叫散列,类似于Java中的HashMap结构。列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList。集合(set):无序集合,没有重复元素,类似于Java中的HashSet。有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素
字符串类型操作指令开头一般为s开头(SET 、GET、SETEX 、SETNX )哈希操作命令操作指令开头一般为h开头(HSET ​​​​​​​、HGET ​​​​​​​、HDEL ​​​​​​​、HKEYS ​​​​​​​、HVALS )列表操作命令指令开头一般为l开头(LPUSH ​​​​​​​、LRANGE ​​​​​​​、RPOP ​​​​​​​、LLEN ​​​​​​​、BRPOP )集合操作命令指令开头一般为s开头(SADD 、SMEMBERS ​​​​​​​、SCARD ​​​​​​​、SINTER 、SUNION ​​​​​​​、SREM )有序集合操作命令指令开头一般为z开头(ZADD ​​​​​​​、ZRANGE ​​​​​​​、ZINCRBY ​​​​​​​、ZREM )

1.2、字符串操作命令

SET key value 设置指定key的值

GET key 获取指定key的值

SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒

100秒之后它会自动销毁

SETNX key value 只有在 key 不存在时设置 key 的值

 

1.3、哈希操作命令 

redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象

HSET key field value 将哈希表 key 中的字段 field 的值设为 value

HGET key field 获取存储在哈希表中指定字段的值

HDEL key field 删除存储在哈希表中的指定字段

 

HKEYS key 获取哈希表中所有字段

HVALS key 获取哈希表中所有值

 

1.4、列表操作命令 

redis 列表是简单的字符串列表,按照插入顺序排序 

LPUSH key value1 [value2] 将一个或多个值插入到列表头部

LRANGE key start stop 获取列表指定范围内的元素

 

RPOP key 移除并获取列表最后一个元素

 

1.5、集合操作命令 

redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据

SADD key member1 [member2] 向集合添加一个或多个成员

SMEMBERS key 返回集合中的所有成员

 

SCARD key 获取集合的成员数

SINTER key1 [key2] 返回给定所有集合的交集

SUNION key1 [key2] 返回所有给定集合的并集

SREM key member1 [member2] 移除集合中一个或多个成员

 

1.6、有序集合操作命令

redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数,根据分数来进行排序

ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员

ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员

ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment

 

ZREM key member [member ...] 移除有序集合中的一个或多个成员

 

1.7、通用命令 

KEYS pattern 查找所有符合给定模式(pattern)的 key

EXISTS key 检查给定 key 是否存在

 

TYPE key 返回 key 所储存的值的类型

 

DEL key 该命令用于在 key 存在是删除 key

 

2、java中使用redis

2.1、引入maven依赖

 pom.xml

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

RedisTemplate,对相关api进行了归类封装,将同一类型操作封装为operation接口,分类如下:

  • ValueOperations: string数据操作
  • SetOperations:    set类型数据操作
  • ZSetOperations:  zset类型数据操作
  • HashOperations: hash类型的数据操作
  • ListOperations:    list类型的数据操作

 application.yml中 

spring:application:name: springdataredis_demo#Redis相关配置redis:host: localhostport: 6379#password: 123456database: 0 #默认操作的是0号数据库jedis:#Redis连接池配置pool:max-active: 8 #最大连接数max-wait: 1ms #连接池最大阻塞等待时间max-idle: 4 #连接池中的最大空闲连接min-idle: 0 #连接池中的最小空闲连接
/*** Redis配置类*/@Configuration
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();//默认的Key序列化器为:JdkSerializationRedisSerializer//String类型序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());//hash类型序列化器redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}}

注:当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为StringRedisSerializer序列化器

2.2、操作String类型数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {//yml中配置支持RedisTemplate对象自动装配@Autowiredprivate RedisTemplate redisTemplate;/*** 操作String类型数据*/@Testpublic void testString(){//ValueOperations valueOperations = redisTemplate.opsForValue();redisTemplate.opsForValue().set("city123","beijing");//打印输出String value = (String) redisTemplate.opsForValue().get("city123");System.out.println(value);//设置超时时间redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);//当key不存在才设置valueBoolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");System.out.println(aBoolean);}
}

2.3、操作Hash类型数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;/*** 操作Hash类型数据*/@Testpublic void testHash(){HashOperations hashOperations = redisTemplate.opsForHash();//存值hashOperations.put("002","name","xiaoshen");hashOperations.put("002","age","20");hashOperations.put("002","address","nj");//取值String age = (String) hashOperations.get("002", "age");System.out.println(age);//获得hash结构中的所有字段Set keys = hashOperations.keys("002");for (Object key : keys) {System.out.println(key);}//获得hash结构中的所有值List values = hashOperations.values("002");for (Object value : values) {System.out.println(value);}}
}

2.4、操作List类型数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;/*** 操作List类型的数据*/@Testpublic void testList(){ListOperations listOperations = redisTemplate.opsForList();//存1个值listOperations.leftPush("mylist","a");//存多个值listOperations.leftPushAll("mylist","b","c","d");//取值List<String> mylist = listOperations.range("mylist", 0, -1);for (String value : mylist) {System.out.println(value);}//获得列表长度 llenLong size = listOperations.size("mylist");int lSize = size.intValue();for (int i = 0; i < lSize; i++) {//出队列String element = (String) listOperations.rightPop("mylist");System.out.println(element);}}
}

2.5、操作Set类型数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;/*** 操作Set类型的数据*/@Testpublic void testSet(){SetOperations setOperations = redisTemplate.opsForSet();//存值setOperations.add("myset","a","b","c","a");//取值Set<String> myset = setOperations.members("myset");for (String o : myset) {System.out.println(o);}//删除成员setOperations.remove("myset","a","b");//取值myset = setOperations.members("myset");for (String o : myset) {![在这里插入图片描述](https://img-blog.csdnimg.cn/498ec17ed8744d25a0cd5ee96fc20b73.png)System.out.println(o);}}
}

2.6、操作ZSet类型数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;/*** 操作ZSet类型的数据*/@Testpublic void testZset(){ZSetOperations zSetOperations = redisTemplate.opsForZSet();//存值zSetOperations.add("myZset","a",10.0);zSetOperations.add("myZset","b",11.0);zSetOperations.add("myZset","c",12.0);zSetOperations.add("myZset","a",13.0);//取值Set<String> myZset = zSetOperations.range("myZset", 0, -1);for (String s : myZset) {System.out.println(s);}//修改分数zSetOperations.incrementScore("myZset","b",20.0);//取值myZset = zSetOperations.range("myZset", 0, -1);for (String s : myZset) {System.out.println(s);}//删除成员zSetOperations.remove("myZset","a","b");//取值myZset = zSetOperations.range("myZset", 0, -1);for (String s : myZset) {System.out.println(s);}}
}

2.7、redis 通用操作

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;/*** 通用操作,针对不同的数据类型都可以操作*/@Testpublic void testCommon(){//获取Redis中所有的keySet<String> keys = redisTemplate.keys("*");for (String key : keys) {System.out.println(key);}//判断某个key是否存在Boolean itcast = redisTemplate.hasKey("dongli");System.out.println(itcast);//删除指定keyredisTemplate.delete("myZset");//获取指定key对应的value的数据类型DataType dataType = redisTemplate.type("myset");System.out.println(dataType.name());}
}

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

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

相关文章

如何把硬盘(分区)一分为二?重装系统的小伙伴不可不看

注意事项&#xff1a;本教程操作不当会导致数据丢失 请谨慎操作 请谨慎操作 请谨慎操作 前言 相信各位小伙伴都会切土豆吧&#xff0c;本教程就是教大家如何切土豆切得好的教程。 啊哈哈哈&#xff0c;开玩笑的。 比如你有一个D盘是200GB&#xff0c;想要把它变成两个100G…

【详解】求解迷宫所有路径(递归实现)----直接打穿迷宫

目录 递归的模型&#xff1a; 栈帧&#xff1a; 递归调用深度&#xff1a; ​编辑 用递归算法求解迷宫问题&#xff1a; 小结&#xff1a; 结语&#xff1a; 递归的小小总结&#xff0c;朋友们可以看看&#xff0c;有助于理解后面的递归程序。 递归的模型&#xff1a; …

【漏洞复现】冰峰VPN存在敏感信息泄露漏洞

漏洞描述 冰峰VPN log/system.log模块日志信息泄露漏洞 免责声明 技术文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社会公德&#xff0c;不得利用网络从事危害国家安全、荣誉和利益&#xff0c;未经授权请勿利…

网络优化篇(一)---------TCP重传性能优化

本文通过一个TCP重传优化的实际问题,详细讲解问题的分析、定位、优化过程。 通过本文你将学到: 如何通过linux命令和/proc文件系统分析TCP性能数据如何通过linux命令和netlink api分析某个具体的TCP连接的性能数据如何通过bcc工具分析TCP性能数据如何通过调整系统参数优化TCP重…

近屿智能OJAC带您从0到1全方位深度学习AI大模型,星辰大海和你开创!

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 在这个信息爆炸的数字时代&#xff0c;你是否也想掌握那种像魔法一样的AI技…

Linux下从sqlite3源码编译出sqlite3库及相关可执行程序

目录 1. 下载sqlite3源码并编译 2. 下载Tcl库并编译 3. 再次编译sqlite源码 1. 下载sqlite3源码并编译 打开SQLite Download Page&#xff0c;滚动到页面的下面&#xff0c;找到源码量最大的那个&#xff08;其它的估计也行&#xff0c;但源码最大的本人感觉功能最全&#…

JavaWeb 页面上显示中文乱码解决~

你们好&#xff0c;我是金金金。 场景 我正在学习servlet&#xff0c;通过write()方法向页面上写入中文数据&#xff0c;没想到显示的都是?? 乱码&#xff0c;如图 排查 很明显可以看出来页面上显示的是??&#xff0c;我猜想肯定是字符编码的问题&#xff0c;导致乱码 造成…

优化|流形优化系列(一)

简介 流形优化是非线性优化的一个分支&#xff0c;它主要关注在特定的几何结构下进行优化。在流形优化中&#xff0c;优化问题通常是在黎曼流形上进行的&#xff0c;而非欧几里得空间。黎曼流形是带有黎曼度量的流形&#xff0c;该度量为流形上的每个点都定义了一个内积。这种…

YOLOv5改进 | 2023注意力篇 | MSDA多尺度空洞注意力(附多位置添加教程)

一、本文介绍 本文给大家带来的改进机制是MSDA(多尺度空洞注意力)发表于今年的中科院一区(算是国内计算机领域的最高期刊了),其全称是"DilateFormer: Multi-Scale Dilated Transformer for Visual Recognition"。MSDA的主要思想是通过线性投影得到特征图X的相应查…

APP自动化测试工具:八款推荐解析

如果想学习提升找不到资料&#xff0c;没人答疑解惑时&#xff0c;请及时加入群&#xff1a;1150305204&#xff0c;里面有各种测试开发资料和技术可以一起交流哦。 uiautomator2 github地址&#xff1a;github.com/openatx/uia… UiAutomator 是 Google 提供的用来做安卓自动…

linux虚拟机网络不通,如何配置ip解决网络问题

续接前文 Hyper-V创建linux虚拟机&#xff0c;共享wifi网络-CSDN博客 创建虚拟机后&#xff0c;网络都正常&#xff0c;可以使用&#xff0c;今天的一次异常关机后&#xff08;电源不小心拔掉了&#xff09;&#xff0c;再次打开这个虚拟机&#xff0c;网络都失效了。。。。 …

C++: 求1+2+3+...+n

int i 1; int sum 0; class Sum { public:Sum(){sum i;i;} };class Solution { public:int Sum_Solution(int n) {Sum a[n]; //调用n次sum的构造函数return sum;} };

云服务器安装mysql全流程

一、下载安装包 官网链接&#xff1a;MySQL :: Download MySQL Community Server 选择适合自己版本和操作系统 二、安装包上传服务器 在本地终端执行scp命令 三、服务器上使用安装包 卸载旧版本 #检查是否之前安装过mysql服务 [lighthouseVM-24-3-opencloudos software]# r…

基于Java SSM框架实现固定资产管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现固定资产管理系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&a…

面向对象软件设计与分析40讲(35)软件开发过程模型之瀑布模型

文章目录 1 定义2 **缺点**3 **优点**1 定义 瀑布模型是一种软件开发过程模型,它将软件开发过程划分为一系列阶段,并且每个阶段必须按照顺序完成,前一个阶段完成后才能进入下一个阶段,形如瀑布流水,最终得到软件产品。这些阶段通常包括需求分析、设计、编码、测试和维护等…

lombok注解 @Data使用在继承类上时出现警告解决

一、警告问题 1、Data注解 Data 包含了 ToString、EqualsAndHashCode、Getter / Setter和RequiredArgsConstructor的功能。 当使用 Data注解时&#xff0c;则有了 EqualsAndHashCode注解&#xff08;即EqualsAndHashCode(callSuperfalse)&#xff09;&#xff0c;那么就会在此…

uniapp中uview组件库CircleProgress 圆形进度条丰富的使用方法

目录 #内部实现 #平台差异说明 #基本使用 #设置圆环的动画时间 #API #Props 展示操作或任务的当前进度&#xff0c;比如上传文件&#xff0c;是一个圆形的进度环。 #内部实现 组件内部通过canvas实现&#xff0c;有更好的性能和通用性。 #平台差异说明 AppH5微信小程…

Vue2 - computed 和 method 的原理区别

目录 1&#xff0c;简单对比2&#xff0c;原理的不同1&#xff0c;method 的处理2&#xff0c;computed 的处理实现缓存触发更新 3&#xff0c;触发更新时的问题 1&#xff0c;简单对比 computed 当做属性使用&#xff0c;method 当做方法使用。computed 可以提供 getter 和 s…

Java研学-web操作crud

一 思路 1 组件 页面显示&#xff1a;JSP   接受用户请求&#xff1a;Servlet   和数据库交互&#xff1a;MyBatis 2 基础准备 ① 创建 web 项目&#xff0c;导入需要依赖的 jar 包,放入 web/WEB-INF/lib目录中 ② 创建数据库表 CREATE TABLE employee( id bigint(11)…

P12 音视频复合流——TS流讲解

前言 从本章开始我们将要学习嵌入式音视频的学习了 &#xff0c;使用的瑞芯微的开发板 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_C…