java连接jedis步骤
jedis连接步骤
1.maven仓库导入依赖
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.18</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
2.编码测试
1.连接数据库
2.操作命令
3.断开连接
public class TestPing {
public static void main(String[] args) {
//new jedis 对象
Jedis jedis = new Jedis("192.168.15.136",6379);
jedis.auth("xxx");
//所有的命令就是我们之前学习的所有指令
System.out.println(jedis.ping());
}
}
jedis连接池
public class JedisConnectionFactory {
private static final JedisPool jedisPool;
static {
//配置连接池
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(8);
jedisPoolConfig.setMaxIdle(8);
jedisPoolConfig.setMinIdle(0);
jedisPoolConfig.setMaxWaitMillis(1000);
//创建连接池对象
jedisPool = new JedisPool(jedisPoolConfig, "192.168.15.136", 6379, 1000, "xxx");
}
public static Jedis getJedis() {
return jedisPool.getResource();
}
}
测试
package com.cn;
import com.cn.jedis.util.JedisConnectionFactory;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;
import java.util.Map;
public class JedisTest {
private Jedis jedis;
@BeforeEach
void setUp() {
//建立连接
//jedis = new Jedis("192.168.15.136", 6379);
jedis = JedisConnectionFactory.getJedis();
//设置密码
jedis.auth("xxx");
//选择库
jedis.select(1);
}
@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() {
Long result = jedis.hset("user:1", "name", "王五");
Long age = jedis.hset("user:1", "age", "21");
System.out.println("result=>" + result);
System.out.println("age=" + age);
Map<String, String> map = jedis.hgetAll("user:1");
System.out.println(map);
}
@AfterEach
void teardown() {
if (jedis != null) {
jedis.close();
}
}
}
常用API
五大基本数据类型
String List Set Hash Zset
SpringBoot整合
SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中:
| API | 返回值类型 | 说明 |
|---|---|---|
| redisTemplate.opsForValue() | ValueOperations | 操作String类型数据 |
| redisTemplate.opsForHash() | HashOperations | 操作Hash类型数据 |
| redisTemplate.opsForList() | ListOperations | 操作List类型数据 |
| redisTemplate.opsForSet() | SetOperations | 操作Set类型数据 |
| redisTemplate.opsForZSet() | ZSetOperations | 操作SortedSet类型数据 |
| redisTemplate | 通用的命令 |
1.引入依赖
<!--Redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--连接池依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2.配置文件
spring:
redis:
host: 192.168.15.136
port: 6379
password: xxx
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 10000ms
3.测试
package com.cn.redisdemo;
import com.cn.redis.pojo.User;
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.core.RedisTemplate;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
@SpringBootTest
public class RedisTest {
@Resource
private RedisTemplate redisTemplate;
@Test
public void testString() {
//插入一条String类型的数据
redisTemplate.opsForValue().set("name", "张好小");
//读取一条string类型数据
Object name = redisTemplate.opsForValue().get("name");
System.out.println(name);
}
@Test
void testSaveUser() {
User user = new User();
user.setName("账务");
user.setAge(21);
//写入数据
redisTemplate.opsForValue().set("user:100", user);
//获取数据
Object result = redisTemplate.opsForValue().get("user:100");
System.out.println(result);
}
}
SpringDataRedis的序列化方式
package com.cn.redis.config;
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.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
// 创建RedisTemplate对象
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// /设置连接工厂
redisTemplate.setConnectionFactory(connectionFactory);
// 创建JSON序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// 设置Key的序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
//设置value的序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
return redisTemplate;
}
}
StringRedisTemplate
Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程
package com.cn.redisdemo;
import com.cn.redis.pojo.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
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.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.util.Map;
@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
private static final ObjectMapper mapper = new ObjectMapper();
@Test
void saveTestUser() throws JsonProcessingException {
//创建对象
User user = new User();
user.setName("王麻子");
user.setAge(22);
//手动序列化
String json = mapper.writeValueAsString(user);
//写入数据
stringRedisTemplate.opsForValue().set("user:100", json);
//获取数据
String jsonUser = stringRedisTemplate.opsForValue().get("user:100");
//手动反序列化
User user1 = mapper.readValue(jsonUser, User.class);
System.out.println("user1=>" + user1);
}
@Test
void testHash() {
stringRedisTemplate.opsForHash().put("user:150", "name", "刘晓雅");
stringRedisTemplate.opsForHash().put("user:150", "age", "23");
Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("user:150");
System.out.println(entries);
}
}
自定义restemplate
@Configuration
public class MyRedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<String, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
//使用json的方式序列化所有对象
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object.class>();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
//创建string的序列化器
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//设置所有的key都使用string类型的序列化器
template.setKeySerializer(stringRedisSerializer);
//设置所有的hash类型的key也是用string类型的序列化器
template.setHashKeySerializer(stringRedisSerializer);
//设置hash类型的value使用json序列化器
template.setHashValueSerializer(jackson2JsonRedisSerializer);
//设置所有的value都使用json序列化器
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
以上内容为本人的经验总结和平时操作的笔记。若有错误和重复请联系作者删除!!感谢支持
浙公网安备 33010602011771号