赞
踩
Jedis是一个Java语言编写的Redis客户端库,用于与Redis服务器进行通信。它提供了易于使用的API,使Java开发人员可以轻松地与Redis进行交互。使用Jedis,你可以执行各种Redis操作,如设置和获取键值对、执行命令、订阅和发布消息等。
优点:
缺点:
public class JedisConnectionFactory { // 配置连接池 private static final JedisPool jedisPool; static { // 配置连接池 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(8); poolConfig.setMaxIdle(8); poolConfig.setMinIdle(0); poolConfig.setMaxWaitMillis(1000); // 创建连接池对象 jedisPool = new JedisPool(poolConfig, "192.168.1.107", 6379, 1000 ,"123456"); } // 创建连接池对象 public static Jedis getJedis(){ return jedisPool.getResource(); } }
public class JedisTest { private Jedis jedis; @BeforeEach void setUp() { /* 1.建立连接 2.设置密码 3.选择库 */ // jedis = new Jedis("192.168.1.107",6379); // jedis.auth("123456"); // jedis.select(0); jedis = JedisConnectionFactory.getJedis(); } @Test void testString(){ // 存入数据 String result = jedis.set("name", "虎哥"); System.out.println("result = "+result); // 获取数据 String name = jedis.get("name"); System.out.println("name = "+name); } @Test void testHash(){ jedis.hset("user:1","name","jack"); jedis.hset("user:1","age","21"); Map<String, String> map = jedis.hgetAll("user:1"); System.out.println(map); } @AfterEach void tearDown(){ if (jedis!=null) { jedis.close(); } } }
Spring Data 是一系列旨在简化基于 Java 的应用程序中数据库访问的项目集合。它提供了一致的编程模型,减少了数据库交互所需的样板代码量。
Spring Data 的关键组件之一是存储库抽象,它允许开发人员在不编写实际实现代码的情况下进行数据访问操作。Spring Data 存储库可以配置为与各种数据存储一起工作,包括关系数据库如 MySQL、PostgreSQL 和 Oracle,以及 NoSQL 数据库如 MongoDB、Redis 和 Cassandra。
Spring Data Redis 是 Spring Data 项目的一部分,专门用于简化在基于 Java 的应用程序中与 Redis 数据库的交互。Redis 是一种高性能的键值存储数据库,常用于缓存、会话存储和消息队列等用途。
功能包括:
对应的springboot版本为2.6.5
spring:
redis:
host: 192.168.1.107
port: 6379
password: 123456
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 100
@SpringBootTest
class SpringdataRedisDemoApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void testString(){
// 写入一条数据
redisTemplate.opsForValue().set("name","张总");
// 读取一条数据
Object name = redisTemplate.opsForValue().get("name");
System.out.println("name = "+name);
}
}
默认的jdk序列化器十分不友好,需要通过配置相应的序列化器来解决这个问题。
@Configuration public class RedisConfig { @Bean public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){ // 创建RedisTemplate对象 RedisTemplate<String, Object> template = new RedisTemplate<>(); // 设置连接工厂 template.setConnectionFactory(connectionFactory); // 创建JSON序列化工具 GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); // 设置Key的序列化 template.setKeySerializer(RedisSerializer.string()); template.setHashKeySerializer(RedisSerializer.string()); // 设置Value的序列化 template.setValueSerializer(jsonRedisSerializer); template.setHashValueSerializer(jsonRedisSerializer); // 返回 return template; } }
修改之后存入的数据为:
新的问题:带有了额外的参数@class,容易浪费内存空间。为了节省内存空间,我们并不会使用]SON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储lava对象时,手动完成对象的序列化和反序列化。
Spring默认提供了一个StringRedistemplate类,它的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程。需要手动完成对象的序列化和反序列化。
@Autowired private StringRedisTemplate stringRedisTemplate; //JSON工具 private static final ObjectMapper mapper = new ObjectMapper(); @Test void testStringTemplate() throws JsonProcessingException { User user = new User("欢哥", 18); String json = mapper.writeValueAsString(user); // 写入一条数据到redis stringRedisTemplate.opsForValue().set("user:200",json); // 读取数据 String val = stringRedisTemplate.opsForValue().get("user:200"); User user1 = mapper.readValue(val, User.class); System.out.println("user = "+user1); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。