Redis零基础教程及SpringBoot整合Redis与使用

一.概述与下载安装

Redis是一款NoSql系列的非关系型数据库,而我们所知道的mysql是一款关系型的数据库,关系型数据库的数据之间是有关联的并且数据存放在硬盘里,而非关系型的数据库的数据之间是没有关联的并且数据存放在内存当中。
redis官网,这里我也提供了网盘的下载版本。

链接:https://pan.baidu.com/s/177CSfTLAaKOUZmH_kJvWvA
提取码:9p9y

下载好安装包包直接解压就算安装成功了,非常的简单。解压成功后
在这里插入图片描述
然后了解下面三个文件即可:

redis.windows.conf:配置文件
redis-cli.exe:redis的客户端
redis-server.exe:redis服务器端

双击redis-server.exe启动redis服务器端:
在这里插入图片描述
双击redis-cli.exe启动redis的客户端
在这里插入图片描述

二.redis讲解

1.redis数据结构

redis数据存储的方式是键值对的方式:key:value,其中key只能是字符串的方式,value可以有5种方式(但到最后其实也只是字符串):

  1. 字符串类型 string
  2. 哈希类型 hash:map格式
  3. 列表类型 list:linkedlist格式。支持重复元素
  4. 集合类型 set:不允许重复元素
  5. 有序集合类型sortedset:不允许重复元素,且元素有顺序

2.redis命令行操作

首先看下面的讲解在对照者看后面的命令行

. 字符串类型 string
	1. 存储: set key value
		127.0.0.1:6379> set username zhangsan
		OK
	2. 获取: get key
		127.0.0.1:6379> get username
		"zhangsan"
	3. 删除: del key
		127.0.0.1:6379> del age
		(integer) 1. 哈希类型 hash
	1. 存储: hset key field value
		127.0.0.1:6379> hset myhash username lisi
		(integer) 1
		127.0.0.1:6379> hset myhash password 123
		(integer) 1
	2. 获取: 
		* hget key field: 获取指定的field对应的值
			127.0.0.1:6379> hget myhash username
			"lisi"
		* hgetall key:获取所有的field和value
			127.0.0.1:6379> hgetall myhash
			1) "username"
			2) "lisi"
			3) "password"
			4) "123"
			
	3. 删除: hdel key field
		127.0.0.1:6379> hdel myhash username
		(integer) 1. 列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)
	1. 添加:
		1. lpush key value: 将元素加入列表左表
			
		2. rpush key value:将元素加入列表右边
			
			127.0.0.1:6379> lpush myList a
			(integer) 1
			127.0.0.1:6379> lpush myList b
			(integer) 2
			127.0.0.1:6379> rpush myList c
			(integer) 3
	2. 获取:
		* lrange key start end :范围获取
			127.0.0.1:6379> lrange myList 0 -1
			1) "b"
			2) "a"
			3) "c"
	3. 删除:
		* lpop key: 删除列表最左边的元素,并将元素返回
		* rpop key: 删除列表最右边的元素,并将元素返回
④. 集合类型 set : 不允许重复元素
	1. 存储:sadd key value
		127.0.0.1:6379> sadd myset a
		(integer) 1
		127.0.0.1:6379> sadd myset a
		(integer) 0
	2. 获取:smembers key:获取set集合中所有元素
		127.0.0.1:6379> smembers myset
		1) "a"
	3. 删除:srem key value:删除set集合中的某个元素	
		127.0.0.1:6379> srem myset a
		(integer) 1. 有序集合类型 sortedset:不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
	1. 存储:zadd key score value
		127.0.0.1:6379> zadd mysort 60 zhangsan
		(integer) 1
		127.0.0.1:6379> zadd mysort 50 lisi
		(integer) 1
		127.0.0.1:6379> zadd mysort 80 wangwu
		(integer) 1
	2. 获取:zrange key start end [withscores]
		127.0.0.1:6379> zrange mysort 0 -1
		1) "lisi"
		2) "zhangsan"
		3) "wangwu"

		127.0.0.1:6379> zrange mysort 0 -1 withscores
		1) "zhangsan"
		2) "60"
		3) "wangwu"
		4) "80"
		5) "lisi"
		6) "500"
	3. 删除:zrem key value
		127.0.0.1:6379> zrem mysort lisi
		(integer) 1

①string类型

在这里插入图片描述

②hash类型

在这里插入图片描述

③列表类型

在这里插入图片描述

④set类型(不允许重复元素)

在这里插入图片描述

⑤ sortedset(有序集合类型)

在这里插入图片描述

⑥ 通用命令

  1. keys * : 查询所有的键
  2. type key : 获取键对应的value的类型
  3. del key:删除指定的key value

3.持久化

redis持久化有两种方案:

①RDB:默认方式,不需要进行配置,默认就使用这种机制,在一定的间隔时间中,检测key的变化情况,然后持久化数据

redis.windows.conf如下:
在这里插入图片描述
对上面的文件内容作如下修改

save 900 1
save 300 10
save 10 5

接下来演示就需要用命令行的方式来启动redis服务器这样才可以生效:
在这里插入图片描述
下面演示注意最后那个目录下出现了dump.rdb文件:
在这里插入图片描述
接下来关掉服务器重新双击启动服务器再来到客户端查询如下:
在这里插入图片描述

② AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据

接下来我们看redis.windows.conf如下:
在这里插入图片描述
这里我演示一下appendfsync everysec,接下来演示就需要用命令行的方式来启动redis服务器这样才可以生效:
在这里插入图片描述
那么这个时候应该会出现appendonly.aof文件。
然后打开客户端执行下面内容:

set username 123

关掉服务器需要用命令行redis-server.exe redis.windows.conf来启动redis服务器,然后在客户端查询如下:
在这里插入图片描述

三.Jedis操作redis

所需要的jar包放在这里了

链接:https://pan.baidu.com/s/1MeZL5RdkOZOqo6vC5BUHOA
提取码:a15z

1.入门案例

import org.junit.Test;
import redis.clients.jedis.Jedis;
public class test {
    
    
    @Test
    public void test(){
    
    
        //1.获取Jedis连接
        Jedis jedis = new Jedis("localhost", 6379);
        //2.操作
        jedis.set("name","jack");
        //3.关闭连接
        jedis.close();
    }
}

运行后得到查询如下:
在这里插入图片描述

2.五大类型操作演示

1.string类型

import org.junit.Test;
import redis.clients.jedis.Jedis;
public class test {
    
    
    /**
     * string类型的演示
     */
    @Test
    public void test() throws InterruptedException {
    
    
        //默认配置为:"localhost", 6379
        Jedis jedis = new Jedis();
        //1.set,get,del方法
        System.out.println("1.set,get,del方法演示:");
        jedis.set("name","tom");
        String name = jedis.get("name");
        System.out.println(name);
        jedis.del("name");
        name = jedis.get("name");
        System.out.println(name);
        //2.setex()方法,下面表示设置password:123,该键值对存活时间是2秒
        System.out.println("2.setex()方法演示");
        jedis.setex("password",2,"123");
        String password  = jedis.get("password");
        System.out.println(password);
        Thread.sleep(3000);
        password  = jedis.get("password");
        System.out.println(password);
        //3.关闭连接
        jedis.close();
    }
}

在这里插入图片描述
2.hash类型

import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.Map;
public class test {
    
    
    /**
     * hash类型的演示
     */
    @Test
    public void test() throws InterruptedException {
    
    
        //默认配置为:"localhost", 6379
        Jedis jedis = new Jedis();
        //1.hset,hget,hdel方法
        System.out.println("演示1.hset,hget,hdel方法:");
        jedis.hset("user","name","jack");
        jedis.hset("user","age","22");
        jedis.hset("user","gender","male");
        System.out.println(jedis.hget("user","name"));
        System.out.println(jedis.hget("user","age"));
        System.out.println(jedis.hget("user","gender"));
        jedis.hdel("user","name");
        System.out.println(jedis.hget("user","name"));
        //2.hgetAll方法
        System.out.println("演示2.hgetAll方法:");
        Map<String, String> user = jedis.hgetAll("user");
        for (String s : user.keySet()) {
    
    
            System.out.println(s+":"+user.get(s));
        }
        //3.关闭连接
        jedis.close();
    }
}

在这里插入图片描述
3.list类型

import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Map;
public class test {
    
    
    /**
     * list类型的演示
     */
    @Test
    public void test() throws InterruptedException {
    
    
        //默认配置为:"localhost", 6379
        Jedis jedis = new Jedis();
        //1.lpush,rpush,lrange方法
        System.out.println("演示1.lpush,rpush,lrange方法:");
        jedis.lpush("myList","a","b","c");
        jedis.rpush("myList","a","b","c");
        List<String> myList = jedis.lrange("myList", 0, -1);
        for (String s : myList) {
    
    
            System.out.print(s+" ");
        }
        System.out.println();
        //2.演示lpop,rpop,方法
        System.out.println("演示2.演示lpop,rpop,方法:");
        jedis.lpop("myList");
        jedis.rpop("myList");
        myList = jedis.lrange("myList", 0, -1);
        for (String s : myList) {
    
    
            System.out.print(s+" ");
        }
        //3.关闭连接
        jedis.close();
    }
}

在这里插入图片描述
4.set类型

import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.Set;
public class test {
    
    
    /**
     * set类型的演示
     */
    @Test
    public void test() throws InterruptedException {
    
    
        //默认配置为:"localhost", 6379
        Jedis jedis = new Jedis();
        //1.sadd,smembers方法
        System.out.println("演示1.sadd,smembers方法:");
        jedis.sadd("mySet","a","b","c");
        Set<String> mySet = jedis.smembers("mySet");
        for (String s : mySet) {
    
    
            System.out.print(s+" ");
        }
        System.out.println();
        //2.srem方法
        System.out.println("演示2.srem方法:");
        jedis.srem("mySet","a");
        mySet = jedis.smembers("mySet");
        for (String s : mySet) {
    
    
            System.out.print(s+" ");
        }
        //3.关闭连接
        jedis.close();
    }
}

在这里插入图片描述
5.sortedset类型

import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.Set;
public class test {
    
    
    /**
     * sortedset类型的演示
     */
    @Test
    public void test() throws InterruptedException {
    
    
        //默认配置为:"localhost", 6379
        Jedis jedis = new Jedis();
        //1.zadd,zrange方法
        System.out.println("演示1.zadd,zrange方法:");
        jedis.zadd("mySorted",92.0,"tom");
        jedis.zadd("mySorted",98,"jack");
        jedis.zadd("mySorted",97,"jerry");
        Set<String> mySorted = jedis.zrange("mySorted", 0, -1);
        for (String s : mySorted) {
    
    
            System.out.print(s+" ");
        }
        System.out.println();
        //2.zrem方法
        System.out.println("演示:2.zrem方法");
        jedis.zrem("mySorted","tom");
        mySorted = jedis.zrange("mySorted", 0, -1);
        for (String s : mySorted) {
    
    
            System.out.print(s+" ");
        }
        //3.关闭连接
        jedis.close();
    }
}

在这里插入图片描述

3.连接池使用介绍

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.Set;
public class test {
    
    
    /**
     * sortedset类型的演示
     */
    @Test
    public void test() throws InterruptedException {
    
    
        /**
         * #最大活动对象数     
         * redis.pool.maxTotal=1000    
         * #最大能够保持idel状态的对象数      
         * redis.pool.maxIdle=100  
         * #最小能够保持idel状态的对象数   
         * redis.pool.minIdle=50    
         * #当池内没有返回对象时,最大等待时间    
         * redis.pool.maxWaitMillis=10000    
         * #当调用borrow Object方法时,是否进行有效性检查    
         * redis.pool.testOnBorrow=true    
         * #当调用return Object方法时,是否进行有效性检查    
         * redis.pool.testOnReturn=true  
         * #“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.  
         * redis.pool.timeBetweenEvictionRunsMillis=30000  
         * #向调用者输出“链接”对象时,是否检测它的空闲超时;  
         * redis.pool.testWhileIdle=true  
         * # 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.  
         * redis.pool.numTestsPerEvictionRun=50  
         * #redis服务器的IP    
         * redis.ip=xxxxxx  
         * #redis服务器的Port    
         * redis1.port=6379   
         */
        //0.获取连接池设置对象
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //设置最大连接数
        jedisPoolConfig.setMaxTotal(30);
        //设置最大空闲时间
        jedisPoolConfig.setMaxIdle(20);
        //1.创建jedis连接池对象
        JedisPool jedisPool = new JedisPool();
        JedisPool jedisPool1 = new JedisPool(jedisPoolConfig, "localhost", 6379);
        //2.获取jedis对象
        Jedis resource = jedisPool.getResource();
        /*
        这里使用我们前面讲的方法即可
         */
    }
}

三.SpringBoot整合redis

1.创建好SpringBoot项目后引入redis启动器:

<!-- 配置使用redis启动器 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.在application.properties文件加入下面内容

spring.redis.host=127.0.0.1
spring.redis.port=6379

RedisTemplate常用方法总结
使用RedisTemplate操作Redis数据库
打开服务器,接下来测试(我已经设置了name="jack"):

package com.jack.database_exp;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DatabaseExpApplicationTests {
    
    
    @Autowired
    RedisTemplate<String,String> redisTemplate;
    @Test
    public void contextLoads(){
    
    
        String name = redisTemplate.boundValueOps("name").get();
        System.err.println(name);
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44932835/article/details/111162829
今日推荐