深圳网站建设网站设计软文推广,网站设计标题,广告公司简称,中天建设集团好不好在Java中操作Redis 1. 在Java中操作Redis1.1 Redis的Java客户端1.2 Spring Data Redis使用方式1.2.1 介绍1.2.1 环境搭建1.2.3 操作常见类型数据 1. 在Java中操作Redis
1.1 Redis的Java客户端
Redis 的 Java 客户端很多#xff0c;常用的几种#xff1a;
JedisLettuceSpri… 在Java中操作Redis 1. 在Java中操作Redis1.1 Redis的Java客户端1.2 Spring Data Redis使用方式1.2.1 介绍1.2.1 环境搭建1.2.3 操作常见类型数据 1. 在Java中操作Redis
1.1 Redis的Java客户端
Redis 的 Java 客户端很多常用的几种
JedisLettuceSpring Data Redis
Spring 对 Redis 客户端进行了整合提供了 Spring Data Redis在Spring Boot项目中还提供了对应的Starter即 spring-boot-starter-data-redis
1.2 Spring Data Redis使用方式
1.2.1 介绍
Spring Data Redis 是 Spring 的一部分提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务对 Redis 底层开发包进行了高度封装。在 Spring 项目中可以使用Spring Data Redis来简化 Redis 操作。
网址https://spring.io/projects/spring-data-redis
Spring Boot提供了对应的Startermaven坐标
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependencySpring Data Redis中提供了一个高度封装的类RedisTemplate对相关api进行了归类封装,将同一类型操作封装为operation接口具体分类如下
ValueOperationsstring数据操作SetOperationsset类型数据操作ZSetOperationszset类型数据操作HashOperationshash类型的数据操作ListOperationslist类型的数据操作
1.2.1 环境搭建
1). 导入Spring Data Redis的maven坐标
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency2). 配置Redis数据源
在application-dev.yml中添加
sky:redis:host: localhostport: 6379password: 123456database: 10解释说明
database:指定使用Redis的哪个数据库Redis服务启动后默认有16个数据库编号分别是从0到15。
可以通过修改Redis配置文件来指定数据库的数量。
3). 编写配置类创建RedisTemplate对象
package com.sky.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;Configuration
Slf4j
public class RedisConfiguration {Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info(开始创建redis模板对象);RedisTemplate redisTemplate new RedisTemplate();// 设置redis的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);// 设置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}
解释说明
当前配置类不是必须的因为 Spring Boot 框架会自动装配 RedisTemplate 对象但是默认的key序列化器为
JdkSerializationRedisSerializer导致我们存到Redis中后的数据和原始数据有差别故设置为
StringRedisSerializer序列化器。
4). 通过RedisTemplate对象操作Redis
在test下新建测试类
package com.sky.test;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;SpringBootTest
public class SpringRedisTest {AutowiredRedisTemplate redisTemplate;Testpublic void testRedisTemplate(){// string操作类型ValueOperations valueOperations redisTemplate.opsForValue();// hash操作类型HashOperations hashOperations redisTemplate.opsForHash();// list操作类型ListOperations listOperations redisTemplate.opsForList();// set操作类型SetOperations setOperations redisTemplate.opsForSet();// zet操作类型ZSetOperations zSetOperations redisTemplate.opsForZSet();}1.2.3 操作常见类型数据
1). 操作字符串类型数据
Testpublic void testRedisString(){// set, get, setex, setnxValueOperations valueOperations redisTemplate.opsForValue();valueOperations.set(name, lsm);String name (String) valueOperations.get(name);System.out.println(name);valueOperations.set(code, 1234, 3, TimeUnit.MINUTES);valueOperations.setIfAbsent(lock, 1);valueOperations.setIfAbsent(lock, 2);System.out.println(valueOperations.get(lock));}2). 操作列表类型数据
Testpublic void testRedisList(){// lpush lrange rpop llenListOperations listOperations redisTemplate.opsForList();listOperations.leftPush(list, a);listOperations.leftPushAll(list, b, c, d ); // 依次入栈栈顶为右边栈底为左边String tmp (String) listOperations.leftPop(list);System.out.println(tmp: tmp); // tmp: dLong size listOperations.size(list);System.out.println(size: size);List list listOperations.range(list, 0, -1);System.out.println(list: list); // list: [c, b, a]}3). 操作哈希类型数据 // hset hget hdel hkeys hvalsHashOperations hashOperations redisTemplate.opsForHash();hashOperations.put(key_1, name, lsm);hashOperations.put(key_1, age, 20);hashOperations.put(key_1, sex, 男);String name (String) hashOperations.get(key_1, name);System.out.println(name: name); // name: lsmLong delete hashOperations.delete(key_1, sex);System.out.println(delete: delete); // delete: 1Set key_1 hashOperations.keys(key_1);System.out.println(key_1: key_1); // key_1: [name, age]List key_2 hashOperations.values(key_1);System.out.println(key_2: key_2); // key_2: [lsm, 20]}4). 操作集合类型数据
Testpublic void testRedisSet() {// sadd smembers scard sinter sunion sremSetOperations setOperations redisTemplate.opsForSet();setOperations.add(set1, a, b, c, d);setOperations.add(set1, e);Set set1 setOperations.members(set1);System.out.println(set1: set1); // set1: [a, d, c, b, e]Long size setOperations.size(set1);System.out.println(size: size); // size 5setOperations.remove(set1, e);setOperations.add(set2, a, b, x, y);Set intersect setOperations.intersect(set1, set2);System.out.println(intersect: intersect); // intersect: [a, b]Set union setOperations.union(set1, set2);System.out.println(union: union); // union: [a, x, b, d, y, c]}5). 操作有序集合类型数据
Testpublic void testRedisZset() {// zadd zrange zincrby zremZSetOperations zSetOperations redisTemplate.opsForZSet();zSetOperations.add(zset, a, 10);zSetOperations.add(zset, b, 15);zSetOperations.add(zset, c, 12);Set zset1 zSetOperations.range(zset, 0, -1);System.out.println(zset1: zset1); // zset1: [a, c, b]zSetOperations.incrementScore(zset, c, 10);zSetOperations.remove(zset, a, b);}6). 通用命令操作
// keys exists type delSet keys redisTemplate.keys(*);System.out.println(keys: keys); // keys: [list, key_1, set1, zset, set2]Boolean name redisTemplate.hasKey(name);Boolean set1 redisTemplate.hasKey(set1);System.out.println(name: name); // name: falseSystem.out.println(set1: set1); // set1: truefor(Object key : keys){DataType type redisTemplate.type(key);System.out.println(type);}redisTemplate.delete(list);}