Redis--苍穹

一、Redis入门

1.1、Redis简介

1.2 、redis启动

redis-server redis.windows.conf

1.3、redis连接

  • -h 指定IP
  • -p 指定端口
  • -a 密码
redis-cli.exe -h localhost -p 6379 -a 731206

二、redis数据类型

2.1、redis的五种数据类型

2.2、redis的各种数据类型的特点

三、Redis的常用命令

3.1、字符串操作命令

3.2、哈希操作命令

3.3、列表操作命令

3.4、集合操作命令

3.5、有序集合操作命令

3.6、通用命令

四、在Java程序中操作Redis

4.1、操作步骤说明

4.1.1、Redis的Java客户端

4.2.2、Spring Data Redis 使用方式

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.RedisConnectionFailureException;
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;
    }
}
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.connection.DataType;
import org.springframework.data.redis.core.*;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@SpringBootTest
public class SpringDataRedisTest {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void testRedisTemplate(){
        System.out.println ( redisTemplate );
        //操作字符串对象
        ValueOperations valueOperations = redisTemplate.opsForValue ();
        //操作哈希
        HashOperations hashOperations = redisTemplate.opsForHash ();
        //操作列表
        ListOperations listOperations = redisTemplate.opsForList ();
        //操作无序集合
        SetOperations setOperations = redisTemplate.opsForSet ();
        //操作有序集合
        ZSetOperations zSetOperations = redisTemplate.opsForZSet ();
    }

    /**
     * 操作字符串类型的数据
     */
    @Test
    public void testString(){
        //set get setex setnx
        redisTemplate.opsForValue ().set ( "city","北京" );
        String city = (String) redisTemplate.opsForValue ().get ( "city" );
        System.out.println (city);
        redisTemplate.opsForValue ().set ( "code","1234",3, TimeUnit.MINUTES );
        redisTemplate.opsForValue ().setIfAbsent ( "lock",1 );//setex
        redisTemplate.opsForValue ().setIfAbsent ( "lock",2 );


    }
    /**
     * 操作哈希类数据
     */
    @Test
    public void testHash(){
        //hset hget hdel hkeys hvals
        HashOperations hashOperations = redisTemplate.opsForHash ();
        hashOperations.put ( "100","name","tom" );
        hashOperations.put ( "100","age","20" );

        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","age" );
    }
/**
 * 操作列表类型数据
 */
@Test
public void testList(){
    //lpush lrange rpop llen
    ListOperations listOperations = redisTemplate.opsForList ();
    listOperations.leftPushAll ( "mylist","a","b","c" );
    listOperations.leftPush ( "mylist","d" );
    List mylist = listOperations.range ( "mylist", 0, -1 );
    System.out.println ( mylist );
    listOperations.rightPop ( "mylist" );
    Long size = listOperations.size ( "mylist" );
    System.out.println ( size );

}
/**
 * 无序集合类型数据
 */
@Test
public void testSet(){
    //sadd smember scard sinsert sunion srem
    SetOperations setOperations = redisTemplate.opsForSet ();
    setOperations.add ( "set1","a","b","c","d" );
    setOperations.add ( "set2","a","b","x","y" );
    Set members = setOperations.members ( "set1" );
    System.out.println ( members );
    Long size = setOperations.size ( "set1" );
    System.out.println ( size );
    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" );

}
/**
 * 操作有序集合
 */
@Test
public void testZset(){
    //zadd zrange zincrby zrem
    ZSetOperations zSetOperations = redisTemplate.opsForZSet ();
    zSetOperations.add ( "zset1","a",10 );
    zSetOperations.add ( "zset1","b",12 );
    zSetOperations.add(  "zest1","c",9);
    Set zset1 = zSetOperations.range ( "zset1", 0, -1 );
    System.out.println ( zset1 );
    zSetOperations.incrementScore ( "zset1","c",10 );
    zSetOperations.remove ( "zset1","a","b" );
}
/**
 * 通用命令
 */
@Test
public void testCommom(){
    //keys exists del
    Set keys = redisTemplate.keys ( "*" );
    System.out.println ( keys );
    Boolean name = redisTemplate.hasKey ( "name" );
    Boolean set1 = redisTemplate.hasKey ( "set1" );
    for (Object key : keys) {
        DataType type = redisTemplate.type ( key );
        System.out.println ( type.name () );
    }
    redisTemplate.delete ( "mylist" );
}
}

五、店铺营业状态设置

5.1、需求分析设计

5.2、代码开发

import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {
    public static final String KEY="SHOP_STATUS";
    @Autowired
    private RedisTemplate redisTemplate;
    @ApiOperation ( "设置店铺的营业状态" )
    @PutMapping("/{status}")
    public Result setStatus(@PathVariable Integer status){
        log.info ( "设置店铺的营业状态,{}",status==1?"营业中":"打烊中" );
        redisTemplate.opsForValue ().set ( KEY,status );
        return Result.success ();
    }

    /**
     * 获取店铺营业状态
     * @return
     */
    @GetMapping("/status")
    @ApiOperation ( "获取店铺营业状态" )
    public  Result<Integer> getStatus(){
        Integer shop_status = (Integer) redisTemplate.opsForValue ().get ( KEY );
        log.info ( "获取店铺营业状态,{}",shop_status==1?"营业中":"打烊中");
        return Result.success (shop_status);

    }
}

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

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

相关文章

计算机毕业设计选题推荐-跑腿平台微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

OSPF高级特性

OSPF高级特性(1) 一、OSPF不规则区域类型 产生原因&#xff1a;区域划分不合理&#xff0c;导致的问题 1、非骨干区域无法和骨干区域保持连通 2、骨干区域被分割 造成后果&#xff1a;非骨干区域没和骨干区域相连&#xff0c;导致ABR将不会帮忙转发区域间的路由信息。非骨干区…

前聚美优品运维负责人谈CMDB

导读CMDB大家并不陌生&#xff0c;在运维的工作中几乎都会用到CMDB&#xff0c;在聚美内部我们也称它为资产系统&#xff0c;管理整个服务器的资产&#xff0c;当然也包括一些配置上的变更。 讲师介绍 张川&#xff0c;前聚美优品运维负责人。任职聚美优品四年间&#xff0c;负…

我的云栖大会之旅:见证云计算创新的15年

云栖大会&#xff0c;曾经是一次不可思议的科技之旅&#xff0c;却如今已见证了我对云计算世界的15年关注和发展。第一次踏上云栖大会之旅&#xff0c;我记得是在2009年。那时的云计算还是一个新生事物&#xff0c;而云栖大会正是其中的奠基石。 我清楚地记得那个炎热的夏天&am…

leetcode做题笔记206. 反转链表

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; 输入&am…

使用VS2017打包安装程序如何修改默认安装路径

步骤如下&#xff1a; 首先找到安装项目 打开文件系统 点击鼠标右键&#xff0c;view-文件系统。这时打开文件系统 找到Application Folder的属性窗口 修改DefaultLocation的属性 如果想改变默认的安装路径&#xff0c;修改DefaultLocation的属性。 去掉计算机的名称。 完…

改进YOLOv3!IA-YOLO:恶劣天气下的目标检测

恶劣天气条件下从低质量图像中定位目标还是极具挑战性的任务。现有的方法要么难以平衡图像增强和目标检测任务&#xff0c;要么往往忽略有利于检测的潜在信息。本文提出了一种新的图像自适应YOLO (IA-YOLO)框架&#xff0c;可以对每张图像进行自适应增强&#xff0c;以提高检测…

基于PyTorch的中文情绪分析器设计与开发

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、相关基础理论2.1 主流深度学习框架2.2 神经网络2.2.1 神经网络基础 二、中文情感分类模型构建3.1 开发环境3.2 数据部分3.3 文本特征提取3.3.1、过滤标点符号3.3.2 中文分词、单词过滤 三 运行结果与分析五 结…

JAVA基础(JAVA SE)学习笔记(十)多线程

前言 1. 学习视频&#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第三阶段&#xff1a;Java高级应用 9.异常处理 10.多线程 11.常用类和基础API 12.集合框架 13.泛型 14…

Android任务栈和启动模式

Andrcid中的任务栈是一种用来存放Activity实倒的容器。任务最大的特点就是先进后出&#xff0c;它主要有两个基本操作&#xff0c;分别是压栈和出栈。通常Andaid应用程序都有一个任务栈&#xff0c;每打开一个Activity时&#xff0c;该Activity就会被压入任务栈。每销毁一个Act…

day02 矩阵 2023.10.26

1.矩阵 2.矩阵乘法 3.特殊矩阵 4.逆矩阵 5.正交矩阵 6.几何意义 7.齐次坐标 8.平移矩阵 9.旋转矩阵 10.缩放矩阵 11.复合运算

linux杀毒软件下载、安装(在线安装、离线安装)

下载 ClamAVNet 离线安装 # 离线安装 rpm -ivh --prefix/usr/local/clamav clamav*linux.x86_64.rpm # 添加用户组和组成员 groupadd clamav useradd -g clamav clamav # 创建日志目录、病毒库目录和套接字目录 mkdir -p /usr/local/clamav/logs mkdir -p /usr/local/clamav/…

Flask Run运行机制剖析

一、前言 已经玩了一段时间Flask &#xff0c;每次调用app.run(或flask run)就可以启动应用&#xff0c;今天我们就来了解一下run背后究竟做了些什么事情。 注&#xff1a;通过上面几行代码就可以启动一个Flask服务器&#xff0c;打开浏览器输入http://127.0.0.1:5000, 页面上…

【广州华锐互动】飞机诊断AR远程指导系统为工程师提供更多支持

随着科技的发展&#xff0c;飞机的维护工作也在不断进步。其中&#xff0c;AR&#xff08;增强现实&#xff09;技术的应用使得远程运维成为可能。本文将探讨AR在飞机诊断远程指导系统中的应用&#xff0c;以及它对未来航空维护模式的影响。 AR远程指导系统是一种使用增强现实技…

taro全局配置页面路由和tabBar页面跳转

有能力可以看官方文档&#xff1a;Taro 文档 页面路由配置&#xff0c;配置在app.config.ts里面的pages里&#xff1a; window用于设置小程序的状态栏、导航条、标题、窗口背景色&#xff0c;其配置项如下&#xff1a; tabBar配置&#xff1a;如果小程序是一个多 tab 应用&…

MSQL系列(十一) Mysql实战-Inner Join算法底层原理及驱动表选择

Mysql实战-Inner Join算法驱动表选择 前面我们讲解了BTree的索引结构&#xff0c;及Mysql的存储引擎MyISAM和InnoDB,也详细讲解下 left Join的底层驱动表 选择, 并且初步了解 Inner join是Mysql 主动选择优化的驱动表&#xff0c;知道索引要建立在被驱动表上 那么对于Inner j…

【java学习—十】操作集合的工具类Collections(8)

文章目录 1. 操作集合的工具类&#xff1a; Collections2. 应用3. 查找、替换3.1. max 与 min3.2. 根据Comparator返回max(min) 3.3. frequency 与 replaceAll4. 同步控制 1. 操作集合的工具类&#xff1a; Collections Collections 是一个操作 Set 、List 和 Map 等集合的工具…

揭示沉浸式展览设计方案中的创新展示技术

随着数字多媒体技术在展览设计方案中的广泛应用&#xff0c;让传统的静态展示方式&#xff0c;走向了更为生动、立体的动态化设计模式&#xff0c;而其中最令人瞩目的当属沉浸式展览展示&#xff0c;它以其独特的展示方式和引人入胜的体验效果&#xff0c;引发了大量的关注和热…

解决找不到msvcr120.dll无法继续执行问题的5个方法,快速解决dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是找不到msvcr120.dll的错误。这个错误通常发生在运行某些程序或游戏时&#xff0c;它会导致程序无法正常启动或运行。那么&#xff0c;如何解决找不到msvcr120.dll的问题呢&#xff1f;下面我…

深度学习数据集大合集—疾病、植物、汽车等

最近又收集了一大批深度学习数据集&#xff0c;今天分享给大家&#xff01;废话不多说&#xff0c;直接上数据&#xff01; 1、招聘欺诈数据集 招聘欺诈数据集&#xff1a;共收集了 200,000 条数据&#xff0c;来自三个网站。 该数据集共收集了 200.000 条数据&#xff0c;分别…