Redis基础--黑马程序员Redis入门到实战教程

130 阅读2分钟

一:认识NOSQL

1.非结构化--数据结构不固定 image.png

2.无关联

3.查询方式非SQL image.png

4.BASE-无事务

⭐与SQL进行对比

image.png

二:认识Redis

image.png

三:Redis安装

四:Redis常用数据结构

image.png

1.通用命令

image.png keys不建议在生产环境中使用

2.String类型

image.png

image.png

问题:如何区分不同类型的key?例:商品id,用户id都是1

image.png

3.Hash类型

image.png

常见命令:

image.png

PS:

MSET:对一个key中的值设置多个键值对

MGET: 从一个key对应值中取多个键值对

4.List类型

image.png

5.Set类型

image.png

6.SortedSet类型

image.png

五:Redis的Java客户端

ps:Redis快速入门看PPT

Jedis连接池

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,推荐使用Jedis连接池代替Jedis的直连方式。


public class JedisConnectionFactory {
    private static final JedisPool jedisPool ;
    
    static {
       JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
       //最大连接
       jedisPoolConfig.setMaxTotal(8);
       //最大空闲连接
        jedisPoolConfig.setMaxIdle(8);
        //最小空闲连接
        jedisPoolConfig.setMinIdle(o);
        //设置最长等待时间, ms
        jedisPoolConfig.setMaxwaitMillis(200);
        jedisPool = new JedisPool(jedisPoolConfig,"192.168.150.101"6379,
                    1000,"123321");
    }
    //获取jedis对象
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}

RedisTemplate工具类

image.png

SpringBoot整合Redis:

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.配置文件

spring:
    redis:
        host: 192.168.150.101
        port: 6379
        password: 123321
        lettuce:
            pool:
                max-active: 8 #最大连接
                max-idle: 8 #最大空闲连接
                min-idle: 0 #最小空闲连接
                max-wait: 100 #连接等待时间

3.注入RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

4.编写测试


@SpringBootTest
public class RedisTest i
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    void testString() {
        //插入一条string类型数据
        redisTemplate.opsForValue().set ( "name""李四");//读取一条string类型数据
        Object name = redisTemplate.opsForValue( ).get ( "name") ;System.out.println( "name = " + name) ;
    }
}

SpringDataRedis序列化方式

image.png

方案一:

自定义RadisTemplate的序列化方式

为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入jison结果中,存入Redis,会带来额外的内存开销。

image.png

方案二:

image.png

Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程:

@Autowired
private StringRedisTemplate stringRedisTemplate;// JSON工具

private static final ObjectMapper mapper = new 0bjectMapper();
@Test
void testStringTemplate() throws JsonProcessin'gException {
    //准备对象
    User user = new User("虎哥",18);//手动序列化
    String json = mapper.writeValueAsString(user);//写入—条数据到redis
    stringRedisTemplate.opsForValue( ).set( "user:200",json);
    //读取数据
    String val = stringRedisTemplate.opsForValue().get( "user:200");//反序列化
    User user1 = mapper.readValue (val, User.class);system.out.println( "user1 = " + user1);
   }