Redis的基本使用

news/2024/5/16 12:03:25/文章来源:https://blog.csdn.net/y516369/article/details/126909905

1.Redis简介

(1)什么是Redis
①Redis是一个基于内存的key-value结构数据库
②基于内存存储,读写性能高
③适合存储热点数据(热点商品、资讯、新闻)
④Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件
⑤它存储的value类型比较丰富,也被称为结构化的NoSql数据库。NoSql,不仅仅是SQL,泛指非关系型数据库。NoSql数据库
并不是要取代关系型数据库,而是关系型数据库的补充。
(2)Redis应用场景
①缓存
②任务队列
③消息队列
④分布式锁

2.Redis常用命令

(1)Redis中字符串常用命令
①SET key value //设置指定key的值
②GET key // 获取指定key的值
③SETEX key seconds value // 设置指定key的值,并将key的过期时间设为 seconds 秒
④SETNX key value // 只有在key不存在时设置 key 的值
(2)哈希 hash 操作命令
Redis hash是一个String类型的filed和value的映射表,hash特别适合用于存储对象,常用命令
①HSET key filed value // 将哈希表key中的字段field的值设为value
②HGET key field // 获取哈希表中指定字段的值
③HDEL key field // 删除存储在哈希表中的指定字段
④HKEYS key // 获取哈希表中所有字段
⑤HVALS key // 获取哈希表中所有值
⑥HGETALL key // 获取在哈希表中指定key的所有字段和值
在这里插入图片描述
(3)列表list操作命令
Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令:
①LPUSH key value1 value2 … // 将一个或多个值插入到列表头部
例如:lpush mylist a b c
②LRANGE key start stop // 获取列表指定范围内的元素
例如:lrange mylist 0 -1 // 0 -1表示获取所有
③RPOP key // 移除并获取列表最后一个元素
④LLEN key // 获取列表长度
⑤BRPOP key1 key2 … timeout // 移出并获取列表的最后一个元素,或发现可弹出元素为止
//timeout 超时时间;列表没有元素,就会一直阻塞直到超时
(4)集合set操作命令
Redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,常用命令:
①SADD key member1 member2 … // 向集合中添加一个或多个成员
②SMEMBERS key // 返回集合中的所有成员
③SCARD key // 获取集合的成员数
④SINTER key1 key2 … // 返回给定所有集合的交集
⑤SUNION key1 key2 … // 返回所有给定集合的并集
⑥SDIFF key1 key2 … // 返回给定所有集合的差集(key1 - key2)
⑦SREM key member1 member2 … // 移除集合中一个或多个成员
(5)有序集合 sorted set 操作命令
Redis sorted set 有序集合是string类型元素的集合,且不允许重复的成员。每个元素都会关联一个double类型的分数(score)。
redis正是通过分数来为集合中的成员进行从小到大排序。有序集合的成员是唯一的,但分数却可以重复。常用命令:
①ZADD key score1 member1 score2 member2 … // 向有序集合中添加一个或多个成员,或者更新已存在成员的分数
②ZRANGE key start stop [WITHSCORS] // 通过索引区间返回有序集合中指定区间内的成员(withscors可以带分数一起返回)
③ZINCRBY key increment member // 有序集合中对指定成员的分数加上增量 increment
④ ZREM key member [member …] // 移除有序集合中的一个或多个成员
(6)通用命令
①KEYS pattern // 查找所有符合给定模式(pattern的)key
例如: keys *
②EXISTS key // 检查给定 key 是否存在
③TYPE key // 返回key所存储的值的类型
例如:type myset
④TTL key // 返回给定 key 的剩余生存时间,以秒为单位
例如:ttl name
⑤DEL key // 该命令用于在key存在时删除key

3.在Java中操作Redis

3.1 使用Jedis操作Redis

(1)导入相关坐标

  <!--   Jedis坐标   --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.1</version></dependency>

(2)相关实例

public class JedisTest {@Testpublic void testJedis() {
//        1.获取连接Jedis jedis = new Jedis("localhost", 6379);
//        2.执行具体的操作jedis.set("username","lisi");String value = jedis.get("username");System.out.println(value);
//        3.关闭连接jedis.close();} }

3.2 在Spring Boot项目使用Spring Data Redis操作Redis

Spring Data Redis 中提供了一个高度封装的类:RedisTemplate,针对jedis客户端中大量api进行了归类封装,将同一类型操作
封装为opperation接口,具体分类如下:
①ValueOperations:简单K-V操作
②SetOperations:set类型数据操作
③ZSetOperations:zset类型数据操作
④HashOperations:针对map类型的数据操作
⑤ListOperations:针对list类型的数据操作
(1)导入相关坐标

<!--  Spring Data Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

(2)Redis相关配置

spring:
# Redis相关配置redis:host: localhostport: 6379database: 0 # 默认有16个数据库,操作的是第0号数据库jedis:
# Redis连接池配置pool:max-active: 8 # 最大连接数max-wait: 1ms # 连接池最大阻塞等待时间max-idle: 14 # 连接池中的最大空闲连接min-idle: 0 # 连接池中的最小空闲连接

(3)Redis配置类

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
//        创建RedisTemplate对象RedisTemplate<Object, Object> template = new RedisTemplate<>();
//        设置连接工厂template.setConnectionFactory(connectionFactory);
//        创建JSON序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
//        设置key的序列化template.setKeySerializer(RedisSerializer.string());template.setHashKeySerializer(RedisSerializer.string());
//       设置value的序列化template.setValueSerializer(jsonRedisSerializer);template.setHashValueSerializer(jsonRedisSerializer);
//        返回return template;}  }

(3)实例

@SuppressWarnings("all")
@SpringBootTest(classes = SsmMangerApplication.class)
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;//操作String类型数据@Testpublic void testString() {redisTemplate.opsForValue().set("city", "beijing");Object city = redisTemplate.opsForValue().get("city");System.out.println(city);}//    操作Hash类型数据@Testpublic void testHash() {HashOperations hashOperations = redisTemplate.opsForHash();
//        存值hashOperations.put("002", "name", "xaioming");hashOperations.put("002", "age", "20");hashOperations.put("002", "address", "bj");
//        取值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);} } }//操作List类型的数据@Testpublic void testList() {ListOperations listOperations = redisTemplate.opsForList();
//        存值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);}
//        出队列Object element = listOperations.rightPop("mylist");System.out.println(element);}//    操作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) {System.out.println(o);}}//    操作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.print(s);//bca}//                修改分数zSetOperations.incrementScore("myZset", "b", 20.0);//                取值myZSet = zSetOperations.range("myZset", 0, -1);System.out.println();for (String s : myZSet) {System.out.print(s);//cab}
//                删除成员zSetOperations.remove("myZset", "a", "b");
//        取值myZSet = zSetOperations.range("myZset", 0, -1);System.out.println();for (String s : myZSet) {System.out.print(s);//c}}//    通用操作@Testpublic void testCommon(){
//        获取Redis中所有的keySet<String> keys = redisTemplate.keys("*");for (String key : keys) {System.out.print(key);}
//        判断某个key是否存在Boolean haha = redisTemplate.hasKey("haha");System.out.println(haha);//        删除指定keyredisTemplate.delete("myZset");//        获取指定key对应的value的数据类型DataType dataType = redisTemplate.type("myset");System.out.println(dataType.name());} }

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

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

相关文章

计组--存储系统

存储系统 思维导图&#xff1a; 存储器概述 存储器的分类 按在计算机中的作用(层次)分类 主存储器&#xff0c;简称主存(内存) 存放计算机运行期间所需的程序和数据&#xff0c;CPU可以直接对其进行访问。 辅助存储器&#xff0c;简称辅存(外存) 辅存的内容需要调入主存后才…

普中A6开发版——XPT2046四引脚切换测量(含详细教程以及原理图等资料)

文章目录一、简介二、原理图以及手册三、接线四、选择数码管芯片原理讲解五、代码一、简介 本文介绍了XPT2046的使用方法以及普中A6开发版的接线等&#xff0c;并从原理图以及手册中摘选了详细的介绍&#xff0c;充分理解其工作原理。XPT2046本来是一个电阻式触摸屏控制器&…

监控系统架构方案

前言 对于企业级服务器管理&#xff0c;站群管理&#xff0c;针对服务器的监控是非常必要的。 通常&#xff0c;在电脑出现卡死&#xff0c;或进程停止或被挂起的情况下&#xff0c;大家都会使用任务管理器查看进程情况。针对电脑流畅性或资源优化&#xff0c;通常会使用资源管…

物联网开发笔记(19)- 使用Micropython开发ESP32开发板之连接WIFI热点

我们的ESP32开发板是拥有WIFI和蓝牙功能的。这里我们先告诉大家如何将ESP32开发板连接到我们家里的无线路由器上&#xff0c;并和连接到家里无线路由器的一台电脑进行通讯。 一、环境 ESP32开发板Thonny IDEWin10网络调试助手工具 后面设备联网的基本信息&#xff1a;开发板IP…

网课答案查题方法详细步骤

网课答案查题方法详细步骤 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#…

Dobbo微服务项目实战(详细介绍+案例源码) - 1.项目介绍及环境配置

系列文章目录 项目介绍及环境配置 文章目录系列文章目录一、项目介绍1. 功能2. 技术选型3. 页面预览⑴. 登录⑵. 交友&#xff08;主页&#xff09;⑶. 探花⑷. 搜附件⑸. 桃花传音⑹. 测灵魂⑺. 圈子⑻. 消息⑼. 小视频⑽. 我的二、开发工具1. YAPI2. Android模拟器3. 调试工…

ElasticSearch 命令总结

目录0&#xff0c;ES 与关系型数据库类比1&#xff0c;查看集群信息2&#xff0c;查看索引信息3&#xff0c;创建索引1&#xff0c;创建索引2&#xff0c;重建索引4&#xff0c;文档相关操作1&#xff0c;查看文档2&#xff0c;写入文档3&#xff0c;更新文档4&#xff0c;删除…

上海亚商投顾:A股持续调整 券商成做空主力

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪三大指数今日低开低走&#xff0c;午后均跌超2%&#xff0c;证券、房地产、煤炭等板块跌幅居前。券商股全线下挫&am…

centos8升级宝塔导致的openssl系列问题

故事的发生是这样的&#xff0c;从前有座山 这个问题很古怪&#xff0c;起先是我把宝塔面板从7.9.3升级到7.9.4&#xff0c;结果升级后宝塔弹出 libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b 再后来就是重启的话&#xff0c;连ssh都进不去&…

第137篇 荷兰拍卖

介绍荷兰拍卖,并通过简化版Azuki荷兰拍卖代码,讲解如何通过荷兰拍卖发售 ERC721标准的NFT。 1.荷兰拍卖 荷兰拍卖(Dutch Auction)是一种特殊的拍卖形式。 亦称“减价拍卖”,它是指拍卖标的的竞价由高到低依次递减直到第一个竞买人应价(达到或超过底价)时击槌成交的一种…

05-Java面向对象

文章目录初识面向对象面向过程&面向对象回顾方法及加深对象的创建分析创建与初始化对象构造器详解构造器-无参&#xff08;默认&#xff09;构造器-有参创建对象内存分析(简易)面向对象的三大特征封装封装的作用封装演示继承继承示例SuperSuper注意点super VS this方法重写…

Linux 虚拟地址空间

目录 1、一段代码引出一个问题 运行结果&#xff1a; 讨论&#xff1a; 2、Linux下进程虚拟地址空间分布 3、什么是虚拟地址空间&#xff1f; 4、虚拟地址出现之前&#xff1a;进程直接访问物理内存 5、再述虚拟地址空间 虚拟地址空间结构体是如何进行区域划分的呢&…

HTTP1.x协议详解和HTTP2.0笔记

http协议的作用就是指定两个web应用&#xff0c;之间的一种规则&#xff0c;各种特点&#xff0c;管道化&#xff0c;io多路复用&#xff0c;缓存&#xff0c;状态码&#xff0c;都是基于协议之间的字段&#xff0c;和io之间的调度来实现 HTTP的诞生 1989 年 3 月 CERN&#x…

Linux运维笔记[2]-宝塔面板

宝塔面板 宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。 有30个人的专业团队研发及维护,经过200多个版本的迭代,功能全,少出错且足够安全,已获得全球百万用户认可安装。 openEuler安装宝塔面板…

ElasticSearch(九)【SpringBoot整合】

九、SpringBoot整合Elasticsearch 9.1 基本环境配置 创建一个springboot工程springboot-elasticsearch在pom.xml导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifac…

Kafka3.1简介及Kafka3.1部署、原理和API开发使用介绍

Kafka3.1简介及Kafka3.1部署、原理和API开发使用介绍第1章-kafka简介 1-1.消息队列简介 什么是消息队列 “消息队列”是在消息的传输过程中保存消息的容器。“消息”是在两台计算机间传送的数据单位。 英文名&#xff1a;Message Queue&#xff0c;经常缩写为MQ 可以简单理…

ElasticSearch之Kibana安装及使用

文章目录1. 安装1.11.2 上传安装包并解压1.3 生成证书1.3 修改配置1.4 修改目录拥有者1.5 启动软件1.6 使用Kibana官方介绍&#xff1a;Kibana 是一个免费且开放的用户界面&#xff0c;能够让您对 Elasticsearch 数据进行可视化&#xff0c;并让您在 Elastic Stack 中进行导航。…

[极客大挑战 2020]

[极客大挑战 2020]Roamphp1-Welcome 已进入页面&#xff0c;以为是这道题的环境不对&#xff0c;可是查看f12竟然有东西&#xff0c;然后查一下405 请求方式有误&#xff0c;比如应该用GET请求方式的资源&#xff0c;用了POST 改为post请求方式&#xff0c;出现源码&#xff…

django的settings配置详解

1.介绍 BASE_DIR 默认值&#xff1a;os.path.dirname(os.path.dirname(os.path.abspath(__file__)))。 这个是Django项目文件夹所在目录得绝对路径DEBUG DEBUG 默认值是True。 在本地开发测试环境下设置DEBUGTrue可以显示bug信息&#xff0c;便于开发者找出代码错误所在。 当…

微服务介绍以及远程调用

简介 什么是微服务 微服务是对传统单体服务进行业务拆分&#xff0c;拆分成多个独立的服务。微服务包括服务集群、服务网关、注册中心、配置中心、消息队列、分布式日志服务、系统监控和链路追踪、分布式缓存、分布式搜索、数据库、 Jenkins持续集成服务器以及Docker web自动打…