Redis

1. Using simple Redis

application-local.yaml file

spring:

data:
redis:
host: localhost
port: 6379

datasource:
username: msiamuser
password: msiampass123
url: jdbc:postgresql://localhost:5432/iam_db
driverClassName: org.postgresql.Driver
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 5
maximum-pool-size: 20
idle-timeout: 30000
connection-timeout: 30000
max-lifetime: 1800000
pool-name: MsIamHikariCP
connection-test-query: SELECT 1
leak-detection-threshold: 15000
auto-commit: false


jpa:
show-sql: false
open-in-view: false
database: postgresql
database-platform: org.hibernate.dialect.PostgreSQLDialect
hibernate:
ddl-auto: update
properties:
hibernate:
format_sql: false
use_sql_comments: false
connection.provider_disables_autocommit: true
id.new_generator_mappings: true

liquibase:
change-log: classpath:config/liquibase/changelog-master.xml
enabled: false

management:
endpoints:
web:
exposure:
include: health,info,prometheus,metrics
endpoint:
health:
probes:
enabled: true

server:
port: 8080
shutdown: graceful
forward-headers-strategy: framework
compression:
enabled: true
mime-types:
- text/html
- text/css
- text/javascript
- application/javascript
- application/json
- application/xml
- text/xml
min-response-size: 1024
servlet:
session:
cookie:
http-only: true

springdoc:
paths-to-match: /api/**
packages-to-scan: az.azerconnect.bakcell.b2b.msiam.controller
paths-to-exclude: /internal/**
swagger-ui:
path: /api
try-it-out-enabled: true

logging:
level:
root: info
az.azerconnect.bakcell.b2b.msiam: debug

application:
security:
white-list-apis:
- /swagger-ui/**
- /v3/api-docs/**
- /swagger-resources/**
- /swagger-resources
- /webjars/**
- /favicon.ico
- /actuator/health
- /api/v1/auth/**
access-token-validity-seconds: 1200
refresh-token-validity-seconds: 86400
secret-key: TkhCNU1WRnRiRzVKUlVwNVlqTlNiMXBZU1dkUmJsWjVZVWRHZFRSd2VURT0=
login-attempt-max-count: 10

caches:
token:
common-key: token
details:
auth-response:
prefix: auth-response:${application.caches.token.common-key}
ttl-in-seconds: 86400
reset-password-token:
common-key: reset-password
details:
reset:
prefix: reset:${application.caches.reset-password-token.common-key}
ttl-in-seconds: 604800
forgot:
prefix: forgot:${application.caches.reset-password-token.common-key}
ttl-in-seconds: 1200
limit:
common-key: limit
details:
login-attempt:
prefix: login-attempt:${application.caches.limit.common-key}
ttl-in-seconds: 86400


docker-compose.yaml file

version: '3.9'

services:

postgres:
image: postgres:latest
container_name: pds_postgres
restart: unless-stopped
ports:
- "5432:5432"
environment:
POSTGRES_DB: iam_db
POSTGRES_USER: msiamuser
POSTGRES_PASSWORD: msiampass123
volumes:
- pgdata:/var/lib/postgresql/data

redis:
image: redis:latest
container_name: redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
# networks:
# - redis-network

volumes:
pgdata:
driver: local
redis-data:



RedisConfig class:

package az.etibarli.b2btest.config.properties.config;

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.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}

}


and this is simple usage of Redis:

package az.etibarli.b2btest;

import az.etibarli.b2btest.config.properties.ApplicationProperties;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.Map;

@SpringBootApplication
@RequiredArgsConstructor
public class B2bTestApplication implements CommandLineRunner {

private final ApplicationProperties applicationProperties;
private final RedisTemplate<String, Object> redisTemplate;

public static void main(String[] args) {
SpringApplication.run(B2bTestApplication.class, args);
}

@Override
public void run(String... args) throws Exception {
redisTemplate.opsForValue().set("key1", "value1");
Object andSet = redisTemplate.opsForValue().getAndSet("key1", "value2");
System.out.println(andSet);
Object key1 = redisTemplate.opsForValue().get("key1");
System.out.println(key1);
}
}


package az.etibarli.b2btest;

import az.etibarli.b2btest.config.properties.ApplicationProperties;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.Map;
import java.util.concurrent.TimeUnit;

@SpringBootApplication
@RequiredArgsConstructor
public class B2bTestApplication implements CommandLineRunner {

private final ApplicationProperties applicationProperties;
private final RedisTemplate<String, Object> redisTemplate;

public static void main(String[] args) {
SpringApplication.run(B2bTestApplication.class, args);
}

@Override
public void run(String... args) throws Exception {
redisTemplate.opsForValue().set("key1", "value1", 2, TimeUnit.SECONDS);
Object key1 = redisTemplate.opsForValue().get("key1");
System.out.println(key1);
Thread.sleep(3000);
Object key2 = redisTemplate.opsForValue().get("key1");
System.out.println(key2);
}
}



























 

Комментарии

Популярные сообщения из этого блога

Lesson1: JDK, JVM, JRE

SE_21_Lesson_11: Inheritance, Polymorphism

SE_21_Lesson_9: Initialization Blocks, Wrapper types, String class