第十二章 java基础-中间件-redis

系列文章目录

第一章java基础-基础

第二章 java基础-面向对象

第三章 java基础-API

第四章 java基础-mysql jdbc

第五章 java基础-springboot

第六章 java基础-mybatis mybatisplus

第七章 java基础-SPRING MVC

第八章 java基础-html css js vue

第九章 java基础-nginx

第十章 java基础-微服务

第十一章 java基础-SSO

第十二章 java基础-中间件-linux

第十二章 java基础-中间件-docker

第十二章 java基础-中间件-redis

第十二章 java基础-中间件-RabbitMQ

第十二章 java基础-中间件-ElasticSearch

第十二章 java基础-中间件-Quartz定时任务


前言

Redis诞生于2009年,全称Remote Dictionary Server远程词典服务器,是一个基于内存的键值型的NoSQL数据库。

redis是为了解决读取数据库慢的问题的。是一种非结构化数据。


一、redis简介

特征

  • 键值型,value支持多种不同数据结构,功能丰富

  • 单线程,每个命令都具备原子性

  • 低延迟,速度快(基于内存,IO多路复用,良好的编码)

  • 支持数据持久化(数据落地)

  • 支持主从集群、分片集群

  • 支持多语言客户端

数据结构

  

二、安装并启动redis

     2.1在docker里安装redis

       dokcer pull redislabs/rebloom:latest
       docker run --name redis -d -p 6379:6379 redislabs/rebloom:latest

      2.2 进入redis容器

       docker exec -it redis bash

    2.3 启动redis客户端

     redis-cli

       

三、redis可视化工具

   我们可以使用   Another-Redis-Desktop-Manager 进行redis管理

支持16个数据库

四、redis命令

    

通用指令是部分数据类型的,都可以使用的指令,常见的有:

  • KEYS:查看符合模板的所有key,*是所有的,?匹配一个

  • DEL:删除一个指定的key

  • EXISTS:判断key是否存在

  • EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除

  • TTL:查看一个KEY的剩余有效期

  • TYPE:查看指定key类型

  • SELECT: 切换数据库,默认有16个,下标为0~15

  • CONFIG:配置参数设置(set)以及查看(get)

  • FLUSHDB: 清空当前数据库中的key

  • FLUSHALL:清空所有数据库中的key

  • MULTI:开启事务

  • EXEC:执行事务,相当于提交事务

  • DISCARD:回滚事务

通过help [command] 可以查看一个命令的具体用法

KEY是string类型  值可以多种类型,常见 string  list hash等

String类型

key-value

string-string

命令说明案例
set添加key-valueset username admin
get根据key获取数据get username
strlen根据key获取对应value的长度strlen key
exists判断key是否存在exists username 返回1存在,0不存在
del删除Redis中的keydel username
keys用于查询符合条件的keykeys * 查询Redis中全部的key keys n?me 使用占位符获取数据 keys nam* 获取nam开头的数据
mset添加多个key-valuemset k1 v1 k2 v2 k3 v3
mget获取多个key的值mget k1 k2
append对某个key的值进行追加value内容append key value
type检查某个key的类型type key
select切换Redis数据库select 0~15 Redis中共有16个数据库
flushdb清空单个数据库flushdb
flushall清空全部数据库flushall
incr自动加1incr key
decr自动减1decr key
incrby指定数值加incrby key 10
decrby指定数值减decrby key 10
expire指定key的有效时间 单位是秒expire key 20 指定的key 20秒后失效
pexpire指定key的有效时间 单位是毫秒pexpire key 2000 指定的key 2000毫秒后失效
ttl检查key的剩余存活时间ttl key
persist撤销key的失效时间persist key

incrby(对整数进行操作、如果不是就报错)

  • 假设你有一个键名为 counter 的键,其当前值为 10。如果你执行 INCRBY counter 5,则 counter 的值将变为 15。

  • 如果 counter 这个键原本不存在,执行 INCRBY counter 5 后,它的值将被初始化为 0,然后再增加 5,所以最终的值会是 5

五、redis事务

redis中操作可以添加事务的支持.一项任务可以由多个redis命令完成,如果有一个命令失败导致入库失败时.需要实现事务回滚。

命令说明案例
multi标记一个事务开始127.0.0.1:6379> multi OK
exec执行所有multi之后发的命令127.0.0.1:6379> exec OK
discard丢弃所有multi之后发的命令127.0.0.1:6379> discard OK

六、Jedis客户端

引入

        <!--jedis-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.7.0</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.7.0</version>
            <scope>compile</scope>
        </dependency>

测试

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;

public class RedisTest {
//   初始化redis对象
    private Jedis jedis ;

    @BeforeEach
    public void setUp(){
        //    连接redis容器
        jedis =  new Jedis("192.168.144.160",6379);

    }
    @Test
      void testString(){
          String result = jedis.set("name1", "122");
          System.out.println(result);
          String name = jedis.get("name1");
          System.out.println(name);

      }
}

释放资源

@AfterEach
void tearDown() {
    if (jedis != null) {
        jedis.close();
    }
}

七、SpringDataRedis

SpringBoot已经提供了对SpringDataRedis的支持,使用非常简单:

依赖

        <!--spring-data-redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--Jackson依赖:序列化-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

配置文件

spring:
  redis:
    host: 196.168.144.160
    port: 6379

测试

@Resource
    private RedisTemplate<String, Object> redisTemplate;

    @Test
    void testString() {
        // 写入一条String数据
        redisTemplate.opsForValue().set("name", "虎哥");
        // 获取string数据
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println("name = " + name);
    }

序列化工具

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
        // 创建RedisTemplate对象
        RedisTemplate<String, 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;
    }
}

八、redis进阶


总结

jedis的目的是为了解决不经常变化的数据读取问题。已经广泛应用。说说大家的使用情形和问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值