目录
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.bootgroupId>
- <artifactId>spring-boot-starter-data-redisartifactId>
- 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
-
- RedisTemplate
-
- //默认的Key序列化器为:JdkSerializationRedisSerializer
- redisTemplate.setKeySerializer(new StringRedisSerializer());
- redisTemplate.setHashKeySerializer(new StringRedisSerializer());
-
- redisTemplate.setConnectionFactory(connectionFactory);
-
- return redisTemplate;
- }
-
- }
5、获取对应对象
optFor*来获取想要操作的对象:

以opsForValue为例,这就相当于在操作字符串类型

| 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的值
- }

| 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);
- }
- }
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
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
- }
- }
无序 元素的值唯一

| 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
setList = setObj.members("set1"); - for (String one : setList) {
- System.out.println(one);
- }
-
- //删值:
- setObj.remove("set1","b");
- }
集合中的元素是根据每个元素的权重进行排序,且每个元素不能重复,升序排序

| 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
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");
- }
| 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
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);
- }