java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot使用Redis

SpringBoot使用Redis方式

作者:code__laoq

文章介绍了SpringDataRedis操作本地Redis数据库的方法,包括Redis的基本概念、数据类型、命令以及在Java中的使用

前言

本文使用Spring Data Redis操作本地的Redis数据库,仅为学习中的记录。

Redis

简介

Redis索引

在redis中,索引从0开始,命令中含range时,起始索引是包含在内的。

如有String<name , code_laoq>,使用getrange name 1 3得到的字符串子串是ode。

而索引如果为负则表示是倒数的某个元素。如有List<weekday , [Monday,Tuesday,Wednesday,Thursday,Friday]>,使用lindex weekday -2得到的是List倒数第二个元素即Thursday。

数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

String(字符串)

Hash(哈希)

List(列表)

Set(集合)

zset(sorted set:有序集合)

zset的成员是唯一的,但score却可以重复。

Redis命令

Redis 数据管理

DEL key_name
EXISTS key_name
TYPE key_name
KEYS pattern
RENAME old_key_name new_key_name
RENAMENX old_key_name new_key_name
EXPIRE key_name expiration                 --设置指定key在[expiration]秒后过期
EXPIREAT key_name timestamp                --参数是UNIX时间戳(从1970年1月1日开始,到当前时间所经过的秒数)
PEXPIRE key_name milliseconds              --过期时间以毫秒计算
PEXPIREAT key milliseconds-timestamp       --UNIX时间戳以毫秒计算
PERSIST key_name
TTL key_name         --返回剩余的过期时间(以秒为单位)
PTTL key_name        --返回剩余的过期时间(以毫秒为单位)
MOVE key_name db_num

Redis 字符串(String)

SET key_name value
GETSET key_name value
SETEX key_name out_time value
PSETEX key_name expiration value
SETNX key_name value
MSET key_name1 value1 key_name2 value2 ... key_nameN valueN
MSETNX key_name1 value1 key_name2 value2 ... key_nameN valueN
APPEND key_name value
GET key_name
mget key_name1 key_name2 ... key_nameN
GETRANGE key_name start end
STRLEN key_name

Redis 哈希(Hash)

Redis 列表(List)操作命令

LPUSH key_name value_1 value_2 ... value_n    --每个数据用空格分隔
LPUSHX key_name value
RPUSH key_name value_1 value_2 ... value_n
RPUSHX key_name value
LINSERT key_name BEFORE existing_value new_value
LINSERT key_name AFTER  existing_value new_value
LLEN key_name
LINDEX key_name index
LRANGE key_name start stop
LREM key_name COUNT value
RPOP key_name

Redis 集合(Set)

引入Redis

导入Maven坐标

在Java中使用MySQL用的是JDBC接口,而操作Redis也有接口,常见的有Jedis、Lettuce和Spring Data Redis,Spring Data Redis是封装了前两个接口。

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

配置Redis数据库信息

blog: #这里填项目的名称缩写,不要照抄
  redis:
    host: localhost #也可以填远程的IP
    port: 6379 #端口号
    password: #密码,redis默认没密码,需要在配置文件里修改
    database: 8 #要连接的数据库号

编写配置类RedisConfiguration

在配置类中要

Redis数据库的配置信息

package blog.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**

@author code_laoq
@version 1.0
@date 2024/11/3 19:48
@description Redis数据库的配置信息
*/
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
log.info(“创建redis模板”);
RedisTemplate redisTemplate=new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}

操作Redis数据库

回忆之前操作MySQL使用什么对象,没错就是JDBCemplate对象。类似的,在SpringBoot中一般使用RedisTemplate对象操作Redis数据库。

org.springframework.data.redis.core.RedisTemplate;

RedisTemplate提供了redis各种操作、异常处理及序列化。

!!!Redis没有类似MySQL等关系型数据库的统一SQL语句,也就是说Redis操作不同类型的数据结构要用不同的语句。比如插入一个String类型的数据和List类型的数据要用不同的语句。

--String插入数据
SET name laoq
--List插入数据
RPUSH KEY_NAME VALUE1

因此每一种Redis数据结构的操作语句都要学习(大同小异),下面我将从RedisTemplate对象入手进行讲解。

RedisTemplate对象

RedisTemplate提供了redis各种操作、异常处理及序列化。而RedisTemplate中5种常见的OpsFor分别是:opsForValue()opsForList()opsForHash()opsForSet()OpsForZSet()。显而易见,他们分别是对Redis中的String、List、Hash、Set和Zset进行操作的方法。

opsForValue()

我们首先来看opsForValue()的原型。

public ValueOperations<K, V> opsForValue() {
        return this.valueOps;
    }

该方法返回了一个ValueOperations类型的接口,该接口中定义了操作redis字符串的17个方法。而调用RedisTemplate的opsForValue()方法则会返回ValueOperations接口的实现类对象DefaultValueOperations的属性。

我们一个一个来看ValueOperations的方法。

set()
void set(K key, V value);
void set(K key, V value, long timeout, TimeUnit unit);

set(K key, V value)方法对应 Redis的SET key value语句,用于插入一条数据,key和value分别是数据的键值。

而重载的set(K key, V value, long timeout, TimeUnit unit)方法对应Redis的SETEX key seconds value语句,插入一条含有效期的数据,timeout为过期时间,unit是时间单位。

下面是例子

@Test
public void testRedisString(){
    redisTemplate.opsForValue().set("name","code_laoq");
    redisTemplate.opsForValue().set("CAPTCHA","p2um",5, TimeUnit.MINUTES);//5分钟后过期
}
setIfAbsent()
Boolean setIfAbsent(K key, V value);
Boolean setIfAbsent(K key, V value, long timeout, TimeUnit unit);

setIfAbsent()方法对于Redis的SETNX key value,如果key对应的数据不存在就插入,否则不插入。参数同上 不再赘述

setIfPresent()
Boolean setIfPresent(K key, V value);
Boolean setIfPresent(K key, V value, long timeout, TimeUnit unit);

setIfAbsent()方法对于Redis的SET key value [EX seconds/PX milliseconds] XX,如果key对应的数据存在就插入并返回True,否则不插入返回False。相当于更新操作。

例子如下:

@Test
public void testRedisString(){
    redisTemplate.opsForValue().setIfPresent("CAPTCHA1","laoq",5, TimeUnit.MINUTES);
}

opsForList()

还是先看下方法原型

public ListOperations<K, V> opsForList() {
    return this.listOps;
}

和上面类似的,该方法返回了一个ListOperations类型的接口,该接口中定义了操作redis字符串的17个方法。而调用RedisTemplate的opsForList()方法则会返回ListOperations接口的实现类对象DefaultListOperations的属性。我们一个一个来看ListOperations的方法。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文