redis的使用-jedis及spring-data-redis及spring-boot-starter-dada-redis

汪志业
2023-12-01

之前介绍了redis是什么,现在来介绍一下redis的使用

redis的使用,大部分情况下就这三种,尤其是第三种比较多

jedis

导入依赖

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

使用Jedis

Jedis jedis = new Jedis("127.0.0.1", 6379);

jedis.set("mykey1", "this is my key1"); // string

jedis.get("mykey1"); // 获取指定key

jedis.del("mykey1") // 删除指定key

jedis.hset("mykeyhash", "username", "root"); // hash

jedis.lpush("mykeyList", "a","b","c","d","e"); // list

jedis.sadd("mykeySet", "a","a","w"); // set

jedis.zadd("mykeyZSet", 60, "root"); // zset

jedis.close();

用连接池使用Jedis

为了提高redis的连接效率,我们可以用连接池


        JedisPoolConfig config = new JedisPoolConfig();
        // 连接池的最大连接数
        config.setMaxTotal(20);
        // 最大空闲的连接数
        config.setMaxIdle(5);
        // 最小的空闲连接数
        config.setMinIdle(3);
        // 假设连接池没有连接,客户端需要等待的时间,单位是毫秒
        config.setMaxWaitMillis(5000);

        JedisPool pool = new JedisPool(config, "127.0.0.1", 6379);
        Jedis jedis = pool.getResource();

然后正常使用就行,记得,使用完 close掉,会把连接归还给连接池

spring-data-redis

spring-data-redis也有连接池,并且会进行自动管理,提供了一个封装程度很高的RedisTemplate类,还把redis客户端的大量API封装成了接口,支持redis那五种数据类型的操作

在Redistemplate中,有两类方法经常使用,opsForXXX、boundXXXOps,这个XXX指的是我们value的类型,前者没有指定指定操作的key,可以在一个连接内,或者说一个事务内,操作多个key以及多个value,后者是制定了一个key,在一个连接内,或者说一个事务内,只能操作这个key以及这个key对应的value

导入依赖

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>2.3.4.RELEASE</version>
        </dependency>

配置redis属性

<!--JedisPoolConfig 连接池参数配置-->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!--最大空闲实例数-->
        <property name="maxIdle" value="300" />
        <!--最大活跃实例数-->
        <property name="maxTotal" value="600" />
        <!--创建实例时最长等待时间-->
        <property name="maxWaitMillis" value="1000" />
        <!--创建实例时是否验证-->
        <property name="testOnBorrow" value="true" />
    </bean>

    <!--JedisConnectionFactory 跟配置数据库连接池类似,需要配置JedisConnectionFactory来通过服务器或者连接池的方式获取redis服务器的连接-->
    <bean id="connectionFactory"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="127.0.0.1"/>
        <property name="port" value="6379"/>
        <property name="usePool" value="true"/>
        <property name="poolConfig" ref="poolConfig"/>
    </bean>

    <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
    <bean id="valueSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>


    <!-- redis模板配置  spring-data-redis提供了一个基础的泛型RedisTemplate封装了基础的crud操作-->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="connectionFactory"/>
        <property name="defaultSerializer" ref="stringRedisSerializer"/>
        <property name="keySerializer" ref="stringRedisSerializer"/>
        <property name="valueSerializer" ref="valueSerializer"/>

    </bean>

使用

 @Autowired
 private RedisTemplate<String,String> redisTemplate;

 redisTemplate.opsForValue().set("key", "value");
 String value = redisTemplate.opsForValue().get("key");

注意,这儿类型声明的分别是key和value的属性,value如果是对象,这个对象必须进行序列化,因为在redis中存储对象,redis存储的还是字符串,它会把数据转换为数组的形式存储,所以在存取的时候,涉及到序列化与反序列化

spring-boot-starter-data-redis

导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.3.4.RELEASE</version>
        </dependency>

配置redis相关属性

#配置springboot和redis整合,可以直接在程序中注入RedisTemplate对象操作redis数据库spring:
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    database: 0

使用

使用方式与上面一致,直接注入使用即可

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

 类似资料: