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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot Redis简介

發布時間:2023/12/3 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot Redis简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.概述

在本文中,我們將通過Spring Data Redis庫回顧如何將Redis與Spring Boot結合使用的基礎知識。

我們將構建一個應用程序,演示如何通過Web界面執行CRUD操作Redis 。 Github上提供了該項目的完整源代碼。

2.什么是Redis?

Redis是一個開源的內存中鍵值數據存儲 ,用作數據庫,緩存和消息代理。 在實現方面,鍵值存儲代表NoSQL空間中最大和最舊的成員之一。 Redis支持帶范圍查詢的數據結構,例如字符串,哈希,列表,集合和排序集合。

通過為數據存儲提供抽象, Spring Data Redis框架使編寫使用Redis鍵值存儲的Spring應用程序變得容易。

3.設置Redis服務器

該服務器可從http://redis.io/download免費獲得。

如果您使用的是Mac,則可以通過自制軟件安裝它:

brew install redis

然后啟動服務器:

mikes-MacBook-Air:~ mike$ redis-server 10699:C 23 Nov 08:35:58.306 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 10699:C 23 Nov 08:35:58.307 # Redis version=4.0.2, bits=64, commit=00000000, modified=0, pid=10699, just started 10699:C 23 Nov 08:35:58.307 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf 10699:M 23 Nov 08:35:58.309 * Increased maximum number of open files to 10032 (it was originally set to 256)._._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 4.0.2 (00000000/0) 64 bit.-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379| `-._ `._ / _.-' | PID: 10699`-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 10699:M 23 Nov 08:35:58.312 # Server initialized 10699:M 23 Nov 08:35:58.312 * Ready to accept connections

4. Maven依賴

讓我們在pom.xml中聲明我們要構建的示例應用程序所必需的依賴項:

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

5. Redis配置

我們需要將我們的應用程序與Redis服務器連接。 為了建立這種連接,我們使用Redis客戶端實現Jedis 。

5.1配置

讓我們從配置bean定義開始:

@BeanJedisConnectionFactory jedisConnectionFactory() {return new JedisConnectionFactory();}@Beanpublic RedisTemplate<String, Object> redisTemplate() {final RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();template.setConnectionFactory(jedisConnectionFactory());template.setValueSerializer(new GenericToStringSerializer<Object>(Object.class));return template;}

JedisConnectionFactory被制成一個bean,因此我們可以創建一個RedisTemplate來查詢數據。

5.2消息發布者

遵循SOLID的原理 ,我們創建一個MessagePublisher接口:

public interface MessagePublisher {void publish(final String message); }

我們實現了MessagePublisher接口,以使用高級RedisTemplate發布消息,因為RedisTemplate允許將任意對象作為消息傳遞:

@Service public class MessagePublisherImpl implements MessagePublisher {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Autowiredprivate ChannelTopic topic;public MessagePublisherImpl() {}public MessagePublisherImpl(final RedisTemplate<String, Object> redisTemplate, final ChannelTopic topic) {this.redisTemplate = redisTemplate;this.topic = topic;}public void publish(final String message) {redisTemplate.convertAndSend(topic.getTopic(), message);}}

我們還將其定義為RedisConfig中的bean:

@BeanMessagePublisher redisPublisher() {return new MessagePublisherImpl(redisTemplate(), topic());}

訊息偵聽器

為了訂閱消息,我們需要實現MessageListener接口:每次收到新消息時,都會調用回調,并通過名為onMessage的方法執行用戶代碼。 該接口可訪問消息,已通過其接收消息的通道以及訂閱使用的與該通道匹配的任何模式。

因此,我們創建一個服務類來實現MessageSubscriber :

@Service public class MessageSubscriber implements MessageListener {public static List<String> messageList = new ArrayList<String>();public void onMessage(final Message message, final byte[] pattern) {messageList.add(message.toString());System.out.println("Message received: " + new String(message.getBody()));}}

我們向RedisConfig添加一個bean定義:

@BeanMessageListenerAdapter messageListener() {return new MessageListenerAdapter(new MessageSubscriber());}

6. Redis存儲庫

現在我們已經配置了應用程序以與Redis服務器交互,我們將準備應用程序以獲取示例數據。

6.1模型

在此示例中,我們定義了具有兩個字段的Movie模型:

private String id; private String name; //standard getters and setters

6.2儲存庫界面

與其他Spring Data項目不同, Spring Data Redis確實提供了在其他Spring Data接口之上構建的任何功能 。 對于擁有其他Spring Data項目經驗的我們來說這很奇怪。

通常,不需要使用Spring Data項目編寫存儲庫接口的實現。 我們只需要與界面進行交互即可。 Spring Data JPA提供了許多存儲庫接口,可以擴展它們以獲得諸如CRUD操作,派生查詢和分頁之類的功能。

因此,不幸的是, 我們需要編寫我們自己的接口 ,然后定義方法:

public interface RedisRepository {Map<Object, Object> findAllMovies();void add(Movie movie);void delete(String id);Movie findMovie(String id);}

6.3資料庫的實施

我們的實現類使用我們的配置類RedisConfig定義的redisTemplate。

我們使用Spring Data Redis提供的HashOperations模板:

@Repository public class RedisRepositoryImpl implements RedisRepository {private static final String KEY = "Movie";private RedisTemplate<String, Object> redisTemplate;private HashOperations hashOperations;@Autowiredpublic RedisRepositoryImpl(RedisTemplate<String, Object> redisTemplate){this.redisTemplate = redisTemplate;}@PostConstructprivate void init(){hashOperations = redisTemplate.opsForHash();}public void add(final Movie movie) {hashOperations.put(KEY, movie.getId(), movie.getName());}public void delete(final String id) {hashOperations.delete(KEY, id);}public Movie findMovie(final String id){return (Movie) hashOperations.get(KEY, id);}public Map<Object, Object> findAllMovies(){return hashOperations.entries(KEY);}}

讓我們記下init()方法。 在此方法中,我們使用名為opsForHash()的函數,該函數返回對綁定到給定鍵的哈希值執行的操作。 然后,我們將init()中定義的hashOps用于所有CRUD操作。

7. Web界面

在本節中,我們將回顧向Web界面添加Redis CRUD操作功能。

7.1添加電影

我們希望能夠在我們的網頁中添加電影。 關鍵是電影ID ,值是實際對象。 但是,我們稍后將解決此問題,因此僅將電影名稱顯示為值。

因此,讓我們將表單添加到HTML文檔中,并分配適當的名稱和ID:

<form id="addForm"> <div class="form-group"><label for="keyInput">Movie ID (key)</label><input name="keyInput" id="keyInput" class="form-control"/></div> <div class="form-group"><label for="valueInput">Movie Name (field of Movie object value)</label><input name="valueInput" id="valueInput" class="form-control"/></div><button class="btn btn-default" id="addButton">Add</button></form>

現在,我們使用JavaScript來保存表單提交中的值:

$(document).ready(function() {var keyInput = $('#keyInput'),valueInput = $('#valueInput');refreshTable();$('#addForm').on('submit', function(event) {var data = {key: keyInput.val(),value: valueInput.val()};$.post('/add', data, function() {refreshTable();keyInput.val('');valueInput.val('');keyInput.focus();});event.preventDefault();});keyInput.focus(); });

我們為POST請求分配@RequestMapping值,請求鍵和值,創建一個Movie對象,并將其保存到存儲庫中:

@RequestMapping(value = "/add", method = RequestMethod.POST)public ResponseEntity<String> add(@RequestParam String key,@RequestParam String value) {Movie movie = new Movie(key, value);redisRepository.add(movie);return new ResponseEntity<>(HttpStatus.OK);}

7.2查看內容

添加Movie對象后,我們刷新表以顯示更新的表。 在7.1節JavaScript代碼塊中,我們調用了一個稱為refreshTable()JavaScript函數。 此函數執行GET請求以檢索存儲庫中的當前數據:

function refreshTable() {$.get('/values', function(data) {var attr,mainTable = $('#mainTable tbody');mainTable.empty();for (attr in data) {if (data.hasOwnProperty(attr)) {mainTable.append(row(attr, data[attr]));}}}); }

GET請求由名為findAll()的方法處理,該方法檢索存儲在存儲庫中的所有Movie對象,然后將數據類型從Map <Object,Object>轉換為Map <String,String> :

@RequestMapping("/values")public @ResponseBody Map<String, String> findAll() {Map<Object, Object> aa = redisRepository.findAllMovies();Map<String, String> map = new HashMap<String, String>();for(Map.Entry<Object, Object> entry : aa.entrySet()){String key = (String) entry.getKey();map.put(key, aa.get(key).toString());}return map;}

7.3刪除電影

我們編寫Javascript來執行POST請求 ? / delete ,刷新表,并將鍵盤焦點設置為按鍵輸入:

function deleteKey(key) {$.post('/delete', {key: key}, function() {refreshTable();$('#keyInput').focus();}); }

我們請求密鑰,并根據此密鑰刪除redisRepository中的對象:

@RequestMapping(value = "/delete", method = RequestMethod.POST)public ResponseEntity<String> delete(@RequestParam String key) {redisRepository.delete(key);return new ResponseEntity<>(HttpStatus.OK);}

8.演示

在這里,我們添加了兩部電影:

在這里,我們刪除了一部電影:

9.結論

在本教程中,我們介紹了Spring Data Redis,以及將其連接到Web應用程序以執行CRUD操作的一種方法。

示例應用程序的源代碼在Github上 。

翻譯自: https://www.javacodegeeks.com/2017/11/intro-redis-spring-boot.html

總結

以上是生活随笔為你收集整理的Spring Boot Redis简介的全部內容,希望文章能夠幫你解決所遇到的問題。

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