Redis 应用

155 阅读2分钟

Jedis基本用法

  1. 引入依赖
<dependency>
    <groupId>redis.clents</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>
  1. 建立连接
private Jedis jedis;

@BeforEach
void setUp() {
    // 建立连接
    jedis = new Jedis("服务器地址",端口号);
    // 设置密码
    jedis.auth("密码");
    // 选择库
    jedis.select(库);
}
  1. 使用redis
@Test
void testString() {
    // 存入数据
    jedis.set("name", "虎哥");
    // 取出数据
    String name = jedis.get("name");
    Systen.out.println(name);
}

@Test
void testHash() {
    // 存入数据
    jedis.hset("user:1", "name","Jack");
    jedis.hset("user:1", "age","21");
    // 取出数据
    Map<String, String> map = jedis.hgetAll("user:1");
    Systen.out.println(map);
}
  1. 释放连接
@AfterEach
void tearDown() {
    if(jedis != null) {
        jedis.close();
    }
}

Jedis连接池

  1. 创建连接池
public class JedisConnectionFactory {
    private static final JedisPool jedispool;
    
    static {
        // 配置连接池
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8);
        poolConfig.setMaxIdle(8);
        poolConfig.setMinIdle(0);
        poolConfig.setMaxWaitMillis(1000);
        // 创建连接池对象
        jedisPool = new JedosPool(poolconfig, "服务器地址", 端口号, 延迟, "密码");
    }
    
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}
  1. 建立连接
private Jedis jedis;

@BeforEach
void setUp() {
    // 建立连接
    jedis = JedisConnectionFactory.getJedis();
    // 设置密码
    jedis.auth("密码");
    // 选择库
    jedis.select(库);
}

使用和释放同上

SpringDataRedis

SpringData是Spring中数据操作模块,包括对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRidis。

  • 提供了对不同Redis客户端的整合(Lettuce和Jedis)
  • 提供了RedisTemplate统一API来操作Redis
  • 支持Redis的发布订阅模型
  • 支持Redis哨兵和Redis集群
  • 支持基于Lettuce的响应式编程
  • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
  • 支持基于Redis的JDKCollection实现

redisTemplate工具类

API返回值类型说明
redisTemplate.opsForValue()ValueOperations操作String类型数据
redisTemplate.opsForHash()HashOperations操作Hash类型数据
redisTemplate.opsForList()ListOperations操作List类型数据
redisTemplate.opsForSet()SetOperations操作Set类型数据
redisTemplate.opsForZSet()ZSetOperations操作SortedSet类型数据
redisTemplate通用命令

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>
  1. 配置文件
spring:
    redis:
        host: 主机地址
        port: 端口号
        password: 密码
        lettuce:
            pool:
                max-active: 8 # 最大连接
                max-idle: 8 # 最大空闲连接
                min-idel: 0 # 最小空闲连接
                max-wait: 100 # 连接等待时间
  1. 使用(存在序列化问题)
@SpringBootTest
public class RedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void testString(){
        // 插入一条string类型数据
        redisTemplate.opsForValue().set("name","李四");
        // 读取一条string类型数据
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println("name = "+name);
    }
}
  1. StringRedisTemplate的使用
@Autowired
private StringRedisTemplate stringRedisTemplate;
// JSON工具
private static final ObjectMapper mapper = new ObjectMapper();
@Test
void testStringTemplate() throws JsonProcessingException {
    // 准备对象
    User user =new User("虎哥", 18);
    // 手动序列化
    String json = mapper.writeValueAsString(user);
    //写入一条数据到redis
    stringRedisTemplate.opsForValue().set("user:200", json);

    // 读取数据
    String val = stringRedisTemplate.opsForValue().get("user:20");
    // 反序列化
    User userl = mapper.readValue(val,User.class);
    System.out.println("user1 = "+ user1);
}