Redis入门教程,打造第一个NoSQL(内存/缓存)数据库,Spring-boot整合Redis基础教程!

1、Redis简介

Redis 是由C语言编写,完全开源免费且遵守BSD协议,是一个高性能的key-value非关系型数据库,它有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供List列表,Set集合,String字符串,Hash散列等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

2、Redis优势

  1. 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。远高于传统关系型数据库,如Mysql临界值为2000次/s。
  2. 企业级应用极为广泛,它十分适合存储少、访问量巨大的场景,支持单机+集群使用
  3. Redis运行在内存中但是可以持久化到磁盘,在对不同数据集进行高速读写时可以权衡内存。
  4. 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  5. 丰富的特性 – Redis还支持 publish/subscribe,通知,key 过期等等特性。

3、Redis单机版安装

①下载:我们以Window 下安装为例,Redis项目不正式支持Windows。但是,微软开发并维护了针对Win64的Windows版本,下载并在任意目录解压 Redis-x64-3.2.100.zip。

下载地址:https://github.com/MicrosoftArchive/redis/releases

针对Linux、Ubuntu下安装,请参看https://redis.io/download或者https://www.w3cschool.cn/redis/redis-install.html

解压后安装目录如下图:

②我们开打redis.windows.conf,修改或添加如下配置:

#允许连接Redis实例地址,默认情况只允许本地连接,将默认注释掉,外网就可以连接Redis了
bind 127.0.0.1
#Redis端口
port 6379
#允许Redis后台启动
deamonizeyes
#表示登录该Redis实例所需要的密码
requirepass 123456
#有了密码登录,就可以关闭保护模式了
protected-mode no

③打开cmd命令进入redis(如E:\javaworkspace\Redis-x64-3.2.100)目录,输入命令启动Redis:redis-server.exe redis.windows.conf

或者在Redis根目录下创建一个启动Redis.bat,里面代码为redis-server.exe redis.windows.conf。

启动后如下图所示:当前界面不能关闭,关闭后Redis服务终止。

④我们开打一个cmd窗口,进入Redis目录,亲自测试一下,输入代码redis-cli -a 123456进入系统,设置Key为"mykey",Value为"abcd1234",然后我们在读取一下"mykey",将键值取出来。

整个过程如图所示:

⑤至此,单机版Redis安装并启动成功了。

4、Spring-boot整合Redis基础教程(包含Jedis简单使用教程)

①项目创建Spring-boot Redis项目,项目默认使用Redis的工具是Lettuce,但大多数用户还是习惯使用Jedis,因此我们在依赖中排除Lettuce,引入Jedis,依赖情况如下:

        <!--默认使用的Redis工具是Lettuce,如果使用Jedis,需要排除Lettuce井引入Jedis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 引入jedis-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

②接下来在application.properties中配置Redis连接信息,如下,每个配置均有详细介绍。配置信息会注入到RedisProperties中。Spring-boot默认提供了两个最基本操作Redis的实例,分别是RedisTemplateStringRedisTemplate,后者通过字符串来进行操作。

#使用Redis库编号,Redis中提供了16个database,编号0~15
spring.redis.database=0
#Redis实例地址
spring.redis.host=127.0.0.1
#Redis端口号
spring.redis.port=6379
#Redis登录密码
spring.redis.password=123456
#Redis连接池最大连接数
spring.redis.jedis.pool.max-active=8
#Redis连接池最大空闲连接数
spring.redis.jedis.pool.max-idle=8
#最大阻塞等待时间,-1没有限制
spring.redis.jedis.pool.max-wait=-1ms
#Redis连接池最小空闲连接数
spring.redis.jedis.pool.min-idle=0

③创建一个BookReis实体类,方便我们测试。该实体类我们继续用id、name、author为字段,分别表示书id,书名,作者。

package springbootlearnBasic.Redis;
import java.io.Serializable;

public class BookRedis implements Serializable {
    private Integer id;
    private String name;
    private String author;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
}

④创建一个RedisController,用来给BookReis实体类赋值/取值,并通过StringRedisTemplate和RedisTemplate来操作Redis库。

ops1.set("name","三国演义")表明向Redis中存储一条记录;ops1.get("name")将之读出来。

ops2.set("book1",book1obj)表明向Redis中存储一个对象;(BookRedis) ops2.get("book1")将之读出来。

package springbootlearnBasic.Redis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RedisController {
    //注入RedisTemplate,可以用来操作对象Object
    @Autowired
    RedisTemplate redisTemplate;
    //注入StringRedisTemplate,其中的key和value都是字符串String
    @Autowired
    StringRedisTemplate stringRedisTemplate;
    @GetMapping(value = "/redis",produces = "application/json;charset=utf-8")
    public String redistest(){
        //第一条操作字符串:通过opsForValue、opsForZSet、opsForSet等方法完成Redis库的读写
        ValueOperations<String,String> ops1 = stringRedisTemplate.opsForValue();
        //赋值key>>name,value>>三国演义
        ops1.set("name","三国演义");
        //取值key>>name
        String name =ops1.get("name");

        //第二条操作对象:通过opsForValue、opsForZSet、opsForSet等方法完成Redis库的读写
        ValueOperations ops2 =redisTemplate.opsForValue();
        //创建一个book1obj对象
        BookRedis book1obj = new BookRedis();
        book1obj.setId(1);
        book1obj.setName("皮皮鲁");
        book1obj.setAuthor("郑渊洁");
        //给对象赋值key>>book1,value>>book1obj对象
        ops2.set("book1",book1obj);
        //取值key>>book1
        BookRedis book1 =(BookRedis) ops2.get("book1");
        return ("第一条记录value为:"+name+",第二个对象value为:"+book1.getName()+book1.getAuthor());
    }
}

⑤启动项目,在浏览器中输入http://localhost:8080/redis,可以看到返回结果,同时在Redis库中也有了相应的数据。

 

我们通过Redis管理工具RDM,也可以看到Redis内部库的结构及数据,如下: 

 

Jedis简单使用教程

①我们创建一个JedisController熟悉一下jedis的使用,Jedis是 Redis官方首选的Java 客户端开发包,是一个非常小和理智的redisjava客户端,灵活且易于使用,我们在做一些轻量级开发需要使用Redis时,可以选择使用Jedis进行简单的各项操作

这里我们通过一个姓名以及对应分数实例来进行演示:首先通过jedis来存储相应数据到Redis,然后通过jedis来输出成员、分数以及添加分数、条件查找等操作。

Jedis jedis =new Jedis("127.0.0.1",6379)表示测试jedis通过性。

jedis.auth("123456")表示设置密码,此密码和Redis密码一致。

jedis.ping()表示输出pong则jedis连接成功。

jedis.flushDB()表示清空Redis库,此操作需要谨慎。

package springbootlearnBasic.Redis;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.Map;

@RestController
public class JedisController {
    @GetMapping(value = "/jedis",produces = "text/plain;charset=utf-8")
    public String jedistest(){
        //创建一个返回结果集
        Map<String,Object> returnmap= new HashMap<>();

        //测试jedis通过性
        Jedis jedis =new Jedis("127.0.0.1",6379);
        //jedis需要重新设置密码否则会报错NOAUTH Authentication required
        jedis.auth("123456");
        //输出pong则jedis连接成功
        returnmap.put("jedis是否连接成功",jedis.ping());
        //清空Redis数据库,此操作需要谨慎
        jedis.flushDB();
        //创建一个姓名及对应分数的map对象
        Map<String,Double> map =new HashMap<String,Double>();
        map.put("Alan",60.0);
        map.put("Jack",70.5);
        map.put("Tom",83.0);
        //过jedis来存储相应数据到Redis,key>>rank
        jedis.zadd("rank", map);

        //zrange返回所有成员
        returnmap.put("返回所有成员",jedis.zrange("rank", 0, -1));
        //zrangeWithScores返回带有分数的所有成员,字符串由ASCII码表示
        returnmap.put("返回带有分数的所有成员",jedis.zrangeWithScores("rank", 0, -1));
        //zincrby增加成员分数并返回
        jedis.zincrby("rank", 0.5, "Alan");
        returnmap.put("返回Alan添加0.5后的分数",jedis.zscore("rank", "Alan"));
        //zrangeByScore返回分数在60到70之间的成员
        returnmap.put("返回分数在60到70之间的成员",jedis.zrangeByScore("rank", 60, 71));
        return (returnmap.toString());
    }
}

②启动项目,在浏览器中输入http://localhost:8080/jedis,可以看到返回结果,同时在Redis库中也有了相应的数据。

  

 我们通过Redis管理工具RDM,可以看到Jedis构建的Redis内部库的结构及数据,如下: 

5、总结

①通过本教程我们了解Redis的特点和优势,它是一个NoSQL非关系型数据库,通过Key-Value进行存储和应用。

②我们在Windows平台搭建并启动了单机版Redis,进行了简单的登录、赋值和取值应用。

③我们通过Spring-boot整合Redis,完成了String和Object赋值取值应用。

④我们通过Jedis完成了简单的Redis库操作,它是非常方便易用的。

至此,我们已经完成了Redis基础入门,可以完成一些轻量级的NoSQL应用了,后续还可以继续学习Redis集群整合方案和配置,实现大并发级别的应用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值