Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_45598856
white-jotter
提交
525d4372
W
white-jotter
项目概览
qq_45598856
/
white-jotter
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
W
white-jotter
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
525d4372
编写于
6月 10, 2020
作者:
E
Evan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: cache article list, #119
上级
94615724
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
196 addition
and
10 deletion
+196
-10
src/main/java/com/gm/wj/redis/RedisService.java
src/main/java/com/gm/wj/redis/RedisService.java
+5
-0
src/main/java/com/gm/wj/service/BookService.java
src/main/java/com/gm/wj/service/BookService.java
+16
-5
src/main/java/com/gm/wj/service/JotterArticleService.java
src/main/java/com/gm/wj/service/JotterArticleService.java
+26
-3
src/main/java/com/gm/wj/util/CastUtils.java
src/main/java/com/gm/wj/util/CastUtils.java
+1
-2
src/main/java/com/gm/wj/util/MyPage.java
src/main/java/com/gm/wj/util/MyPage.java
+148
-0
未找到文件。
src/main/java/com/gm/wj/redis/RedisService.java
浏览文件 @
525d4372
package
com.gm.wj.redis
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.data.redis.core.*
;
import
org.springframework.stereotype.Service
;
...
...
@@ -30,6 +31,10 @@ public class RedisService {
return
redisTemplate
.
opsForValue
().
get
(
key
);
}
// public <T> PageImpl<T> getPage(String key) {
// return redisTemplate.opsForValue().get(key);
// }
public
Boolean
delete
(
String
key
)
{
return
redisTemplate
.
delete
(
key
);
}
...
...
src/main/java/com/gm/wj/service/BookService.java
浏览文件 @
525d4372
package
com.gm.wj.service
;
import
com.gm.wj.config.RedisConfig
;
import
com.gm.wj.dao.BookDAO
;
import
com.gm.wj.entity.Book
;
import
com.gm.wj.entity.Category
;
import
com.gm.wj.redis.RedisService
;
import
com.gm.wj.util.CastUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cache.annotation.Cacheable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.processing.Processor
;
import
java.util.List
;
import
java.util.Timer
;
/**
* @author Evan
...
...
@@ -26,18 +26,29 @@ public class BookService {
@Autowired
private
RedisService
redisService
;
// @Cacheable(value = RedisConfig.REDIS_KEY_DATABASE)
public
List
<
Book
>
list
()
{
List
<
Book
>
books
;
String
key
=
"booklist"
;
List
<
Book
>
books
=
CastUtils
.
castList
(
redisService
.
get
(
key
),
Book
.
class
);
if
(
books
==
null
)
{
Object
bookCache
=
redisService
.
get
(
key
);
if
(
bookCache
==
null
)
{
Sort
sort
=
new
Sort
(
Sort
.
Direction
.
DESC
,
"id"
);
books
=
bookDAO
.
findAll
(
sort
);
redisService
.
set
(
key
,
books
);
}
else
{
books
=
CastUtils
.
objectConvertToList
(
bookCache
,
Book
.
class
);
}
return
books
;
}
// @Cacheable(value = RedisConfig.REDIS_KEY_DATABASE)
// public List<Book> list() {
// List<Book> books;
// Sort sort = new Sort(Sort.Direction.DESC, "id");
// books = bookDAO.findAll(sort);
// return books;
// }
public
void
addOrUpdate
(
Book
book
)
{
redisService
.
delete
(
"booklist"
);
bookDAO
.
save
(
book
);
...
...
src/main/java/com/gm/wj/service/JotterArticleService.java
浏览文件 @
525d4372
...
...
@@ -2,6 +2,8 @@ package com.gm.wj.service;
import
com.gm.wj.dao.JotterArticleDAO
;
import
com.gm.wj.entity.JotterArticle
;
import
com.gm.wj.redis.RedisService
;
import
com.gm.wj.util.MyPage
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
...
...
@@ -16,12 +18,33 @@ import org.springframework.stereotype.Service;
public
class
JotterArticleService
{
@Autowired
JotterArticleDAO
jotterArticleDAO
;
@Autowired
RedisService
redisService
;
public
MyPage
list
(
int
page
,
int
size
)
{
MyPage
<
JotterArticle
>
articles
;
String
key
=
"articlepage:"
+
page
;
Object
articlePageCache
=
redisService
.
get
(
key
);
public
Page
list
(
int
page
,
int
size
)
{
Sort
sort
=
new
Sort
(
Sort
.
Direction
.
DESC
,
"id"
);
return
jotterArticleDAO
.
findAll
(
PageRequest
.
of
(
page
,
size
,
sort
));
if
(
articlePageCache
==
null
)
{
Sort
sort
=
new
Sort
(
Sort
.
Direction
.
DESC
,
"id"
);
Page
<
JotterArticle
>
articlesInDb
=
jotterArticleDAO
.
findAll
(
PageRequest
.
of
(
page
,
size
,
sort
));
articles
=
new
MyPage
<>(
articlesInDb
);
redisService
.
set
(
key
,
articles
);
}
else
{
articles
=
(
MyPage
<
JotterArticle
>)
articlePageCache
;
}
return
articles
;
}
// 用于复现异常
// @Cacheable(value = RedisConfig.REDIS_KEY_DATABASE)
// public Page list(int page, int size) {
// Sort sort = new Sort(Sort.Direction.DESC, "id");
// return jotterArticleDAO.findAll(PageRequest.of(page, size, sort));
// }
public
JotterArticle
findById
(
int
id
)
{
return
jotterArticleDAO
.
findById
(
id
);
}
...
...
src/main/java/com/gm/wj/util/CastUtils.java
浏览文件 @
525d4372
...
...
@@ -8,8 +8,7 @@ import java.util.List;
* @date 2020/5/31 19:04
*/
public
class
CastUtils
{
public
static
<
T
>
List
<
T
>
castList
(
Object
obj
,
Class
<
T
>
clazz
)
{
public
static
<
T
>
List
<
T
>
objectConvertToList
(
Object
obj
,
Class
<
T
>
clazz
)
{
List
<
T
>
result
=
new
ArrayList
<
T
>();
if
(
obj
instanceof
List
<?>)
{
...
...
src/main/java/com/gm/wj/util/MyPage.java
0 → 100644
浏览文件 @
525d4372
package
com.gm.wj.util
;
import
org.springframework.data.domain.Page
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Iterator
;
import
java.util.List
;
/**
* @Author Evan
* @Date 2020/6/10
*/
public
class
MyPage
<
T
>
implements
Iterable
<
T
>,
Serializable
{
private
static
final
long
serialVersionUID
=
-
3720998571176536865L
;
private
List
<
T
>
content
=
new
ArrayList
<>();
private
long
totalElements
;
private
int
pageNumber
;
private
int
pageSize
;
private
boolean
first
;
private
boolean
last
;
private
boolean
empty
;
private
int
totalPages
;
private
int
numberOfElements
;
public
MyPage
()
{
}
//只用把原来的page类放进来即可
public
MyPage
(
Page
<
T
>
page
)
{
this
.
content
=
page
.
getContent
();
this
.
totalElements
=
page
.
getTotalElements
();
this
.
pageNumber
=
page
.
getPageable
().
getPageNumber
();
this
.
pageSize
=
page
.
getPageable
().
getPageSize
();
this
.
numberOfElements
=
page
.
getNumberOfElements
();
}
//是否有前一页
public
boolean
hasPrevious
()
{
return
getPageNumber
()
>
0
;
}
//是否有下一页
public
boolean
hasNext
()
{
return
getPageNumber
()
+
1
<
getTotalPages
();
}
//是否第一页
public
boolean
isFirst
()
{
return
!
hasPrevious
();
}
//是否最后一页
public
boolean
isLast
()
{
return
!
hasNext
();
}
//获取内容
public
List
<
T
>
getContent
()
{
return
Collections
.
unmodifiableList
(
content
);
}
//设置内容
public
void
setContent
(
List
<
T
>
content
)
{
this
.
content
=
content
;
}
//是否有内容
public
boolean
hasContent
()
{
return
getNumberOfElements
()
>
0
;
}
//获取单页大小
public
int
getPageSize
()
{
return
pageSize
;
}
//设置单页大小
public
void
setPageSize
(
int
pageSize
)
{
this
.
pageSize
=
pageSize
;
}
//获取全部元素数目
public
long
getTotalElements
()
{
return
totalElements
;
}
//设置全部元素数目
public
void
setTotalElements
(
long
totalElements
)
{
this
.
totalElements
=
totalElements
;
}
//设置是否第一页
public
void
setFirst
(
boolean
first
)
{
this
.
first
=
first
;
}
// 设置是否最后一页
public
void
setLast
(
boolean
last
)
{
this
.
last
=
last
;
}
//获取当前页号
public
int
getPageNumber
()
{
return
pageNumber
;
}
//设置当前页号
public
void
setPageNumber
(
int
pageNumber
)
{
this
.
pageNumber
=
pageNumber
;
}
//获取总页数
public
int
getTotalPages
()
{
return
getPageSize
()
==
0
?
1
:
(
int
)
Math
.
ceil
((
double
)
totalElements
/
(
double
)
getPageSize
());
}
//设置总页数
public
void
setTotalPages
(
int
totalPages
)
{
this
.
totalPages
=
totalPages
;
}
//获取单页元素数目
public
int
getNumberOfElements
()
{
return
numberOfElements
;
}
//设置单页元素数目
public
void
setNumberOfElements
(
int
numberOfElements
)
{
this
.
numberOfElements
=
numberOfElements
;
}
//判断是否为空
public
boolean
isEmpty
()
{
return
!
hasContent
();
}
//设置是否为空
public
void
setEmpty
(
boolean
empty
)
{
this
.
empty
=
empty
;
}
//迭代器
@Override
public
Iterator
<
T
>
iterator
()
{
return
getContent
().
iterator
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录