目录
初识Redis
认识NoSQL
关联的
非关联的编辑
认识Redis
安装Redis
1.1.安装Redis依赖
1.2.上传安装包并解压
该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:
图形化工具下载:Releases · lework/RedisDesktopManager-Windows · GitHub
Redis数据结构介绍
String类型
String类型的常见命令
思考:
Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?
例如,需要存储用户、商品信息到redis,有一个用户的id是1,有一个商品id恰好也是1
key的机构
Hash类型
Hash类型常见命令
List类型
List常用命令编辑
思考:
1、如何利用List结构模拟一个栈?
2、如何利用List结构模拟一个队列?
3、如何利用List结构模拟一个阻塞队列?
Set类型
Set常见命令编辑
SortedSet类型
SortedSet常见命令编辑
Jedis连接池
SpringDataRedis
SpringDataRedis的序列化方式方案一:
SpringDataRedis的序列化方式方案二:
StringRedisTemplate序列化


初识Redis
认识NoSQL

关联的

 非关联的
 


认识Redis

安装Redis
大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis.
此处选择的Linux版本为CentOS 7.
Redis的官方网站地址:https://redis.io/
1.1.安装Redis依赖
Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:
yum install -y gcc tcl1.2.上传安装包并解压
然后将提供的Redis安装包上传到虚拟机的任意目录:

例如,我放到了/usr/local/src 目录:(如果上传不了就切换root连接)

解压缩:
tar -xzf redis-6.2.6.tar.gz进入redis目录:
cd redis-6.2.6运行编译命令:
make && make install如果没有出错,应该就安装成功了。
默认安装地方

该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:
-  redis-cli:是redis提供的命令行客户端 
-  redis-server:是redis的服务端启动脚本 
-  redis-sentinel:是redis的哨兵启动脚本 
图形化工具下载:Releases · lework/RedisDesktopManager-Windows · GitHub

 
 
Redis数据结构介绍

 
String类型

String类型的常见命令

 
 
 
思考:
Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?
例如,需要存储用户、商品信息到redis,有一个用户的id是1,有一个商品id恰好也是1
key的机构

 

  
Hash类型

Hash类型常见命令

 
 

 
 
List类型

 List常用命令
 
   
   

思考:
1、如何利用List结构模拟一个栈?
入口和出口在同一边
2、如何利用List结构模拟一个队列?
入口和出口在不同边
3、如何利用List结构模拟一个阻塞队列?
入口和出口在不同边
出队时采用BLPOP或BRPOP
Set类型

 Set常见命令
 
 
 

SortedSet类型

 SortedSet常见命令
 
 
 
Redis的Java客户端

1、引入依赖
 <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.7.0</version>
        </dependency>2、建立连接
  @BeforeEach
    void setUp(){
//        1、建立连接
        jedis = new Jedis("虚拟机地址或者localhost", 6379);
//        2、设置密码
        jedis.auth("密码");
//        3、选择库
        jedis.select(0);
    }
3、测试Steing
    @Test
    void testString(){
//        存入数据
        String result = jedis.set("name", "虎哥");
        System.out.println("result="+result);
//        获取数据
        String name = jedis.get("name");
        System.out.println("name = "+name);
    }4、释放资源
 @AfterEach
    void tearDown(){
        if ( jedis!=null ){
            jedis.close();
        }
    }
Jedis连接池

public class JedisConnectionFactory {
    private static final JedisPool jedispPool;
    static {
        //配置连接词
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8);
        poolConfig.setMaxIdle(8);
        poolConfig.setMinIdle(0);
        poolConfig.setMaxWaitMillis(1000);
        //创建连接池对象
        jedispPool = new JedisPool(poolConfig,
                "虚拟机或者localhost",6379,1000,"密码");
    }
    public static Jedis getJedis(){
        return jedispPool.getResource();
    }
}
SpringDataRedis

 
1、引入依赖
<!--        redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
<!--连接池依赖-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>2、配置yml文件
spring:
  redis:
    host: 虚拟机或者localhost
    port: 6379
    password:密码
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 100ms
3、注入代码
package com.heima;
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.core.RedisTemplate;
@SpringBootTest
class RedisDemoApplicationTests {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    void contextLoads() {
        //写入一条string数据
        redisTemplate.opsForValue().set("name","虎哥");
        //获取string数据
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println(name);
    }
}

SpringDataRedis的序列化方式方案一:
 
引入依赖
<!--        JACKSON依赖-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
@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;
    }
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private Integer age;
}
package com.heima;
import com.heima.redis.pojo.User;
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.core.RedisTemplate;
@SpringBootTest
class RedisDemoApplicationTests {
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    @Test
    void contextLoads() {
        //写入一条string数据
        redisTemplate.opsForValue().set("name","虎哥");
        //获取string数据
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println(name);
    }
    @Test
    void testSaveUser(){
//        写入数据
        redisTemplate.opsForValue().set("user:100",new User("虎哥",31));
//    获取数据
        User o = (User)redisTemplate.opsForValue().get("user:100");
        System.out.println(" o = "+o);
    }
}

SpringDataRedis的序列化方式方案二:
StringRedisTemplate序列化
 
 
 
 
package com.heima;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.heima.redis.pojo.User;
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.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
@SpringBootTest
class RedisStringTests {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Test
    void contextLoads() {
        //写入一条string数据
        stringRedisTemplate.opsForValue().set("name","虎哥");
        //获取string数据
        Object name = stringRedisTemplate.opsForValue().get("name");
        System.out.println(name);
    }
    private static final ObjectMapper mapper = new ObjectMapper();
    @Test
    void testSaveUser() throws JsonProcessingException {
        //创建对象
        User user = new User("虎哥", 21);
//        手动序列化
        String json = mapper.writeValueAsString(user);
//        导入数据
        stringRedisTemplate.opsForValue().set("user:200",json);
//        获取数据
        String jsonUser = stringRedisTemplate.opsForValue().get("user:200");
//        手动反序列化
        User user1 = mapper.readValue(jsonUser, User.class);
        System.out.println("user1 = "+user1);
    }
}
 
 




















