Redis的Java客戶端
Jedis執行緒不安全,lettuce執行緒安全
Jedis
測驗
引入依賴
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.7.0</version>
</dependency>
</dependencies>
Test.java
public class JedisTest {
private Jedis jedis;
@BeforeEach
void setUp() {
//1.建立連接
jedis=new Jedis("192.168.164.128",6379);
//2.設定密碼
jedis.auth("123456");
//3.選擇庫
jedis.select(0);
}
@Test
void testString() {
//存入
String result=jedis.set("name","熊哥");
System.out.println("result="+result);
//獲取
String name=jedis.get("name");
System.out.println("name="+name);
//存入
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();
}
}
}
Jedis連接池
Jedis本身是執行緒不安全的,且頻繁的創建和銷毀連接有性能損耗,因此推薦使用Jedis連接池代替Jedis直接連接
JedisConnectionFactory.java
public class JedisConnectionFactory {
//連接池物件
private static final JedisPool jedisPool;
//初始化
static {
//配置連接池
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(8); //最大8個連接
poolConfig.setMaxIdle(8); //最大空閑數量
poolConfig.setMinIdle(0); //最小空閑數量
poolConfig.setMaxWaitMillis(1000); //當池內沒有回傳物件時最大等待時間
//創建連接池物件(JedisPoolConfig,ip,port,timeout,password)
jedisPool=new JedisPool(poolConfig,"192.168.164.128",6379,1000,"123456");
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
Test.java(改變建立連接的陳述句)
public class JedisTest {
private Jedis jedis;
@BeforeEach
void setUp() {
//1.建立連接
// jedis=new Jedis("192.168.164.128",6379);
jedis= JedisConnectionFactory.getJedis();
//2.設定密碼
jedis.auth("123456");
//3.選擇庫
jedis.select(0);
}
@Test
void testString() {
//存入
String result=jedis.set("name","熊哥");
System.out.println("result="+result);
//獲取
String name=jedis.get("name");
System.out.println("name="+name);
//存入
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();
}
}
}
SpringDataRedis
SpringDataRedis中提供RedisTemplate工具類,封裝了各種對Redis的操作,springboot2.x以前默認支持Jedis,以后默認支持lettuce
依賴
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--common-pool-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
application.yaml
spring:
redis:
host: 192.168.164.128
port: 6379
password: 123456
database: 0
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 100ms
Test.java
@SpringBootTest
class RedisDemoApplicationTests {
@Resource
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
//寫入一條String資料
redisTemplate.opsForValue().set("name","王五");
//獲取
Object name=redisTemplate.opsForValue().get("name");
System.out.println(name);
}
}
序列化以實作跨平臺存盤(在上面的基礎上修改)
添加配置類RedisConfig.java
@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;
}
}
Test.java中修改下面這行
private RedisTemplate<String,Object> redisTemplate;
若linux下還是顯示亂碼,在啟動客戶端時最后加上 --raw
StringRedisTemplate(上面的經典白學)
Spring默認提供了一個StringRedisTemplate類,它的key和value的序列化方式默認是String方式,省去了自定義RedisTemplate的程序
Test.java
@SpringBootTest
public class RedisStringTest {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void contextLoads() {
//寫入一條String資料
stringRedisTemplate.opsForValue().set("name","王五");
//獲取
Object name=stringRedisTemplate.opsForValue().get("name");
System.out.println(name);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/538879.html
標籤:NoSQL
上一篇:Redis基礎命令
