使用 Java 操作 Redis
Jedis
1. 概述
Jedis 是一款使用 Java 操作 Redis 的工具,有点类似于 JDBC
2. 引入依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
3. 操作
// 创建 jedis 客户端对象 Jedis jedis = new Jedis("39.108.6.119", 6379); // 选择使用一个库,默认 0 号库 jedis.select(0); // 清空当前库 jedis.flushDB(); //设置 redis 字符串数据 jedis.set("key", "value"); //存储数据到列表中 jedis.lpush("list", "value1"); jedis.lpush("list", "value2"); jedis.lpush("list", "value3"); // 更多操作 ... // 释放资源 jedis.close();
具体 API 参考官网文档: http://www.javadoc.io/doc/redis.clients/jedis/latest/index.html
SpringBoot 整合 Redis
1. 概述
SpringData 提供了 RedisTemplate 和 StringRedisTemplate,后者是前者的子集。两个模板基本一致,不同之处体现在操作的数据类型不同。RedisTemplate 中 key 和 value 泛型都是 Object,可以存储一个对象。而 StringRedisTemplate 的两个泛型都是 String,只能存储字符串
2. 引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
3. 操作
@SpringBootTest(classes = RedisSpringbootApplication.class) @RunWith(SpringRunner.class) public class TestRedisTemplate { @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private RedisTemplate redisTemplate; @Test public void test() { stringRedisTemplate.opsForValue().set("name", "jack"); String name = stringRedisTemplate.opsForValue().get("name"); // 更多操作... } }
具体 API 参考官网文档: http://docs.spring.io/spring-data/redis/docs/current/api/
4. 序列化
无论使用 StringRedisTemplate 还是 RedisTemplate,都会对 key 和 value 进行序列化
Spring-Data-Redis 的序列化方式是通过实现 RedisSerializer 接口,每一种实现都对应不同的序列化方式
4.1 JDK 序列化
org.springframework.data.redis.serializer.JdkSerializationRedisSerializer
,RedisTemplate 的默认序列化方式,序列化对象需实现 Serializable 接口,绝大多数情况下,不推荐使用该方式,因为这种方式序列化之后保存的是字节序列,对阅读不友好
4.2 String 序列化
org.springframework.data.redis.serializer.StringRedisSerializer
,StringRedisTemplate 的默认序列化方式,这种实现方式比较轻量与高效,但只能对字符串序列化,无法对普通对象序列化
4.3 Json 序列化
org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer
和 org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer
,两者都是使用 Jackson 实现 JSON 的序列化方式,不同的是,前者必须在构造序列化对象时传入对象的类型,后者则不需要,并且序列化时将对象类型也保存了
4.4 修改序列化方案
// 以修改序列化方案为 StringRedisSerializer 为例 // 修改 key 序列化方案 redisTemplate.setKeySerializer(RedisSerializer.string()); // 修改 value 序列化方案 redisTemplate.setValueSerializer(RedisSerializer.string()); // 修改 hash key 序列化方案 redisTemplate.setHashKeySerializer(RedisSerializer.string()); // 修改 hash value 序列化方案 redisTemplate.setHashValueSerializer(RedisSerializer.string());
- 记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节
- 编码中的Adapter,不仅是一种设计模式,更是一种架构理念与解决方案
- 线程池底层原理详解与源码分析
- 30分钟掌握 Webpack
- 线性回归大结局(岭(Ridge)、 Lasso回归原理、公式推导),你想要的这里都有
- Django 之路由层
- 【前端必会】webpack loader 到底是什么
- day42-反射01
- 中心化决议管理——云端分析
- HashMap底层原理及jdk1.8源码解读
- 详解JS中 call 方法的实现
- 打印 Logger 日志时,需不需要再封装一下工具类?
- 初识设计模式 - 代理模式
- 设计模式---享元模式
- 密码学奇妙之旅、01 CFB密文反馈模式、AES标准、Golang代码
- [ML从入门到入门] 支持向量机:从SVM的推导过程到SMO的收敛性讨论
- 从应用访问Pod元数据-DownwardApi的应用
- Springboot之 Mybatis 多数据源实现
- Java 泛型程序设计
- CAS核心思想、底层实现