spring - redis(一)

redis 缓存

介绍

**Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)**与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability).
速度快:
tomcat: 150-220/秒
nginx: 3-5万/秒
redis: 写 8.6万/秒 读 11.2万/秒 ~ 平均10万次/秒

redis 缓存机制机制介绍

说明 : 使用缓存机制的主要目的就是为了降低用户访问物理设备(数据库)的频次,从缓存服务器中直接获取数据,快速的相应用户,提高整体的查询速度,用户体验更好。
  • 缓存机制采用的是key - value key必须唯一
  • 采用的是c语言进行开发
  • 运行环境是在内存中
  • 因为内存中的数据断电即擦除,redis使用持久化(写入磁盘)的方式进行保存数据
  • 采用LRU算法进行内存优化

redis 安装

下载地址

在这里插入图片描述

在这里插入图片描述

安装 redis

将下载好的安装包 解压 输入命令 (不建议 使用最新版本 下面演示 使用的是5.04 版本)

tar -xvf redis-6.0.6.tar.gz\?_ga\=2.84668761.1119595938.1597553332-1312809166.1597553332

在这里插入图片描述

进入redis解压好的目录进行 编译 和安装

编译 make

在这里插入图片描述

安装 make install

在这里插入图片描述

启动 redis

要求 :进入redis的根目录中执行
特点 : redis每次启动都会读取配置文件,如果需要启动多台redis 则需要准备多个配置文件
启动命令 : redis-server redis.conf
在这里插入图片描述
成功 演示
在这里插入图片描述

redis 开启 后台运行 修改 redis配置文件redis.conf

1.修改ip 地址绑定 vim redis.conf 显示行号 :set nu
在这里插入图片描述
2.取消 保护模式
在这里插入图片描述
3.开启 后台运行
在这里插入图片描述
4. 后台 运行效果
在这里插入图片描述
5.关闭 redis
命令 :ps -ef | grep redis //检索 redis 服务
在这里插入图片描述
命令 kill -9 12606 停止 指定 redis
在这里插入图片描述

命令 redis-cli -p 6379 shutdown 停止 指定 端口号的redis
在这里插入图片描述

命令 redis-cli -p 6379 进入redis 的客户端中 6379位redis的默认端口 如果进入的是默认端口可以不写-p 6379
在这里插入图片描述

redis 入门 案例

添加 jar包

<!--spring整合redis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
        </dependency>

编辑测试 api

package com.jt.test;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
import redis.clients.jedis.params.SetParams;

import java.util.Map;

@SpringBootTest //加上这个注解表示 需要依赖spring容器 进行操作 从容器中获取对象 如果不需要容器注入对象则可以不写
public class TestRedis {
    /**
     * 通过spring整合第三方框架 自动注入值
     */
    @Autowired
    private Jedis jedis;
    /**
     * Redis 入门案例
     * 测试报错  检查linux的防火墙  检查 redis的配置
     */
    @Test
    void testRedis(){
        String host="192.168.126.129";//host 主机ip地址 ip写安装redis的主机ip
        //创建redis对象
        //Jedis jedis =new Jedis(host,6379);
        //1.向Redis中存取数据 在java中叫 Jedis
        jedis.set("aa", "下雨了");
        //2.获取数据
        String aa = jedis.get("aa");
        System.out.println(aa);

    }
    @Test
    void testRedis2(){
        String host="192.168.126.129";//host 主机ip地址 ip写安装redis的主机ip
        //创建redis对象
        Jedis jedis =new Jedis(host,6379);
        //1.判断是否存在某个key
        if (jedis.exists("aa")){
            //如果存在 设定超时时间  100秒以后失效
            jedis.expire("aa", 100);
            //线程暂停2秒
            try {
                Thread.sleep(2000);
                Long ttl = jedis.ttl("aa");
                System.out.println("还能活"+ttl);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            jedis.persist("aa");
        }


    }

    /**
     * redis  是key  value  结构
     * 当进行赋值是 一定要确定 key中是否有值
     */
    @Test
    void testRedis3(){
        String host="192.168.126.129";//host 主机ip地址 ip写安装redis的主机ip
        //创建redis对象
        Jedis jedis =new Jedis(host,6379);
        //1.向Redis中存取数据 在java中叫 Jedis
        jedis.set("boss", "下雨了");
        jedis.flushDB();

        if (jedis.exists("boss")){
            System.out.println("数据已存在");
        }else{
            jedis.set("boss", "没下雨");
        }
        //key 如果存在 则不会添加
        jedis.setnx("boss", "潘石屹");


        System.out.println(jedis.get("boss"));

    }

    /**
     * 为数据添加时间 保证原子性操作
     * 原子性:一起完成 一起回滚
     * 小结 : setnx 如果可以存在 则不对key赋值
     *         setex 保证原子性操作 并且添加超时时间
     */
    @Test
    void testRedis4(){
        String host="192.168.126.129";//host 主机ip地址 ip写安装redis的主机ip
        //创建redis对象
        Jedis jedis =new Jedis(host,6379);
        jedis.setex("aaa", 20, "123456");//一起执行 满足原子性执行
//        jedis.set("aa", "2135");
//        jedis.expire("aa", 20);

    }
    /**
     * private static final String XX = "xx";  key存在才能赋值
     *  private static final String NX = "nx";  只有key不存在时才能赋值
     *  private static final String PX = "px"; 毫秒
     *  private static final String EX = "ex";  秒
     */
    @Test
    void testRedis5(){
        String host="192.168.126.129";//host 主机ip地址 ip写安装redis的主机ip
        //创建redis对象
        Jedis jedis =new Jedis(host,6379);
        SetParams setParams=new SetParams();
        setParams.nx().ex(20);
       jedis.set("abcd", "54555",setParams );
        System.out.println(jedis.get("abcd"));


    }

    /**
     * 测试hash数据类型
     */
    @Test
    void testRedis6(){
        String host="192.168.126.129";//host 主机ip地址 ip写安装redis的主机ip
        //创建redis对象
        Jedis jedis =new Jedis(host,6379);
        jedis.hset("person", "name", "tomcat");
        jedis.hset("person", "age", "100");
        Map<String, String> person = jedis.hgetAll("person");
        System.out.println(person);


    }
    /**
     * 测试list集合数据类型
     */
    @Test
    void testRedis7(){
        String host="192.168.126.129";//host 主机ip地址 ip写安装redis的主机ip
        //创建redis对象
        Jedis jedis =new Jedis(host,6379);
        jedis.lpush("list", "1" , "2 ", "3", "4", "5");
        String list = jedis.rpop("list");
        System.out.println(list);
    }
    /**
     * 实现redis 的事物控制
     */
    @Test
    void testRedis8(){
        String host="192.168.126.129";//host 主机ip地址 ip写安装redis的主机ip
        //创建redis对象
        Jedis jedis =new Jedis(host,6379);
        Transaction multi = jedis.multi();
        try {
            multi.set("aa", "sdss");
            multi.exec();//执行事物
        }catch(Exception e){
            multi.discard();//回滚事物
        }
    }
}

spring 整合redis

# 配置单台redis
redis.host=192.168.126.129
redis.port=6379

编辑配置类

package com.jt.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import redis.clients.jedis.Jedis;

@Configuration  //标识我是配置类
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {

    @Value("${redis.host}")
    private String  host;
    @Value("${redis.port}")
    private Integer port;

    @Bean
    public Jedis jedis(){
        //数据写死?????????
        return new Jedis(host,port);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值