Конкретный код не приводится.
Также представлен контроллер Redisson:
xy.SpringBoot2NoSQL.controller.Redis.RedissonController
RedissonController демонстрирует синхронизацию, асинхронность, операции, а также распределённые коллекции (хеш, мульти-хеш, набор, сортированный набор, очередь), локальное кэширование, объектный сегмент Object Bucket, двоичный поток Binary Stream, атомарные типы, публикацию и подписку, HyperLogLog для распределённого подсчёта, счётчик, события истечения срока действия, распределённую блокировку, асинхронные пакетные операции и т. д.
Например, операция локального кэширования:
@RequestMapping("/getLocalCachedMap/{name}/{key}")
public String getLocalCachedMap(@PathVariable("name") String name,@PathVariable("key") String key){
LocalCachedMapOptions<Object, Object> options = LocalCachedMapOptions.defaults()
.evictionPolicy(LocalCachedMapOptions.EvictionPolicy.LFU)
.cacheSize(100)
.syncStrategy(LocalCachedMapOptions.SyncStrategy.UPDATE) //синхронизация кэша
.timeToLive(10, TimeUnit.SECONDS)
.maxIdle(10, TimeUnit.SECONDS);
RLocalCachedMap<Object, Object> map = redisson.getLocalCachedMap(name,options);
map.put(key, "тестирование значения");
String result = (String)map.get(key);
return result;
}
Операция с объектом-сегментом:
Пакетная операция:
Ограниченная блокирующая очередь:
В процессе написания...
spring.cache.type=ehcache spring.cache.ehcache.config=classpath:ehcache.xml
Ehcache.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false"
>
<diskStore path="myCache.ehcache"/>
<defaultCache
eternal="true"
maxElementsInMemory="1000"
overflowToDisk="true"
diskPersistent="true"
timeToIdleSeconds="0"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LRU" />
<!-- 这里的 users 缓存空间是为了下面的 demo 做准备 -->
<!-- maxElementsInMemory :cache 中最多可以存放的元素的数量。如果放入cache中的元素超过这个数值,有两种情况:
1、若overflowToDisk的属性值为true,会将cache中多出的元素放入磁盘文件中。
2、若overflowToDisk的属性值为false,会根据memoryStoreEvictionPolicy的策略替换cache中原有的元素。-->
<cache
name="users"
eternal="true"
maxElementsInMemory="1000"
overflowToDisk="true"
diskPersistent="true"
timeToIdleSeconds="0"
timeToLiveSeconds="300"
memoryStoreEvictionPolicy="LRU" />
</ehcache>
См. xy.SpringBoot2NoSQL.model.User Это полностью простой POJO java класс. Используется имя пользователя (login) в качестве ключевого поля.
public class User implements Serializable{
private String login;
private String fullName;
...
См. xy.SpringBoot2NoSQL.service.Ehcache.UserService
Демонстрирует простоту и отсутствие repository. Метод getUser() демонстрирует различные ситуации, когда кэш существует в куче JVM, вне кучи и на диске с сохранением.
См. xy.SpringBoot2NoSQL.controller.Ehcache.EhcacheDataController
Выполнение операций контроллера:
Сохранение на локальном диске:
В процессе написания...
# MONGODB
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.database=test
См. xy.SpringBoot2NoSQL.model.Mongo.Person
@Document
public class Person {
@Id
private String id;
private String name;
private Integer age;
@Field("locs")
private Collection<Location> locations = new LinkedHashSet<Location>();
@DBRef **Поведение, связанное с хранением данных в Elasticsearch, называется индексированием (indexing).** Однако перед тем как данные будут проиндексированы, необходимо определить, где именно они должны храниться.
В Elasticsearch документы относятся к определённому типу (type), например, Classname (book). Эти типы существуют внутри индекса (index). Можно провести простую аналогию с традиционной реляционной базой данных:
Кластер Elasticsearch может содержать несколько индексов (indices) — баз данных, каждый из которых может включать множество типов (types) — таблиц, а каждый тип содержит множество документов (documents) — строк. Каждый документ содержит несколько полей (Fields) — столбцов, таких как name, age и т. д. Все поля документа индексируются, то есть имеют обратный индекс, только тогда они становятся доступными для поиска. Обратите внимание: в традиционных базах данных для конкретного столбца создаётся отдельный индекс, обычно с использованием B-Tree. Elasticsearch и Lucene используют структуру данных, называемую обратным индексом (inverted index).
Репозиторий данных (Data Layer Repository):
См. xy.SpringBoot2NoSQL.repository.ElasticSearch.SampleProductRepository.
public interface SampleProductRepository extends ElasticsearchRepository<Product,String> {
List<Product> findByName(String name);
List<Product> findByDescription(String description);
List<Product> findByName(String name, Pageable pageable);
List<Product> findByNameAndId(String name, String id);
}
С помощью наследования от ElasticsearchRepository можно выполнять основные операции CRUD и разбиение на страницы. ElasticsearchRepository наследуется от ElasticsearchCrudRepository, который, в свою очередь, расширяет PagingAndSortingRepository.
Также можно использовать ElasticSearchTemplate. ElasticSearchTemplate дополняет ESRepository и предоставляет более низкоуровневые методы, особенно связанные с запросами. Например, часто требуется вставлять большие объёмы тестовых данных в Elasticsearch для тестирования поиска. Вставлять данные по одному непрактично, поэтому ES предоставляет функцию bulk для массовой вставки. Метод JPA save также поддерживает массовую вставку (save(List)), но подходит только для небольших объёмов данных. Для вставки больших объёмов данных следует использовать функцию bulk, предоставляемую ES.
ElasticSearchTemplate также предоставляет соответствующие методы.
Контроллер (Controller):
Используется для операций CRUD:
xy.SpringBoot2NoSQL.controller.ElasticSearch.ESDataController.
Для операций запроса:
xy.SpringBoot2NoSearch.controller.ElasticSearch.ESSearchController.
Различия между matchQuery, fuzzyQuery, termsQuery и другими видами запросов можно увидеть здесь:
public Page<Product> searchProduct(@PathVariable String key,@PathVariable String value, @PathVariable String searchtype) {
Page<Product> products = null;
if (searchtype.equals("matchQuery")) {
products = sampleProductRepository.search(ESSearchUtil.matchQuery(key, value), PageRequest.of(0, 5));
}
if (searchtype.equals("matchPhraseQuery")) {
products = sampleProductRepository.search(ESSarchUtil.matchPhraseQuery(key, value), PageRequest.of(0, 5));
}
if (searchtype.equals("fuzzyQuery")) {
products = sampleProductRepository.search(ESSearchUtil.fuzzyQuery(key, value), PageRequest.of(0, 5));
}
if (searchtype.equals("termsQuery")) {
products = sampleProductRepository.search(ESSearchUtil.termsQuery(key, value), PageRequest.of(0, 5));
}
return products;
}```
Комбинированный запрос:
```public QueryBuilder getBoolQuery() {
return QueryBuilders.boolQuery()
.must(QueryBuilders.matchPhraseQuery("name", "测试产品1"))
//.mustNot(QueryBuilders.termQuery("enabled", true));
.must(QueryBuilders.matchPhraseQuery("enabled", true));
}```
**Более подробное введение:**
Работа над введением продолжается...
## Введение в Cassandra for SpringBoot
**Содержание:**
- Конфигурация SpringBoot, контроллеры, Repository Crud;
- Перед использованием необходимо создать таблицы. Скрипт создания таблиц находится в «скриптах» > «Cassandra» > «скрипт создания базы данных».
- Обратите внимание: если вы используете версию Win64 DataStax-DDC версии 3.9, после установки служба не запустится. Необходимо изменить файл конфигурации, добавив строку cdc_raw_directory со значением, аналогичным следующему: cdc_raw_directory: «ваш каталог cdcraw». Если используется версия 2.X, этой проблемы не возникает.
- Обратите внимание: перед запуском SpringBoot необходимо запустить службу Cassandra.
**Конфигурация:**
cassandra.properties
```#cassandra.properties
cassandra.contactpoints=127.0.0.1
cassandra.port=9042
cassandra.keyspace=mydb```
Класс CassandraConfig:
```@Configuration
@PropertySource(value = { "classpath:cassandra.properties" })
@EnableCassandraRepositories(basePackages = "xy.SpringBoot2NoSQL.repository.Cassandra")
public class CassandraConfig extends AbstractCassandraConfiguration {
@Autowired
private Environment environment;
@Override
protected String getKeyspaceName() {
return environment.getProperty("cassandra.keyspace");
}
@Override
@Bean
public CassandraClusterFactoryBean cluster() {
...
}```
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )