目录
一、SpringBoot整合Redis
二、常见数据类型:
1、字符串:
2、哈希 hash :
3、list列表:
4、Set集合:
5、权重有序集合set
6、常用指令:
一、SpringBoot整合Redis
1、SpringBoot Data Redis:
Spring Data Redis中提供了一个高度封装的类:RedisTemplate,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:
类名 | 解释 |
ValueOperations | 简单K-V操作 |
SetOperations | set类型数据操作 |
ZSetOperations | zset类型数据操作 |
HashOperations | 针对map类型的数据操作 |
ListOperations | 针对list类型的数据操作 |
2、导入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3、配置xml文件:
spring:
redis:
host: localhost
port: 6379
database: 0 # redis默认会创建16个数据库,当前是保存在0号数据库
jedis:
pool:
max-active: 8 #最大连接数
max-wait: 1ms # 连接池最大等待阻塞时间
max-idle: 4 # 连接池最大空闲链接
min-idle: 0 #连接池中最小空闲链接
4、书写配置类:
Redis提供的默认序列模式会导致key值存入的时候变形,所以我们需要书写一个配置类来规范这一操作,避免key不对应问题。
import org.springframework.cache.annotation.CachingConfigurerSupport;
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;
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
//默认的Key序列化器为:JdkSerializationRedisSerializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
5、获取对应对象
optFor*来获取想要操作的对象:
以opsForValue为例,这就相当于在操作字符串类型
二、常见数据类型:
1、字符串:
SET key value | 设置指定key的值1,重复设置会覆盖value,设置的值均为字符串类型 |
GET key | 获取指定key的值 |
SETEX key seconds value | 设置指定key的值,并将 key 的过期时间设为 seconds 秒(验证码服务) |
SETNX key value | 只有在 key 不存在时设置 key 的值 |
测试用例:
在SpringBoot中的应用:
@Test
void testString() {
redisTemplate.opsForValue().set("name2","123"); //设置一个字符串类型的键值对
String name = (String) redisTemplate.opsForValue().get("name2"); //取出key=names的值
System.out.println(name);
//设置一个跟时间相关的key 相当于setex
redisTemplate.opsForValue().set("timeKey","timeForTen",10, TimeUnit.SECONDS);
//setnx 只有在 key 不存在时设置 key 的值
Boolean flag = redisTemplate.opsForValue().setIfAbsent("name2", "456");
System.out.println(flag); //返回false,因为name2已经存在,没有设置name2的值
}
哈希 hash :
HSET key field value | 将哈希表 key 中的字段 field 的值设为 value |
HGET key field | 获取存储在哈希表中指定字段的值 |
HDEL key field | 删除存储在哈希表中的指定字段 |
HKEYS key | 获取哈希表中所有字段 |
HVALS key | 获取哈希表中所有值 |
HGETALL key | 获取在哈希表中指定 key 的所有字段和值 |
测试用例:
在SpringBoot中的应用:
@Test
void testHash(){
//获取操作对象
HashOperations hashObj = redisTemplate.opsForHash();
//存值
hashObj.put("key01","name","xiaoSong");
hashObj.put("key01","age","12");
hashObj.put("key01","sex","man");
//取值
String name = (String) hashObj.get("key01", "name");
System.out.println(name);
//获取全部的键:
Set keys = hashObj.keys("key01");
for (Object one : keys) {
System.out.println(one);
}
//获取所有的值:
List values = hashObj.values("key01");
for (Object one : values) {
System.out.println(one);
}
}
3、list列表:
1、list是Redis能实现优先队列的基础
2、列表中是允许有重复元素的
LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 |
LRANGE key start stop | 获取列表指定范围内的元素 |
RPOP key | 移除并获取列表最后一个元素 |
LLEN key | 获取列表长度 |
BRPOP key1 [key2 ] timeout | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时 或发现可弹出元素为止 |
测试用例:
SpringBoot中的应用
@Test
void testForList(){
//获取操作对象
ListOperations listObj = redisTemplate.opsForList();
//存值
listObj.leftPush("list1","a");
listObj.leftPushAll("list1","b","c","d");
//取值
List<String> values = listObj.range("list1",0,-1);
for (String one : values) {
System.out.println(one); // d b c a
}
//获取列表长度:
Long lsize = listObj.size("list1");
int size = lsize.intValue(); //long转化为int类型
for (int i = 0; i < size; i++) {
//出队列:
String value = (String) listObj.rightPop("list1");
System.out.println(value); //a b c d
}
}
4、Set集合:
无序 元素的值唯一
SADD key member1 [member2] | 向集合添加一个或多个成员 |
SMEMBERS key | 返回集合中的所有成员 |
SCARD key | 获取集合的成员数 |
SINTER key1 [key2] | 返回给定所有集合的交集 |
SUNION key1 [key2] | 返回所有给定集合的并集 |
SDIFF key1 [key2] | 返回给定所有集合的差集 |
SREM key member1 [member2] | 移除集合中一个或多个成员 |
用例:
SpringBoot中应用:
@Test
void testForSet(){
//获取对象
SetOperations setObj = redisTemplate.opsForSet();
//存值:
setObj.add("set1","b","c","a");
//取值
Set<String> setList = setObj.members("set1");
for (String one : setList) {
System.out.println(one);
}
//删值:
setObj.remove("set1","b");
}
5、权重有序集合set
集合中的元素是根据每个元素的权重进行排序,且每个元素不能重复,升序排序
ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的 分数 |
ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合中指定区间内的成员 |
ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量 increment |
ZREM key member [member ...] | 移除有序集合中的一个或多个成员 |
测试用例:
SpringBoot 中的应用:
@Test
void testForZset(){
//获取对象
ZSetOperations zsetObj = redisTemplate.opsForZSet();
//存值
zsetObj.add("zset01","a",10.0);
zsetObj.add("zset01","b",12.0);
zsetObj.add("zset01","c",4.0);
zsetObj.add("zset01","d",7.0);
//取值
Set<String> list = zsetObj.range("zset01", 0, -1);
for (String one : list) {
System.out.println(one);
}
//加分
zsetObj.incrementScore("zset01","b",20.0);
//删除
zsetObj.remove("zset01","a","c");
}
6、常用指令:
KEYS pattern | 查找所有符合给定模式( pattern)的 key |
EXISTS key | 检查给定 key 是否存在 |
TYPE key | 返回 key 所储存的值的类型 |
TTL key | 返回给定 key 的剩余生存时间(TTL, time to live),以秒为单位 |
DEL key | 该命令用于在 key 存在是删除 key |
测试用例:
SpringBoot应用:
@Test
void testCommon(){
//获取所有的key
Set<String> keys = redisTemplate.keys("*");
for (String one : keys) {
System.out.println(one);
}
//判断key是否存在
Boolean name = redisTemplate.hasKey("key01");
System.out.println(name);
//删除指定key
Boolean flag = redisTemplate.delete("zset01");
System.out.println(flag);
//获取指定key对应的value
DataType type = redisTemplate.type("key01");
System.out.println(type);
}