redis缓存详情

redis安装包及图形化软件:

百度链接:https://pan.baidu.com/s/1wljo7JzgrSQyqldv9d5HZA?pwd=ht1m 
提取码:ht1m

目录

1.redis的下载及安装

1.1redis的启动与停止

1.2Redis服务启动与停止

2.redis数据类型及常用指令

2.1redis数据类型

 2.2redis常用指令

3.redis在java中的使用

3.1使用步骤

4.通过RedisTemplate对象操作Redis

(1).String类型数据的操作

        (2).hash类型数据的操作

(3).List类型数据的操作

        (4).ZSet类型数据的操作

        (5).Set类型数据的操作

        (6).通用指令的操作


redis介绍:Redis是一个基于内存key-value 结构数据库。

  1. 基于内存存储,读写性能高
  2. 适合存储热点数据(热点商品、资讯、新闻)
  3. 企业应用广泛

官网:https://redis.io

中文网:https://www.redis.net.cn/

1.redis的下载及安装

Windows版下载地址:https://github.com/microsoftarchive/redis/releases

redis的windows版属于绿色软件,直接解压即可使用

  • 1.1redis的启动与停止

服务启动命令:redis-server.exe redis.windows.conf

Redis服务默认端口号为 6379通过快捷键Ctrl + C 即可停止Redis服务

  • 1.2Redis服务启动与停止

客户端连接命令:redis-cli.exe

通过redis-cli.exe命令默认连接的是本地的redis服务,并且使用默认6379端口。也可以通过指定如下参数连接:

-h ip地址

-p 端口号

-a 密码(如果需要)

设置Redis服务密码,修改redis.windows.conf

Redis客户端图形工具:

连接后可以看到你redis中的数据,前提是redis服务需要一直开启

2.redis数据类型及常用指令

2.1redis数据类型

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:类型

类型说明
字符串(string)普通字符串,Redis中最简单的数据类型
哈希(hash)也叫散列,类似于Java中的HashMap结构
列表(list)按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
集合(set)无序集合,没有重复元素,类似于Java中的HashSet
有序集合(sorted set / zset)集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

 2.2redis常用指令

  • 字符串常用命令
命令        说明
SET key value

设置指定key的值

GET key

获取指定key的值

SETEX key seconds value

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

SETNX key value

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

  • 哈希常用命令

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

命令说明
HSET key field value 将哈希表 key 中的字段 field 的值设为 value
HGET key field 获取存储在哈希表中指定字段的值
HDEL key field 

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

HKEYS key 获取哈希表中所有字段
HVALS key   获取哈希表中所有值
  • 列表常用命令 

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

命令说明
LPUSH key value1 [value2]

将一个或多个值插入到列表头部(左边)

LRANGE key start stop

获取列表指定范围内的元素

RPOP key

移除并获取列表最后一个元素(右边)

LLEN key 获取列表长度
  • 集合常用命令

Redis set string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据 

命令说明
SADD key member1 [member2] 向集合添加一个或多个成员
SMEMBERS key 返回集合中的所有成员
SCARD key

获取集合的成员数

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

返回所有给定集合的并集

SREM key member1 [member2] 删除集合中一个或多个成员
  • 有序列表命令

Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数

命令说明
ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员
ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员
ZINCRBY key increment member   有序集合中对指定成员的分数加上增量 increment
ZREM key member [member ...]   移除有序集合中的一个或多个成员

  • 通用指令

Redis的通用命令是不分数据类型的,都可以使用的命令

命令说明
KEYS pattern 查找所有符合给定模式( pattern)key
EXISTS key

检查给定 key 是否存在

TYPE key

返回 key 所储存的值的类型

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

3.redis在java中的使用

3.1使用步骤

  • 1.导入Spring Data Redis maven坐标
<!--SpringDataRedis起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
  • 2.配置Redis数据源 

在resources的application.yml配置文件里面编写redis的配置信息

  • 3.编写配置类,创建RedisTemplate对象

        在config文件下创建Bean对象,springboot项目启动时,会自动将RedisTemplate放入IOC容器内

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 {


    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;

    }
}
  • 4.通过RedisTemplate对象操作Redis

可以编写一个测试类,在测试类里面实现对各个redis数据类型的操作

需要先将RedisTemplate对象从ioc容器中拿出来使用

使用RedisTemplate创建各个数据类型对象

@Test
    public void testRedisTemplate(){
        //生成的对象可对字符串操作
        ValueOperations valueOperations = redisTemplate.opsForValue();
        //生成的对象可对哈希表操作
        HashOperations hashOperations = redisTemplate.opsForHash();
        //生成的对象可对列表操作
        ListOperations listOperations = redisTemplate.opsForList();
        //生成的对象可对集合操作
        SetOperations setOperations = redisTemplate.opsForSet();
        //生成的对象可对有序列表操作
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }

(1).String类型数据的操作

//操作redis中string类型的数据
    @Test
    public void testString(){
        //SET key value			设置指定key的值
        redisTemplate.opsForValue().set("name","张三");
        //GET key			获取指定key的值
        String name = (String) redisTemplate.opsForValue().get("name");
        System.out.println(name);
        //SETEX key seconds value	设置指定key的值,并将 key 的过期时间设为 seconds 秒
        redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
        //SETNX key value只有在 key 不存在时设置 key 的值
        redisTemplate.opsForValue().setIfAbsent("code","23455");

    }

        (2).hash类型数据的操作

//操作hash类型的数据
    @Test
    public void testHash(){
        //hset hget hdel hkeys hvals
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("100","name","lisi");
        hashOperations.put("100","age","10");
        String name = (String) hashOperations.get("100", "name");
        System.out.println(name);
        Set keys = hashOperations.keys("100");
        System.out.println(keys);
        List values = hashOperations.values("100");
        System.out.println(values);
        hashOperations.delete("100","name","age");
    }

(3).List类型数据的操作

//操作List类型的数据
    @Test
    public void testList(){
        //lpush lrange rpop llen
        ListOperations listOperations = redisTemplate.opsForList();
        listOperations.leftPushAll("001","a","b","c");
        listOperations.leftPush("001","d");
        List range = listOperations.range("001", 0, -1);
        System.out.println(range);
        listOperations.rightPop("001");
        Long size = listOperations.size("001");
        System.out.println(size);

    }

        (4).ZSet类型数据的操作

//操作ZSet类型的数据
    @Test
    public void testZset(){
        //zadd zrange zincrby zrem
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("zset1","a",10);
        zSetOperations.add("zset1","b",10.2);
        zSetOperations.add("zset1","c",10.5);

        Set zset1 = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset1);

        zSetOperations.incrementScore("zset1","c",10);

        zSetOperations.remove("zset1","a","b");


    }

        (5).Set类型数据的操作

//操作set类型的数据
    @Test
    public void testSet(){
        //sadd smembers scard sinter sunion srem
        SetOperations setOperations = redisTemplate.opsForSet();
        setOperations.add("set1","a","b","c","d");//向集合中添加元素
        setOperations.add("set2","c","d","e","f");

        Set set1 = setOperations.members("set1"); //返回集合中所有的成员
        System.out.println(set1);

        Long set11 = setOperations.size("set1");//获取集合的成员数
        System.out.println(set11);

        Set intersect = setOperations.intersect("set1", "set2");//获取两个集合的交集
        System.out.println(intersect);

        Set union = setOperations.union("set1", "set2");//获取两个集合的并集
        System.out.println(union);

        setOperations.remove("set1","a","b");//删除集合中的某个元素

    }

        (6).通用指令的操作

    //redis通用指令
    @Test
    public void testRedis(){
        //keys exisit type key del
        Set keys = redisTemplate.keys("*");//查询所有的key
        System.out.println(keys);

        Boolean name = redisTemplate.hasKey("name");//查询是否存在这个key
        Boolean set1 = redisTemplate.hasKey("set1");

        for(Object key : keys){
            DataType type = redisTemplate.type(key);//便利keys 查看每个key的类型
            System.out.println(type.name());
        }
    }

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

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

相关文章

读天才与算法:人脑与AI的数学思维笔记15_声响的数学之旅

1. 音乐 1.1. 巴赫的作品以严格的对位著称&#xff0c;他十分中意对称的结构 1.2. 巴托克的作品很多都以黄金比例为结构基础&#xff0c;他非常喜欢并善于使用斐波纳契数列 1.3. 有时&#xff0c;作曲家是本能地或者不自知地被数学的模式和结构所吸引&#xff0c;而他们并没…

Golang | Leetcode Golang题解之第61题旋转链表

题目&#xff1a; 题解&#xff1a; func rotateRight(head *ListNode, k int) *ListNode {if k 0 || head nil || head.Next nil {return head}n : 1iter : headfor iter.Next ! nil {iter iter.Nextn}add : n - k%nif add n {return head}iter.Next headfor add > …

【项目构建】04:动态库与静态库制作

OVERVIEW 1.编译动态链接库&#xff08;1&#xff09;编译动态库&#xff08;2&#xff09;链接动态库&#xff08;3&#xff09;运行时使用动态库 2.编译静态链接库&#xff08;1&#xff09;编译静态库&#xff08;2&#xff09;链接静态库&#xff08;3&#xff09;运行时使…

matlab学习007-已知离散时间系统的系统函数并使用matlab绘制该系统的零极点图;判断系统的稳定性;幅频和相频特性曲线

目录 题目 离散时间系统的系统函数&#xff1a;H(z)(3*z^3-5*z^210z)/(z^3-3*z^27*z-5) 1&#xff0c;绘制该系统的零极点图 1&#xff09;零极点图 2&#xff09;代码 2&#xff0c;判断系统的稳定性 1&#xff09;判断结果 2&#xff09;代码 3&#xff0c;试用MATL…

C++的未来之路:探索与突破

在计算机科学的浩瀚星空中&#xff0c;C无疑是一颗璀璨的明星。自诞生以来&#xff0c;它以其强大的性能和灵活的特性&#xff0c;赢得了无数开发者的青睐。然而&#xff0c;随着技术的不断进步和应用的日益复杂&#xff0c;C也面临着前所未有的挑战和机遇。本文将探讨C的未来之…

腾锐D2000-8 MXM VPX,全国产,可广泛应用于边缘计算网关、入侵检测、VPN、网络监控等等应用领域

腾锐D2000-8 MXM VPX 1. 概述 XMVPX-108 是一款基于飞腾 D2000/8 处理器的低功耗逻辑运算和图形处理 VPX 刀片&#xff0c; 板贴 32GB DDR4 内存&#xff0c;搭载飞腾 X100 套片&#xff0c;满足通用 IO 接口功能。GPU 采用 MXM 小型插卡形式&#xff0c; 搭配 8GB 显卡。提供…

【16-降维技术:PCA与LDA在Scikit-learn中的应用】

文章目录 前言主成分分析(PCA)原理简介Scikit-learn中的PCA实现应用示例线性判别分析(LDA)原理简介Scikit-learn中的LDA实现应用示例总结前言 降维是机器学习中一种常见的数据预处理方法,旨在减少数据集的特征数量,同时尽量保留原始数据集的重要信息。这不仅有助于减少计…

开箱子咸鱼之王H5游戏源码_内购修复优化_附带APK完美运营无bug最终版__GM总运营后台_附带安卓版本

内容目录 一、详细介绍二、效果展示2.效果图展示 三、学习资料下载 一、详细介绍 1.包括原生打包APK&#xff0c;资源全部APK本地化&#xff0c;基本上不跑服务器宽带 2.优化后端&#xff0c;基本上不再一直跑内存&#xff0c;不炸服响应快&#xff01; 3.优化前端&#xff0c…

【源码阅读】Golang中的go-sql-driver库源码探究

文章目录 前言一、go-sql-driver/mysql1、驱动注册&#xff1a;sql.Register2、驱动实现&#xff1a;MysqlDriver3、RegisterDialContext 二、总结 前言 在上篇文章中我们知道&#xff0c;database/sql只是提供了驱动相关的接口&#xff0c;并没有相关的具体实现&#xff0c;具…

NLP 笔记:TF-IDF

TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff0c;词频-逆文档频率&#xff09;是一种用于信息检索和文本挖掘的统计方法&#xff0c;用来评估一个词在一组文档中的重要性。TF-IDF的基本思想是&#xff0c;如果某个词在一篇文档中出现频率高&#xff0…

不坑盒子2024.0501版,Word朗读、Word表格计算、Word中代码高亮显示行号、Excel中正则提取内容……

通过“听”来审阅Word中的内容&#xff0c;能轻松找出那些容易被眼看忽视的错字。 不坑盒子2024.0501版来了&#xff0c;很多奇妙的事情&#xff0c;正在发生…… 功能一览 此版本共带来10余项变动&#xff0c;来看看有没有你感兴趣的吧~ 接入Azure的“语音”能力 接入“语…

Flutter笔记:Widgets Easier组件库(3)使用按钮组件

Flutter笔记 Widgets Easier组件库&#xff08;3&#xff09;&#xff1a;使用按钮组件 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddre…

C语言之详细讲解文件操作(抓住文件操作的奥秘)

什么是文件 与普通文件载体不同&#xff0c;文件是以硬盘为载体存储在计算机上的信息集合&#xff0c;文件可以是文本文档、图片、程序等等。文件通常具有点三个字母的文件扩展名&#xff0c;用于指示文件类型&#xff08;例如&#xff0c;图片文件常常以KPEG格式保存并且文件…

JDBC连接MySQL8 SSL

1.创建用户并指定ssl连接 grant all on . to test% identified by imooc require SSL(X509); 2.查看是否使用ssl SELECT ssl_type From mysql.user Where user"test" 3.配置用户必须使用ssl ALTER USER test% REQUIRE SSL(X509); FLUSH PRIVILEGES; 注意&#xff…

Ollamallama

Olllama 直接下载ollama程序&#xff0c;安装后可在cmd里直接运行大模型&#xff1b; llama 3 meta 开源的最新llama大模型&#xff1b; 下载运行 1 ollama ollama run llama3 2 github 下载仓库&#xff0c;需要linux环境&#xff0c;windows可使用wsl&#xff1b; 接…

mac如何打开exe文件?如何mac运行exe文件 如何在Mac上打开/修复/恢复DMG文件

在macOS系统中&#xff0c;无法直接运行Windows系统中的.exe文件&#xff0c;因为macOS和Windows使用的是不同的操作系统。然而&#xff0c;有时我们仍然需要运行.exe文件&#xff0c;比如某些软件只有Windows版本&#xff0c;或者我们需要在macOS系统中运行Windows程序。 虽然…

【MATLAB源码-第200期】基于matlab的鸡群优化算法(CSO)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 鸡群优化算法&#xff08;Chicken Swarm Optimization&#xff0c;简称CSO&#xff09;是一种启发式搜索算法&#xff0c;它的设计灵感来源于鸡群的社会行为。这种算法由Xian-bing Meng等人于2014年提出&#xff0c;旨在解决…

STM32 工程移植 LVGL:一步一步完成

STM32 工程移植 LVGL&#xff1a;一步一步完成 LVGL&#xff0c;作为一款强大且灵活的开源图形库&#xff0c;专为嵌入式系统GUI设计而生&#xff0c;极大地简化了开发者在创建美观用户界面时的工作。作为一名初学者&#xff0c;小编正逐步深入探索LVGL的奥秘&#xff0c;并决…

Java面试八股之强软弱虚引用的概念及区别

Java中强软弱虚引用的概念及区别 在Java中&#xff0c;强引用、软引用、弱引用和虚引用是四种不同类型的引用&#xff0c;它们在对象生命周期管理、垃圾收集&#xff08;Garbage Collection, GC&#xff09;以及内存管理方面有着不同的行为和用途。以下是它们的概念和主要区别…

LeetCode 543.二叉树的直径

题目描述 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5]…