国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - spring-data-redis 2.0 的使用示例代碼

spring-data-redis 2.0 的使用示例代碼

2021-07-10 14:36夢見山 Java教程

這篇文章主要介紹了spring-data-redis 2.0 的使用示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在使用spring boot2.x運行redis時,發現百度不到順手的文檔,搞通后發現其實這個過程非常簡單和簡潔,覺得有必要拿出來分享一下。

spring boot2.x 不再使用jedis,換成了lettuce。lettuce是基于 netty 實現的,所以性能更好。但是我看到很多文章居然在spring boot 2.x還在寫jedis的配置。

依賴

依賴比較簡單,spring-boot-starter-data-redis、commons-pool2 即可。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- redis -->
<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-data-redis</artifactid>
</dependency>
 
 
<!--spring2.0集成redis所需common-pool2-->
<dependency>
  <groupid>org.apache.commons</groupid>
  <artifactid>commons-pool2</artifactid>
  <version>2.4.2</version>
</dependency>

屬性配置

在屬性中配置redis server的訪問地址、密碼、數據庫,并配置連接池的屬性。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
redis:
 #  reids的連接ip
 host: 127.0.0.1
 port: 6379
 password: helloworld
 
 # redis默認情況下有16個分片,這里配置具體使用的分片,默認是0
 database: 0
 
 # 連接超時時間(毫秒)
 timeout: 10000ms
 
 # redis client配置,使用lettuce
 lettuce:
  pool:
   # 連接池中的最小空閑連接 默認 0
   min-idle: 0
   # 連接池最大阻塞等待時間(使用負值表示沒有限制) 默認 -1
   max-wait: 1000ms
   # 連接池最大連接數(使用負值表示沒有限制) 默認 8
   max-active: 8
   # 連接池中的最大空閑連接 默認 8
   max-idle: 8

注解配置

全局使能緩存

?
1
2
3
4
5
6
7
8
9
@enableswagger2     // 使用swagger api 功能
@enablecaching      // 使用緩存
@springbootapplication
public class starter {
 
  public static void main(string[] args) {
    springapplication.run(starter.class, args);
  }
}

通過注解使用緩存,@cacheable 將獲取值存入緩存

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * 基于id 獲取用戶信息
 */
@cacheable(value="user", key="#id", unless="#result == null")
public userdto getuserbyid(int id) {
  user userentity = usermapper.getuserbyid(id);
  if (userentity == null){
    return null;
  }
 
  /* entity 轉 dto */
  userdto userdto = new userdto();
  userdto.setage(userentity.getage());
  userdto.setid(id);
  userdto.setname(userentity.getname());
  userdto.setcreatetime(unixtime2string(userentity.getcreatetime()));
  userdto.setphone(userentity.getphone());
  userdto.setemail(userentity.getemail());
  return userdto;
}

@cacheput 更新緩存

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@cacheput(value = "user", key="#p0.id")
public userdto updateuser(inputuserinfodto inputuserinfodto){
  usermapper.updateuser(inputuserinfodto.getid(), inputuserinfodto.getname(), inputuserinfodto.getage());
  user userentity = usermapper.getuserbyid(inputuserinfodto.getid());/* entity 轉 dto */
 
  if (null == userentity){
    return null;
  }
  userdto userdto = new userdto();
  userdto.setage(userentity.getage());
  userdto.setid(userentity.getid());
  userdto.setname(userentity.getname());
  userdto.setcreatetime(unixtime2string(userentity.getcreatetime()));
  userdto.setphone(userentity.getphone());
  userdto.setemail(userentity.getemail());
  return userdto;
}

@cacheevict 刪除緩存

?
1
2
3
4
@cacheevict(value = "user", key="#id")
public void deleteuser(int id){
  usermapper.deleteuser(id);
}

當然為了支持序列化,我的userdto得implements serializable

?
1
2
3
4
5
6
7
8
9
10
@data
public class userdto implements serializable {
//public class userdto implements serializable {
  private int id;
  private string name;
  private int age;
  private string createtime;
  private string phone;
  private string email;
}

至此緩存已經可以用起來了,不需要編寫redisconfig代碼,有點小遺憾,直接去redis查看數據,發現是亂碼。這是因為我使用的是java自帶的序列化,如果要更換redis序列化方法,就要重寫redisconfig了。

redisconfig

這個配置也不復雜,使用jackson2jsonredisserializer將對象轉換為json串,注意這里一定要使用objectmapper,否則再將json串反序列化為對象時會報。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@configuration
@conditionalonclass(redisoperations.class)
@enableconfigurationproperties(redisproperties.class)
public class redisconfig extends cachingconfigurersupport{
 
  @bean
  public cachemanager cachemanager(redisconnectionfactory factory) {
    redisserializer<string> redisserializer = new stringredisserializer();
    jackson2jsonredisserializer jackson2jsonredisserializer = new jackson2jsonredisserializer(object.class);
 
    //解決查詢緩存轉換異常的問題
    objectmapper om = new objectmapper();
    om.setvisibility(propertyaccessor.all, jsonautodetect.visibility.any);
    om.enabledefaulttyping(objectmapper.defaulttyping.non_final);
    jackson2jsonredisserializer.setobjectmapper(om);
 
    // 配置序列化(解決亂碼的問題)
    rediscacheconfiguration config = rediscacheconfiguration.defaultcacheconfig()
                      .entryttl(duration.zero)
                      .serializekeyswith(redisserializationcontext.serializationpair.fromserializer(redisserializer))
                      .serializevalueswith(redisserializationcontext.serializationpair.fromserializer(jackson2jsonredisserializer))
                      .disablecachingnullvalues();
 
    rediscachemanager cachemanager = rediscachemanager.builder(factory).cachedefaults(config).build();
    return cachemanager;
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://segmentfault.com/a/1190000017953598

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产日韩一级片 | 爱爱视频网站 | 羞羞网站在线观看 | 午夜精品久久久久 | 正在播放国产一区 | 国产精品福利电影网 | 久久人 | 午夜私人影院 | 色综合av | 男人天堂网址 | 久久露脸国产精品 | 日韩亚洲一区二区 | 日韩中文一区二区三区 | 九色自拍 | 免费高清黄色 | 在线国产小视频 | 色爱区综合五月激情 | 色综合天天天天做夜夜夜夜做 | 久久99精品久久久久久国产越南 | 在线观看 亚洲 | 男女xx网站 | 午夜av影院 | 亚洲精品成人av | 色接久久| 日韩精品一区二区三区第95 | 中文字幕在线电影观看 | 欧美自拍偷拍 | 91精品久久久久久久久久久 | 亚洲精品视频在线观看网站 | 在线视频亚洲 | 动漫精品一区二区 | 久久免费黄色网址 | 青青草91在线视频 | 99爱视频 | 国产美女啪啪 | 国产中文一区二区三区 | 来个一级毛片 | 亚洲婷婷一区二区三区 | 看a网址 | 欧美视频第一页 | 亚洲激情在线播放 |