1.整合Redis
- docker安裝Redis
(1)拉取鏡像
$ docker pull redis
(2) 啓動鏡像
$ docker run -d -v /home/milk/docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -p 6379:6379 --name redis f7302e4ab3a8 redis-server /usr/local/etc/redis/redis.conf --requirepass '123456'
requirepass:表示連接Redis密碼
(3)進入Redis
$ docker exec -it redis redis-cli
- Spring Boot整合Redis
(1) 引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
由於平時使用jedis
比較多,在此排除默認的lettuce-core
而使用jedis
(2) 配置application.yml
spring:
redis:
database: 0
host: localhost
port: 6379
password: 123456
jedis:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: -1ms
屬性 | 說明 |
---|---|
jedis.pool.max-active | 連接池最大連接數 |
jedis.pool.max-idle | 連接池最大空閒數 |
jedis.pool.min-idle | 連接池最小空閒數 |
jedis.pool.min-idle | 連接池最小空閒數 |
jedis.pool.max-wait | 連接池最大阻塞等待時間,默然爲-1 |
- 創建實體
@Data
public class Book implements Serializable {
/**id*/
private int id;
/**用戶名*/
private String name;
/**作者*/
private String author;
}
- controller中使用
@RestController
public class BookController {
@Resource
RedisTemplate redisTemplate;
@Resource
StringRedisTemplate stringRedisTemplate;
@GetMapping("/test1")
public void test1(){
ValueOperations<String, String> ops1 = stringRedisTemplate.opsForValue();
ops1.set("name", "三國演義");
String name = ops1.get("name");
System.out.println(name);
ValueOperations ops2 = redisTemplate.opsForValue();
Book b1 = new Book();
b1.setId(1);
b1.setName("紅樓夢");
b1.setAuthor("曹雪芹");
ops2.set("b1", b1);
Book book = (Book) ops2.get("b1");
System.out.println(book);
}
}
代碼說明:
stringRedisTemplate:表示key和value值爲字符串
redisTemplate:表示值可以爲對象
opsForValue:獲取操作對象,還有opsForZSet、opsForSet等方法
- 測試:請求接口,獲取相應 的值
2.整合MongoDB
- docker安裝MongoDB
(1)拉取鏡像
$ docker pull mongo
(2)啓動鏡像
$ docker run -d -p 27017:27017 --name mongo -v /my/milk/docker/datadir:/data/db mongo
(3) 創建用戶
# 使用數據庫`study`
use study
# 創建用戶
db.createUser({user:'study',pwd:'123',roles:[{role:'readWrite',db:'study'}]})
# 檢查用戶,返回`1`則表示認證成功
db.auth('study','123')
- Spring Boot整合mongodb
(1) 引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
(2)配置application.yml
spring:
data:
mongodb:
uri: mongodb://study:123@localhost:27017/study
(3)使用上例中實體
(4)使用MongoRepository存取(適合jpa查詢方式)
public interface BookDao extends MongoRepository<Book,Integer> {
List<Book> findByAuthorContains(String author);
Book findByNameEquals(String name);
}
(5)Controller中使用
@RestController
public class BookController {
@Resource
private BookDao bookDao;
@GetMapping("/test2")
public void test2(){
List<Book> books = new ArrayList<>();
Book b1 = new Book();
b1.setId(1);
b1.setName("天龍八部");
b1.setAuthor("金庸");
books.add(b1);
Book b2 = new Book();
b2.setId(2);
b2.setName("射鵰英雄傳");
b2.setAuthor("金庸");
books.add(b2);
bookDao.insert(books);
List<Book> books1 = bookDao.findByAuthorContains("金庸");
System.out.println(books1);
Book book = bookDao.findByNameEquals("天龍八部");
System.out.println(book);
}
}
(6)使用MongoTemplate存取
@RestController
public class BookController {
@Resource
private MongoTemplate mongoTemplate;
@GetMapping("/test3")
public void test3() {
List<Book> books = new ArrayList<>();
Book b1 = new Book();
b1.setId(3);
b1.setName("鹿鼎記");
b1.setAuthor("金庸");
books.add(b1);
Book b2 = new Book();
b2.setId(4);
b2.setName("倚天屠龍記");
b2.setAuthor("金庸");
books.add(b2);
mongoTemplate.insertAll(books);
List<Book> all = mongoTemplate.findAll(Book.class);
System.out.println(all);
Book book = mongoTemplate.findById(3, Book.class);
System.out.println(book);
}
}
3.Session共享
在多個下游服務器時,爲了保證多個服務器獲得的session均一致,則在此將session存入Redis中,所有服務器獲取的session均從Redis中獲取
- 引入依賴
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
- 配置
application.yml
和上邊配置Redis
相同 - 啓動類增加註解
@EnableRedisHttpSession
- controller應用
@RestController
public class HelloController {
@Value("${server.port}")
public String port;
@GetMapping("/save")
public String saveName(@RequestParam("name") String name, HttpServletRequest request){
request.getSession().setAttribute("name", name);
return port;
}
@GetMapping("/get")
public String getName(HttpServletRequest request){
System.out.println(port);
return port+":"+request.getSession().getAttribute("name").toString();
}
}
- 啓動兩個服務,端口分別爲8888和9999,使用8888調用save方法,9999調用get方法獲取到存入的session,表示session共享成功