Redis入门,Idea操作Redis

一、Redis是什么?

Redis(Remote Dictionary Server,远程字典服务器)是一个开源的高性能键值对(key-value)数据库。它以其出色的性能、可靠性和灵活性而闻名,常用于开发中来实现多种数据存储和通信模式

二、为什么要学习redis

内存中数据库:Redis主要将数据存储在内存中,这使得读写操作非常快速

支持多种数据类型:Redis支持多种类型的数据存储,包括字符串(strings)、列表(lists)、集合(sets)、有序集合(sorted sets)、散列(hashes)、位图(bitmaps)、超日志(hyperloglogs)等         

持久化:尽管Redis是内存数据库,但它提供了持久化机制,可以将内存中的数据保存到磁盘,防止数据丢失

丰富的特性:Redis提供了发布/订阅、事务、Lua脚本、慢查询日志、监视器等高级功能

三、redis的基本数据类型

  1. 字符串(String)

    • 简单的键值对存储,适合存储单个数据点。
    • 图解:key: "value"
    • 命令:设置值:set key value,获取值:get key
    • 设置值并添加过期时间 : setex key time value
    • 截取字符串:getrange key 起始 位数   注意位数从零开始
    • 替换字符串:setrange key 起始 替换值      注意位数从零开始
    • 不存在则创建  setnx key value
    • 拼接字符串:append key 拼接值
    • 获取字符串长度:strlen key 
    • 一次性设置多个值:mset key1 value1 key2 value2......
    • 一次性获取多个值:mget key1 key2 key3
  2. 列表(List)

    • 字符串列表,可以作为队列或栈使用。
    • 图解:key: ["item1", "item2", ..., "itemN"]
    • 命令:将一个或几个值添加到队头:lpush list ll
    • 将一个或几个值添加到队尾:rpush list rr
    • 从队头移除第一个值 :lpop list 
    • 从队尾移除第一个值:rpop list
    • 返回区间里的值:lrange list 开头,结尾
    • 获取list的长度:llen list
    • 通过索引来获取list中的某一个元素  lindex list 索引
    • 将一个元素插入到某一个元素的前面:  linsert list before value1  value2
    • 将一个元素插入到某一个元素的后面:linsert list after value1 value2
  3. 集合(Set)

    • 无序集合,自动处理重复数据。
    • 图解:key: {"item1", "item2", ..., "itemN"}
    • 命令:往集合中添加元素:sadd set value
    • 查看集合所有元素:smember set
    • 判断集合中是否有该元素:sismember set value
    • 随机从集合中抽取出若干个元素:srandmember set  个数
    • 移动set1集合里的元素到set2里去 :smove set1 set2  value
    • 求两个集合的交集   sinter set1 set2
    • 求两个集合的并集并去重:sunion set1 set2
    • 求set1减去set2的集合:sdiff set1 set2
    •  随机删除集合的某个元素:spop set
  4. 有序集合(Sorted Set)

    • 与集合类似,但每个元素都有一个分数(score),按分数排序。
    • 图解:key: {(item1, score1), (item2, score2), ..., (itemN, scoreN)}
    • 命令:添加一个值:zadd zset 分数 value
    • 添加多个值:zadd zset 分数1 value1 分数2 value2 .....
    • 获取有序集合的所有元素:zrange zset 0 -1
    • 给zset的元素进行排序:zrangebyscore zset -inf +inf 若要输出则带上 withscores
    • 移除指定元素 :zrem zset value
    • 查看元素个数:zcard zset 
    • 反转指定范围:zrevrange zset 起始 结束
  5. 哈希(Hash)

    • 键值对集合,其中每个键都关联着一个值。
    • 图解:key: {field1: "value1", field2: "value2", ..., fieldN: "valueN"}
    • 命令:往hash设置值:hset hash key value
    • 从hash中获得值:hget hash set
    • 一次性往hash中添加多个值 hset hash key1 value1 key2 value2
    • 一次性获取多个值:hget hash key1 key2
    • 获取所有的键值对:hgetall hash
    • 获得所有的键:hkeys hash
    • 获得所有的值:hvals hash
    • 删除指定的key:hdel hash key
    • 获得hash的长度:hlen hash

四、idea操作redis

4.1、添加依赖

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

4.2、在yml文件中完成配置

我的redis没有设置密码所以不用配置password

springredis:host: localhost  port: 6379database: 0

4.3、注册redis序列化器

序列化器主要是为了解决存储到redis中数据乱码的问题

创建一个config类,将RedisTemplate注册成Bean

package com.sky.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("开始创建redis模板对象....");RedisTemplate redisTemplate = new RedisTemplate();//设置redis得连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);//设置redis,key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return  redisTemplate;}
}

4.4、创建一个测试类来对redis进行基本的操作

package com.sky.test;import com.sky.config.RedisConfiguration;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;//@SpringBootTest
public class SpringDateRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void TestRedisTemplate(){System.out.println(redisTemplate);1.字符串类型
//        ValueOperations valueOperations = redisTemplate.opsForValue();
//        //2.Hash类型
//        HashOperations hashOperations = redisTemplate.opsForHash();
//        //3.列表(类似与队列)
//        ListOperations listOperations = redisTemplate.opsForList();
//        //4.集合类型
//        SetOperations setOperations = redisTemplate.opsForSet();
//        //5.有序集合
//        ZSetOperations zSetOperations = redisTemplate.opsForZSet();}@Testpublic void StringTest(){//获得redis数据库操作对象ValueOperations valueOperations = redisTemplate.opsForValue();//set key valuevalueOperations.set("name","张三");//get keyvalueOperations.get("name");//setex key seconds valuevalueOperations.set("yam","123456",1, TimeUnit.MINUTES);//setnx key valuevalueOperations.setIfAbsent("look","李四");valueOperations.setIfAbsent("look","王五");}@Testpublic void HashTest(){HashOperations hashOperations = redisTemplate.opsForHash();//Hset key field valuehashOperations.put("student","name","小明");hashOperations.put("student","age","10");//Hget key fieldObject o = hashOperations.get("student", "name");System.out.println(o);//Hkeys keySet student = hashOperations.keys("student");//遍历集合for (Object o1 : student) {System.out.println(o1);}//Hvals keyList student1 = hashOperations.values("student");//Hdel key filedhashOperations.delete("student","age");}@Testpublic  void ListTest(){ListOperations listOperations = redisTemplate.opsForList();//Lpush key valuelistOperations.leftPush("100","aa");listOperations.leftPush("100","bb");listOperations.leftPushAll("100","cc,dd,ee");//Lrange key start stoplistOperations.range("100",0,-1);//lpop keylistOperations.leftPop("100");//Llen keylistOperations.size("100");}@Testpublic void SetTest(){SetOperations setOperations = redisTemplate.opsForSet();//Sadd key member1setOperations.add("Zoo","小猫","小狗","大象");setOperations.add("Home","小猫","小狗");//Smembers keysetOperations.members("zoo");//Scard keySystem.out.println(setOperations.size("Zoo"));//Sinter members1 members2setOperations.intersect("Zoo","home");//Sunion members1 members2Set union = setOperations.union("Zoo", "home");for (Object o : union) {System.out.println(o);}}@Testpublic void ZsetTest(){//有序集合操作对象ZSetOperations zSetOperations = redisTemplate.opsForZSet();//Zadd key score1 member1 score2 member2zSetOperations.add("花园","向日葵",10);zSetOperations.add("花园","百合",9);//Zrange  key start stopSet set = zSetOperations.range("花园", 0, -1);for (Object o : set) {System.out.println(o);}//Zrem key member1 member2......zSetOperations.incrementScore("花园","百合",5);zSetOperations.remove("花园","向日葵");}
}

五、redis的应用场景

Redis适用于需要快速访问和处理大量数据的应用程序,它的高性能和低延迟特性使其成为许多现代应用程序的首选数据存储解决方案。然而,由于其内存数据库的特性,Redis通常不适用于存储大量持久化数据,除非使用其持久化功能或与其他持久化存储解决方案结合使用

常常使用redis来进行缓存,提高请求响应速度

依据redis数据类型的特性来实现一些特殊的功能如字符串的setnx命令来实现分布式锁

redis的消息订阅来实现消息中间件的功能。

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

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

相关文章

【Android面试八股文】请描述一下 android 的系统架构?

Android 是一个基于 Linux 的开源软件堆栈,针对多种不同设备类型打造。下图显示了 Android 平台的主要组件。 早期的Android架构如下图所示 官方网站最新的Android平台架构图,如下所示: Linux 内核 Android 平台的基础是 Linux 内核。例如,Android 运行时 (ART) 依赖…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验18 边界网关协议BGP

一、实验目的 1.验证边界网关协议BGP的作用&#xff1b; 2.学习在思科路由器上该协议的使用方法。 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容 1.构建网络拓扑&#xff1b; …

全栈智能家居系统设计方案:STM32+Linux+多协议(MQTT、Zigbee、Z-Wave)通信+云平台集成

1. 项目概述 随着物联网技术的快速发展,智能家居系统正在成为现代生活中不可或缺的一部分。本文介绍了一个基于STM32微控制器和Linux系统的智能家居解决方案,涵盖了硬件设计、软件架构、通信协议以及云平台集成等方面。 该系统具有以下特点: 采用STM32作为终端设备的控制核心…

C#与PLC通信——如何设置电脑IP地址

前言&#xff1a; 我们与PLC通过以太网通信时&#xff0c;首先要做的就是先设置好电脑的IP&#xff0c;这样才能实现上位机电脑与PLC之间的通信&#xff0c;并且电脑的ip地址和PLC的Ip地址要同处于一个网段&#xff0c;比如电脑的Ip地址为192.168.1.1&#xff0c;那么PLC的Ip地…

Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比

章节内容 上一节完成了如下的内容&#xff1a; 编写Agent Conf配置文件收集Hive数据汇聚到HDFS中测试效果 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff0…

【开源】开源数据库工具推荐

Mysql开源工具推荐 dbeaver下载网速太慢了&#xff0c;这么好用的开源工具&#xff0c;可以从镜像站中下载&#xff1a; 下载地址&#xff1a; https://mirrors.nju.edu.cn/github-release/dbeaver/dbeaver/24.1.1/ Redis开源工具推荐 好看好用&#xff0c;UI真是做的很不…

独立开发者系列(25)——大白话进程

很多小型的规模场景限制下&#xff0c;复杂概念弊端大于利端。不同模式的实现&#xff0c;是根据具体需求来判定&#xff0c;但是理解底层最基础的原理有助于理解很多工具背后的诞生。比如php的swoole workerman 要解决的问题。 首先理解&#xff0c;进程概念&#xff0c;进程…

【C语言】深入解析归并排序

文章目录 什么是归并排序&#xff1f;归并排序的基本实现代码解释归并排序的优化归并排序的性能分析归并排序的实际应用结论 在C语言编程中&#xff0c;归并排序是一种高效且稳定的排序算法。它采用分治法将问题分解成更小的子问题进行解决&#xff0c;然后合并结果。本文将详细…

Qt基础 | Qt Creator的基本介绍与使用 | 在Visual Studio中创建Qt项目

文章目录 一、Qt Creator的基本介绍与使用1.新建一个项目2.项目的文件组成3.项目文件介绍3.1 项目管理文件3.2 界面文件3.3 主函数文件3.4 窗体相关的文件 4.项目的编译、调试与运行 二、在Visual Studio中创建Qt项目 Qt C开发环境的安装&#xff0c;请参考https://liujie.blog…

maven私有镜像仓库nexus部署使用

maven私有镜像仓库nexus部署使用 1、Nexus部署 #查找镜像 docker search sonatype/nexus3 #拉取镜像 docker pull sonatype/nexus3 #持久化目录 mkdir -p /data/nexus/data chmod 777 -R /data/nexus/data #启动服务 docker run -d --name nexus3 -p 8081:8081 --restart alw…

MyBatis where标签内嵌foreach标签查询报错‘缺失右括号‘或‘命令未正确结束‘

MyBatis <where>标签内嵌<foreach>标签查询报错’缺失右括号’或’命令未正确结束’ <where>标签内嵌<foreach>标签 截取一段脱敏xml&#xff0c;写明大概意思 <select id"queryLogByIds" resultMap"BaseResultMap">SELE…

深度学习基础:Numpy 数组包

数组基础 在使用导入 Numpy 时&#xff0c;通常给其一个别名 “np”&#xff0c;即 import numpy as np 。 数据类型 整数类型数组与浮点类型数组 为了克服列表的缺点&#xff0c;一个 Numpy 数组只容纳一种数据类型&#xff0c;以节约内存。为方便起见&#xff0c;可将 Nu…

lnmp+DISCUZ+WORDPRESS

lnmpDISCUZWORDPRESS lnmpDISCUZ&#xff08;论坛的一个服务&#xff09; l&#xff1a;linux操作系统 n&#xff1a;nginx前端页面的web服务 php&#xff1a;动态请求转发的中间件 mysql&#xff1a;数据库 保存用户和密码以及论坛的相关内容 mysql8.0.30安装&#xff1a…

html(抽奖设计)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>抽奖</title><style type"text/css">* {margin: 0;padding: 0;}.container {width: 800px;height: 800px;border: 1px dashed red;position: absolut…

数字营销以打造“会员体系”为主要目标的好处和优势

​蚓链数字化营销实践观察&#xff1a;在数字化时代&#xff0c;企业的营销方式发生了深刻的变革。会员体系作为一种常见的营销策略&#xff0c;在数字营销领域中发挥着越来越重要的作用。 首先&#xff0c;我们来总结一下会员体系的特点和优势 &#xff08;一&#xff09;个性…

7/13 - 7/15

vo.setId(rs.getLong("id"))什么意思&#xff1f; vo.setId(rs.getLong("id")); 这行代码是在Java中使用ResultSet对象&#xff08;通常用于从数据库中检索数据&#xff09;获取一个名为"id"的列&#xff0c;并将其作为long类型设置为一个对象…

c语言中的字符串函数

strstr函数 函数介绍 strstr 用于在一个字符串中查找另一个字符串的首次出现。 我们来看这个函数的参数名字&#xff1a;haysytack&#xff08;干草堆&#xff09;needle&#xff08;针&#xff09;,这个其实就是外国的一句谚语&#xff1a;在干草堆中找一根针&#xff0c;就…

抗量子密码算法:保障未来信息安全的新盾牌

随着量子计算的迅猛发展&#xff0c;传统加密算法正面临着前所未有的挑战。量子计算机利用量子比特的特殊性质&#xff0c;能在极短时间内破解目前广泛使用的公钥加密体系&#xff0c;如RSA、ECC等。这使得我国及全球的信息安全体系遭受严重威胁。为了应对这一挑战&#xff0c;…

unity宏编译版本

在写c程序的时候我们通常可以用不同的宏定义来控制不同版本的编译内容&#xff0c;最近有个需求就是根据需要编译一个完全体验版本&#xff0c;就想到了用vs的那套方法。经过研究发现unity也有类似的控制方法。 注意这里设置完后要点击右下的应用&#xff0c;我起先就没有设置…

09 函数基础

目录 一、定义一个函数 二、调用函数 三、函数的参数 1.形参和实参 2. 参数的分类 3.参数默认值 4.参数类型说明 5.不定长参数 四、函数的返回值 1.定义 2.关键字return 五、变量的作用域 六、匿名函数 七、实参高阶函数 1.定义 2.常见实参高阶函数 max、min、so…