日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

使用Java操作Redis

發布時間:2023/12/9 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Java操作Redis 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

📢📢📢📣📣📣

哈嘍!大家好,我是【一心同學】,一位上進心十足的【Java領域博主】!😜😜😜

?【一心同學】的寫作風格:喜歡用【通俗易懂】的文筆去講解每一個知識點,而不喜歡用【高大上】的官方陳述。

?【一心同學】博客的領域是【面向后端技術】的學習,未來會持續更新更多的【后端技術】以及【學習心得】。

?如果有對【后端技術】感興趣的【小可愛】,歡迎關注一心同學】💞💞💞

??????感謝各位大可愛小可愛!???????


目錄

前言

一、準備步驟

二、Jedis連接Redis

三、基本操作

3.1 操作String數據類型

3.2 操作List數據類型

3.3 事務操作

四、SpringBoot集成Redis

4.1 介紹

4.2 集成Redis

4.3? 保存對象

小結


前言

我們之前對Redis的學習都是在命令行窗口,那么如何使用Java來對Redis進行操作呢?官方對于Java連接Redis的開發工具推薦了Jedis,通過Jedis同樣可以實現對Redis的各種操作。本篇文章會介紹基于Linux上的Redis的Java連接操作。

一、準備步驟

修改配置文件redis.conf:

(1)注釋以下屬性,因為我們是需要進行遠程連接的:

#bind:127.0.0.1

(2)將protected-mode 設置為no

protected-mode no

(3)設置為允許后臺連接

daemonize yes

注意:

遠程服務器進行連接需要確保將以下三個步驟都完成:

(1)設置服務器的安全組開放6379端口

(2)防火墻開放端口:

firewall-cmd --zone=public --add-port=6379/tcp --permanet

(3)重啟防火墻:

systemctl restart firewalld.service

二、Jedis連接Redis

(1)創建一個Maven項目,并導入以下依賴:

<dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency></dependencies>

(2)測試連接:

package com.yixin;import redis.clients.jedis.Jedis;public class RedisTest {public static void main(String[] args) {//連接本地的 Redis 服務Jedis jedis = new Jedis("服務器地址", 6379);String response = jedis.ping();System.out.println(response); // PONG }}

輸出結果:

看到PONG說明我們成功連接上了我們服務器上的Redis了!

三、基本操作

3.1 操作String數據類型

package com.yixin;import redis.clients.jedis.Jedis;import java.util.Set;public class Redis_String {public static void main(String[] args) {//連接本地的 Redis 服務Jedis jedis = new Jedis("服務器地址", 6379);String response = jedis.ping();System.out.println(response); // PONG//刪除當前選擇數據庫中的所有keySystem.out.println("刪除當前選擇數據庫中的所有key:"+jedis.flushDB());//Spring實例//設置 redis 字符串數據//新增<'name','yixin'>的鍵值對jedis.set("name", "yixin");// 獲取存儲的數據并輸出System.out.println("redis 存儲的字符串為: "+ jedis.get("name"));//判斷某個鍵是否存在System.out.println("判斷某個鍵是否存在:"+jedis.exists("name"));//系統中所有的鍵Set<String> keys = jedis.keys("*");System.out.println(keys);//按索引查詢System.out.println("按索引查詢:"+jedis.select(0));//查看鍵name所存儲的值的類型System.out.println("查看鍵name所存儲的值的類型:"+jedis.type("name"));// 隨機返回key空間的一個System.out.println("隨機返回key空間的一個:"+jedis.randomKey());//重命名keySystem.out.println("重命名key:"+jedis.rename("name","username"));System.out.println("取出改后的name:"+jedis.get("username"));//刪除鍵usernameSystem.out.println("刪除鍵username:"+jedis.del("username"));//刪除當前選擇數據庫中的所有keySystem.out.println("刪除當前選擇數據庫中的所有key:"+jedis.flushDB());//查看當前數據庫中key的數目System.out.println("返回當前數據庫中key的數目:"+jedis.dbSize());//刪除數據庫中的所有keySystem.out.println("刪除所有數據庫中的所有key:"+jedis.flushAll());} }

輸出:

3.2 操作List數據類型

package com.yixin;import redis.clients.jedis.Jedis;import java.util.List;public class Redis_List {public static void main(String[] args) {//連接本地的 Redis 服務Jedis jedis = new Jedis("服務器地址", 6379);String response = jedis.ping();System.out.println(response); // PONGSystem.out.println("刪除當前選擇數據庫中的所有key:"+jedis.flushDB());//List實例//存儲數據到列表中jedis.lpush("list", "num1");jedis.lpush("list", "num2");jedis.lpush("list", "num3");// 獲取存儲的數據并輸出List<String> list = jedis.lrange("list", 0 ,-1);for(int i=0; i<list.size(); i++) {System.out.println("列表項為: "+list.get(i));}} }

輸出結果:

3.3 事務操作

package com.yixin;import com.alibaba.fastjson.JSONObject; import redis.clients.jedis.Jedis; import redis.clients.jedis.Transaction;public class Redis_Transaction {public static void main(String[] args) {//連接本地的 Redis 服務Jedis jedis = new Jedis("服務器地址", 6379);String response = jedis.ping();System.out.println(response); // PONG//事務測試jedis.flushDB();JSONObject jsonObject = new JSONObject();jsonObject.put("hello","world");jsonObject.put("name","yixin");//開啟事務Transaction multi = jedis.multi();String result = jsonObject.toJSONString();// jedis.watch(result)try {multi.set("user1", result);multi.set("user2", result);int i = 1 / 0; // 代碼拋出異常事務,執行失敗!multi.exec(); // 執行事務!}catch (Exception e){multi.discard();// 放棄事務e.printStackTrace();}finally {System.out.println(jedis.get("user1"));System.out.println(jedis.get("user2"));jedis.close();}} }

輸出結果:

對于其他命令也基本類似,就不一一演示出來了,之前學過的Redis命令,在Java中同樣可以進行使用。?

四、SpringBoot集成Redis

4.1 介紹

這次我們并不使用jedis來進行連接,而是使用lettuce來進行連接,jedis和lettuce的對比如下:

jedis:采用的直連,多個線程操作的話,是不安全的;想要避免不安全,使用jedis pool連接池。更像BIO模式

lettuce:采用netty,實例可以在多個線程中共享,不存在線程不安全的情況;可以減少線程數量。更像NIO模式

4.2 集成Redis

(1)創建Spring Boot項目

(2)導入依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

(3)編寫配置文件

application.properties:

#配置redis # Redis服務器地址 spring.redis.host=服務器地址 # Redis服務器連接端口 spring.redis.port=6379 # Redis數據庫索引(默認為0) spring.redis.database=0 # Redis服務器連接密碼(默認為空) spring.redis.password= # 連接池最大連接數(使用負值表示沒有限制) 默認 8 spring.redis.lettuce.pool.max-active=8 # 連接池最大阻塞等待時間(使用負值表示沒有限制) 默認 -1 spring.redis.lettuce.pool.max-wait=-1 # 連接池中的最大空閑連接 默認 8 spring.redis.lettuce.pool.max-idle=8 # 連接池中的最小空閑連接 默認 0 spring.redis.lettuce.pool.min-idle=0

(4)編寫測試類

package com.yixin;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;@SpringBootTest class SpringbootRedisApplicationTests {@Autowiredprivate RedisTemplate<String,String> redisTemplate;@Testvoid contextLoads() {redisTemplate.opsForValue().set("name","yixin");System.out.println(redisTemplate.opsForValue().get("name"));}}

輸出:

這樣就已經成功連接了!

在這種連接方式中,redisTemplate操作著不同的數據類型,api和我們的指令是一樣的

opsForValue:操作字符串 類似String

opsForList:操作List 類似List

opsForSet:操作Set,類似Set

opsForHash:操作Hash

opsForZSet:操作ZSet

opsForGeo:操作Geospatial

opsForHyperLogLog:操作HyperLogLog

除了基本的操作,我們常用的方法都可以直接通過redisTemplate操作,比如事務,和基本的CRUD。

4.3? 保存對象

(1)編寫實體類

注意:要實現序列號Serializable。

package com.yixin.pojo;import java.io.Serializable;public class User implements Serializable {private String name;private int age;public User(){}public User(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';} }

(2)編寫RedsTemplate配置

Tip:在開發當中,我們可以直接把這個模板拿去使用。

package com.yixin.config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; 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.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration public class RedisConfig {@Bean@SuppressWarnings("all")public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {//為了自己開發方便,一般直接使用 <String, Object>RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();template.setConnectionFactory(factory);// Json序列化配置Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);// String 的序列化StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();// key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);// hash的key也采用String的序列化方式template.setHashKeySerializer(stringRedisSerializer);// value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);// hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}}

(3)存儲對象

package com.yixin;import com.yixin.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;@SpringBootTest class SpringbootRedisApplicationTests {@Autowiredprivate RedisTemplate<String,Object> redisTemplate;@Testvoid contextLoads() {User user=new User("yixin",18);redisTemplate.opsForValue().set("user",user);System.out.println(redisTemplate.opsForValue().get("user"));}}

輸出結果:?



小結

以上就是【一心同學】講解的使用【Java】對【Redis】操作的兩種方式,如果擔心【線程安全】的話,可以使用【lettuce】進行連接。

如果這篇【文章】有幫助到你,希望可以給【一心同學】點個👍,創作不易,相比官方的陳述,我更喜歡用【通俗易懂】的文筆去講解每一個知識點,如果有對【后端技術】感興趣的小可愛,也歡迎關注???????【一心同學】??????,我將會給你帶來巨大的【收獲與驚喜】💕💕!

總結

以上是生活随笔為你收集整理的使用Java操作Redis的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。