springboot學習筆記|第三篇:Spring Boot+Nosql

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共享成功
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章