redis基础

news2024/11/15 4:51:29

redis是一个基于内存的Key-Value数据库

        1.基于内存存储,读写性能高

        2.适合存储热点数据(热点商品、咨询、新闻)

        3.NoSQL,不仅仅是SQL,泛指关系数据库

关系型数据库 Mysql  Oracle    DB2     SQLServer

非关系型数据库  Redis    Mongo db    MemCached

应用场景:缓存、任务队列、消息队列、分布式锁

一、下载

 二、安装

 windows安装配置,直接解压即可绿色文件

三、Redis的服务启动与关闭

1、linux启动与链接

 使用./redis-cli 连接redis。

redis打开的服务在前台运行,霸屏了。所以让他在后台运行。

(1)找到redis.conf修改配置文件

 (2)输入/dae查找修改的行

 (3)将no改成yes

 (4)使用redis运行带上redis.conf文件就可以在后台运行了

 2、windows启动与链接

 关闭:ctrl+c

 四、linux和windows设置密码

1、Linux设置密码

        (1)打开redis.conf

         (2)输入\pass找到密码查询

        (3)删除注释开启密码询问,并将后面修改为密码(root)

 

         (4)关闭redis,重新打开

1、ps -ef | grep redis        2、kill -9 进程号    3、

         (5)使用查询,是不可以用的,需要使用auth 密码才可以使用

        (6)exit;是退出命令行

五、设置远程连接 

         (1)找到redis.conf文件进行修改

         (2)将bind 127.0.0.1这行进行注释

        (3)注意一定要打开防火墙

firewall-cmd --zone=public --add-port=6379/tcp --permanent(1)

firewall-cmd --reload(2)

         (4)使用windows连接远程linux的redis

找到windows下安装的redis文件,输入如下命令便可以连接。注意文件目录

.\redis-cli.exe -h 192.168.52.137 -p 6379 -a root

 

 六、redis数据类型

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

字符串String        哈希hash        列表list        集合set        有序集合sorted set

 七、Redis常用命令

1、操作字符串String命令

 2、操作哈希hash操作命令

3、列表list操作命令

 4、集合set操作命令

5、通用命令

 八、在java种操作Redis

了解:

 springboot提供的重点:

 pow.xml select 1进入1号数据库

注意要写入配置文件

package com.itheima.config;

import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.time.Duration;

@Configuration
public class RedisConfig {
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        // 设置缓存有效期一小时
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1));
        return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory)).cacheDefaults(redisCacheConfiguration).build();
    }

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        RedisSerializer stringSerializer = new StringRedisSerializer();
        redisTemplate.setConnectionFactory(factory);
        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setValueSerializer(stringSerializer);
        redisTemplate.setHashKeySerializer(stringSerializer);
        redisTemplate.setHashValueSerializer(stringSerializer);
        return redisTemplate;
    }
}

 (1)操作String类型数据

 @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    void contextLoads() {
        ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();
        opsForValue.set("name1", "lisi1"); // 缓存数据
        opsForValue.set("name2", "lisi1",10L, TimeUnit.SECONDS); // 缓存数据,超时10秒就关闭
        Boolean aBoolean = opsForValue.setIfAbsent("name1", "lisi1");// 缓存数据,判断是否存在,存在就添加失败
        String value = opsForValue.get("name1"); // 获取缓存数据
        System.out.println(aBoolean);
        System.out.println(value);
    }

(2)操作hash数据

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
        HashOperations hashOperations = redisTemplate.opsForHash();
        //存值
        hashOperations.put("002","name","xiaoming");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","changsha");
        //取值
        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 key:values) {
            System.out.println(key);
        }
    }
}

(3)操作List数据

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
        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);
        }

        //获取列表的长度llen
        Long size = listOperations.size("mylist");
        int lSize = size.intValue();

        for (int i = 0; i < lSize; i++) {
            //出队列
            String element = (String) listOperations.rightPop("mylist");
            System.out.println(i + ":" + element);
        }
    }

(4)操作Set类型的数据

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
        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");

        System.out.println("***************");

        //取值
        Set<String> myset1 = setOperations.members("myset");
        for (String o: myset1) {
            System.out.println(o);
        }
    }
}

(5)操作Zset数据

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
        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","d",13.0);

        //取值
        Set<String> myZset = zSetOperations.range("myZset", 0, -1);
        for (String o:myZset) {
            System.out.println(o);
        }

        //修改分数
        zSetOperations.incrementScore("myZset","b",20.0);

        //取值
        Set<String> myZset1 = zSetOperations.range("myZset", 0, -1);
        for (String o:myZset1) {
            System.out.println(o);
        }

        //删除成员
        zSetOperations.remove("myZset","a","b");

        //取值
        Set<String> myZset2 = zSetOperations.range("myZset", 0, -1);
        for (String o:myZset2) {
            System.out.println(o);
        }
    }
}

(6)通用方法

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
        //获取Redis所有的keys
        Set<String> keys = redisTemplate.keys("*");
        for (String key:keys) {
            System.out.println(key);
        }
        //判断某个key是否存在
        Boolean itheima = redisTemplate.hasKey("itheima");
        System.out.println(itheima);
        //删除指定的key
        redisTemplate.delete("myZset");
        //获取指定key对应的value数据类型
        DataType dataType = redisTemplate.type("myset");
        System.out.println(dataType.name());
    }
}

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

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

相关文章

参数化集成测试

我们在开发项目的过程中遇到了复杂的业务需求&#xff0c;测试同学没有办法帮我们覆盖每一个场景&#xff1b;或者是我们自己在做代码功能升级、技改&#xff0c;而不是业务需求的时候&#xff0c;可能没有测试资源帮我们做测试&#xff0c;那这个时候就需要依靠自己的单元测试…

数据结构之树相关概念的知识铺垫

文章目录前言1.树的相关介绍2. 树的表示3.二叉树概念及结构4.二叉树的性质5.二叉树相关概念练习6.总结前言 之前对数组结构中线性结构进行了相关的介绍&#xff0c;本文将开始对非线性结构进行相关的介绍&#xff0c;首先介绍的是树&#xff0c;会围绕树的相关概念进行初步的简…

记住这三个方法,让你的钱越花越多

小狗钱钱 关于作者 本书作者博多•舍费尔&#xff0c;是德国著名的投资 家、企业家、演说家以及畅销书作家。他 人生中曾出现过严重的财务危机&#xff0c;但他凭 着自己的努力&#xff0c;重新获得了财务自甶。这 段经历让他产生了和更多人分享理财知识 的想法&#xff0c;《…

玩以太坊链上项目的必备技能(类型-映射类型-Solidity之旅四)

映射&#xff08;Mapping&#xff09; 说到映射&#xff08;Mapping&#xff09;&#xff0c;有过其它编程语言经验的您&#xff0c;对这是再熟悉不过了。Solidity 中的映射&#xff08;Mapping&#xff09; 与Java的Map、Go里的Map以及javascript的JSON等众多编程语言中的Map…

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【大数据入门核心技术-ElasticSearch】(一)ElasticSearch介绍

目录 一、什么是Elasticsearch? 二、核心概念 1.倒排索引&#xff08;Inverted Index&#xff09; 2.节点 & 集群&#xff08;Node & Cluster&#xff09; 3.索引&#xff08;Index&#xff09; 4.文档&#xff08;Document&#xff09; 5.类型&#xff08;type…

游戏开发50课 性能优化8

4.2 渲染状态优化 4.2.1 状态缓存 在引擎侧&#xff0c;可以使用状态缓存减少渲染管线的切换。伪代码&#xff1a; class RenderStateCache { public:void InitRenderStates();{for (RenderStateType tRenderStateType.begin; t<RenderStateType.end; i){_renderStateCac…

[附源码]计算机毕业设计基于微信小程序的网络办公系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

微服务框架 SpringCloud微服务架构 微服务保护 31 限流规则 31.3 流控模式【链路】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护31 限流规则31.3 流控模式【链路】31.3.1 流控模式 - 链路31.3.2 举个栗子31.3.3 总结31 限流规则…

Vite + Vue3 + Electron 创建打包桌面程序、实现进程通信

目录 1. Electron 介绍 2. 使用 Vite 构建 Electron 项目 2.1 创建 Vite 应用&#xff0c;安装 Electron 依赖 2.2 在 vite.config.ts 中&#xff0c;配置 Electron 入口文件 2.3 编写 electron / index.ts 2.3.1 app、BrowserWindow 2.3.2 使用 win.loadURL 加载窗口 /…

Autosar MCAL-GTM之TOM

文章目录前言定时器输出模块&#xff08;TOM&#xff09;TOM产生PWM的原理TOM中断中断使能中断模式中断映射CFG中TOM通道配置TOM Channel EnableTomChDisableOnTgcTriggerTOM Channel EnableTOM Channel OutputTomChOutputDisableOnTgcTrigTomChannelOutputControlTomChannelOu…

【项目_05】tabcontrol的搭建及回显、使用keep-alive缓存页面、移动端适配 | 基于Vue3全家桶

&#x1f4ad;&#x1f4ad; ✨&#xff1a;tabcontrol的搭建及回显、使用keep-alive缓存页面   &#x1f49f;&#xff1a;东非不开森的主页   &#x1f49c;: 总不能还没努力就向生活妥协吧&#x1f49c;&#x1f49c;   &#x1f338;: 如有错误或不足之处&#xff0c;希…

【双向ConvLSTM Network:遥感融合】

D2TNet: A ConvLSTM Network With Dual-Direction Transfer for Pan-Sharpening &#xff08;D2TNet: 双向传输的卷积长短期记忆递归神经网络用于泛锐化&#xff09; 本文提出了一种高效的具有双向传输的卷积长短期记忆递归神经网络&#xff08;convolutional long short-ter…

Java Agent 探针技术

Java 中的 Agent 技术可以让我们无侵入性的去进行代理&#xff0c;最常用于程序调试、热部署、性能诊断分析等场景&#xff0c;现如今比较火热的分布式链路追踪项目Skywalking&#xff0c;就是通过探针技术去捕获日志&#xff0c;将数据上报OAP观察分析平台。 Java Agent 技术简…

Socket编程实现TCP、UDP样例

文章目录一.Socket简介二.Socket实现TCPTCP通信简介使用对象及方法简介代码实现服务端代码客户端代码三.Socket实现UDPUDP通信简介UDP程序的使用步骤代码实现服务端代码客户端代码一.Socket简介 socket套接字是通信的基石&#xff0c;是支持TCP/IP协议的路通信的基本操作单元.…

私企招聘:思特威社会招聘

关于我们 思特威&#xff08;上海&#xff09;电子科技股份有限公司 SmartSens Technology &#xff08;股票简称&#xff1a;思特威&#xff0c;股票代码&#xff1a;688213&#xff09;是一家从事CMOS图像传感器芯片产品研发、设计和销售的高新技术企业&#xff0c;总部设立…

pads logic 生成参考编号带分隔符以及不统计不贴元器件的BOM

1.查看BOM报告 &#xff0c;这里可以通过下面的方法 Step1:点击文件 Step2: 勾选材料清单&#xff0c;然后点击设置 Step3:在弹出的如下窗口&#xff0c;选择剪切板视图 &#xff0c;然后选择全选,然后复制&#xff0c;将数据粘贴到excel表格中即可。 2. 参考编号分隔符 …

以前不知道字节面试难在哪,现在体验到了,被虐的很惨

…(这里省略一些不清楚、不知道、忘记了之类的词藻&#xff0c;保留一丝尊严。) 接下来是关于redis哲学三连“是什么?为什么?怎么用?” 我把肚子里仅有的关于Redis的一滴墨水挤成了三滴&#xff0c;仍然没有给出他想要的。继续追问Redis的数据存储方式&#xff0c;操作方法…

微服务框架 SpringCloud微服务架构 微服务保护 30 初识Sentinel 30.1 雪崩问题及解决方案

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护30 初识Sentinel30.1 雪崩问题及解决方案30.1.1 雪崩问题30.1.2 总结30 初识Sentinel 30.1 雪崩问…

类别不平衡Class-imbalance解决方法

类别不平衡是指分类任务中不同类别的训练样例数目差别很大的情况。 1、扩大数据集 2、欠采样 欠采样&#xff08;under-sampling&#xff09;&#xff1a;对大类的数据样本进行采样来减少该类数据样本的个数&#xff0c;使其与其他类数目接近&#xff0c;然后再进行学习。 随…