1 Java 使用 Redis
1.1 方案簡(jiǎn)述
????????redis的java客戶端很多,官方推薦的有三種:
- Jedis
- Lettuce
- Redisson
- Spring 對(duì)Redis 客戶端進(jìn)行了整合,提供了Spring Date Redis ,在Spring Boot項(xiàng)目中還提供了對(duì)應(yīng)的Starter,即spring-boot-starter-data-redis。
1.2 使用Jedis連接到 redis 服務(wù)
????????使用Jedis操作Redis的步驟:
1.獲取鏈接;
2.執(zhí)行操作;
3.關(guān)閉連接;
1.2.1 實(shí)例
import redis.clients.jedis.Jedis;
public class RedisJava {
public static void main(String[] args) {
//連接本地的 Redis 服務(wù)
Jedis jedis = new Jedis("localhost");
// 如果 Redis 服務(wù)設(shè)置了密碼,需要下面這行,沒有就不需要
// jedis.auth("123456");
System.out.println("連接成功");
//查看服務(wù)是否運(yùn)行
System.out.println("服務(wù)正在運(yùn)行: "+jedis.ping());
}
}
????????編譯以上 Java 程序,確保驅(qū)動(dòng)包的路徑是正確的。
連接成功
服務(wù)正在運(yùn)行: PONG
1.2.2 Redis Java String(字符串) 實(shí)例
import redis.clients.jedis.Jedis;
public class RedisStringJava {
public static void main(String[] args) {
//連接本地的 Redis 服務(wù)
Jedis jedis = new Jedis("localhost");
System.out.println("連接成功");
//設(shè)置 redis 字符串?dāng)?shù)據(jù)
jedis.set("runoobkey", "www.runoob.com");
// 獲取存儲(chǔ)的數(shù)據(jù)并輸出
System.out.println("redis 存儲(chǔ)的字符串為: "+ jedis.get("runoobkey"));
}
}
????????編譯以上程序。
連接成功 redis
存儲(chǔ)的字符串為: www.runoob.com
1.2.3 Redis Java List(列表) 實(shí)例
import java.util.List;
import redis.clients.jedis.Jedis;
public class RedisListJava {
public static void main(String[] args) {
//連接本地的 Redis 服務(wù)
Jedis jedis = new Jedis("localhost");
System.out.println("連接成功");
//存儲(chǔ)數(shù)據(jù)到列表中
jedis.lpush("site-list", "Runoob");
jedis.lpush("site-list", "Google");
jedis.lpush("site-list", "Taobao");
// 獲取存儲(chǔ)的數(shù)據(jù)并輸出
List<String> list = jedis.lrange("site-list", 0 ,2);
for(int i=0; i<list.size(); i++) {
System.out.println("列表項(xiàng)為: "+list.get(i));
}
}
}
????????編譯以上程序。
連接成功
列表項(xiàng)為: Taobao
列表項(xiàng)為: Google
列表項(xiàng)為: Runoob
1.2.4 Redis Java Keys 實(shí)例
import java.util.Iterator;
import java.util.Set;
import redis.clients.jedis.Jedis;
public class RedisKeyJava {
public static void main(String[] args) {
//連接本地的 Redis 服務(wù)
Jedis jedis = new Jedis("localhost");
System.out.println("連接成功");
// 獲取數(shù)據(jù)并輸出
Set<String> keys = jedis.keys("*");
Iterator<String> it=keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println(key);
}
}
}
????????編譯以上程序。
連接成功
runoobkey site-list
1.3 Lettuce
????????另一個(gè)流行的Java Redis客戶端庫Lettuce,它具有異步和響應(yīng)式API,支持集群模式、Sentinel模式以及Redis 6中的新特性。以下是使用Lettuce連接Redis并執(zhí)行一些基本操作的代碼示例:
????????在上面的代碼中,我們使用了Lettuce客戶端庫來連接Redis服務(wù)器并執(zhí)行一些基本操作。首先,我們創(chuàng)建了一個(gè)RedisClient實(shí)例,并將Redis服務(wù)器的地址和端口作為參數(shù)傳遞給create方法。然后,我們通過調(diào)用connect方法來創(chuàng)建一個(gè)StatefulRedisConnection實(shí)例,該實(shí)例提供了同步和異步的API來操作Redis。接下來,我們使用sync方法來獲取一個(gè)同步的RedisCommands實(shí)例,然后使用set方法來設(shè)置一個(gè)鍵值對(duì),get方法獲取一個(gè)鍵的值,del方法刪除一個(gè)鍵。最后,我們關(guān)閉了連接哦。
1.4 Redisson
????????Redisson是一個(gè)基于Netty框架的Java Redis客戶端庫,它提供了分布式鎖、分布式集合、分布式對(duì)象等功能,支持Redis集群和Sentinel模式。以下是使用Redisson連接Redis并執(zhí)行一些基本操作的代碼示例:
????????在上面的代碼中,我們使用了Redisson客戶端庫來連接Redis服務(wù)器并執(zhí)行一些基本操作。首先,我們創(chuàng)建了一個(gè)Config實(shí)例,并使用useSingleServer方法來指定Redis服務(wù)器的地址和端口。然后,我們通過調(diào)用create方法來創(chuàng)建一個(gè)RedissonClient實(shí)例。接下來,我們使用getBucket方法來獲取一個(gè)RBucket實(shí)例,該實(shí)例可以用來操作一個(gè)特定的鍵。我們使用set方法來設(shè)置一個(gè)鍵值對(duì),get方法獲取一個(gè)鍵的值,delete方法刪除一個(gè)鍵。最后,我們關(guān)閉了連接。
1.5 Spring Data Redis
????????Spring Data Redis 中提供了一個(gè)高度封裝的類,針對(duì)jedis客戶端中大量api進(jìn)行了歸類封裝,將同一類型操作封裝為operation接口,具體分類如下:
- ValueOperations:簡(jiǎn)單K-V操作
- SetOperations :set 類型數(shù)據(jù)操作
- ZSetOperations:zset 類型數(shù)據(jù)操作
- HashOperations:針對(duì)map類型的數(shù)據(jù)操作
- ListOperations:針對(duì)list類型的數(shù)據(jù)操作
????????默認(rèn)操作的是0號(hào)數(shù)據(jù)庫,也可以切換其他數(shù)據(jù)庫:
????????設(shè)置一下序列化,這樣設(shè)置key的時(shí)候不會(huì)變成亂碼:
package com.example.demotest;
import org.springframework.cache.annotation.CachingConfigurerSupport;
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
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
package com.example.demotest;
import org.junit.Test;
import org.junit.runner.RunWith;
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 org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testString(){
redisTemplate.opsForValue().set("city2","sz");
String city2 = (String) redisTemplate.opsForValue().get("city2");
System.out.println("打印一下" + city2);
//指定過期時(shí)間 10 秒
redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);
//如果不存在key則設(shè)置
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city", "sz");
System.out.println(aBoolean);
}
@Test
public void testHash(){
HashOperations hashOperations = redisTemplate.opsForHash();
//存值
hashOperations.put("002","name","hh");
hashOperations.put("002","age","20");
hashOperations.put("002","address","sz");
//取值
String age = (String) hashOperations.get("002", "age");
System.out.println(age);
//獲得hash結(jié)構(gòu)中的所有字段
Set keys = hashOperations.keys("002");
for (Object key : keys) {
System.out.println(key);
}
//獲得hash結(jié)構(gòu)中的所有值
List values = hashOperations.values("002");
for (Object value : values) {
System.out.println(value);
}
}
/**
* 操作list類型的數(shù)據(jù)
*/
@Test
public void testList(){
ListOperations listOperations = redisTemplate.opsForList();
//存儲(chǔ)
listOperations.leftPush("mylist","a");
listOperations.leftPushAll("mylist","b","c","d");
//取值
List<String> mylist = listOperations.range("mylist", 0, -1);
for (String value : mylist) {
System.out.println(value);
}
//獲得列表長度
Long size = listOperations.size("mylist");
int lSize = size.intValue();
for (int i = 0; i < lSize; i++) {
//出隊(duì)列
String elment = (String) listOperations.rightPop("mylist");
System.out.println(elment);
}
}
/**
* 操作set類型的數(shù)據(jù)
*/
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
//存值
setOperations.add("myset","a","b","c","a");
//取值
Set<String> myset = setOperations.members("myset");
for (String s : myset) {
System.out.println(s);
}
//刪除成員
setOperations.remove("myset","a","b");
//取值
myset = setOperations.members("myset");
for (String s : myset) {
System.out.println(s);
}
}
/**
* 操作zset類型的數(shù)據(jù)
*/
@Test
public void testZset(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//存值
zSetOperations.add("myZset","a",10.0);
zSetOperations.add("myZset","b",11.0);
zSetOperations.add("myZset","d",12.0);
zSetOperations.add("myZset","a",13.0);
//取值
Set<String> myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
//修改分?jǐn)?shù)
zSetOperations.incrementScore("myZset","b",20.0);
//取值
myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
//刪除成員
zSetOperations.remove("myZset","a","b");
}
@Test
public void testCommon(){
//獲取Redis 中所有的key
Set<String> keys = redisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
//判斷某個(gè)key是否存在
Boolean hh = redisTemplate.hasKey("hh");
System.out.println(hh);
//刪除指定key
redisTemplate.delete("myzset");
//獲取指定key對(duì)應(yīng)的value的數(shù)據(jù)類型
DataType dataType = redisTemplate.type("myset");
System.out.println(dataType.name());
}
}
?參考鏈接
Java 使用 Redis | 菜鳥教程
java在項(xiàng)目中如何使用redis_Redis_方法_操作
在Java中操作Redis_java redis_周盛歡的博客-CSDN博客
使用java操作redis_java連接redis_白未的博客-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-698444.html
Redis在java項(xiàng)目中的使用文章來源地址http://www.zghlxwxcb.cn/news/detail-698444.html
到了這里,關(guān)于【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!