Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
pisns-forum-api
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
scrmGroup
pisns-forum-api
Commits
7666958f
Commit
7666958f
authored
Jan 26, 2016
by
陈家荣
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
推荐列表增加缓存
parent
7596abfc
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
272 additions
and
71 deletions
+272
-71
forumThread.js
app/controllers/admin/forumThread.js
+6
-1
forumThread.js
app/controllers/mobile/forumThread.js
+137
-70
redisThreadList
app/utils/redisThreadList
+129
-0
No files found.
app/controllers/admin/forumThread.js
View file @
7666958f
...
...
@@ -23,7 +23,8 @@ var forumThreadService = require('../../service/forumThreadService'),
// var forumLimitActionRefService = require('../../service/forumLimitActionRefService');
forumLimitOperationService
=
require
(
'../../service/forumLimitOperationService'
),
forumAboutMEService
=
require
(
'../../service/forumAboutMEService'
),
httpService
=
require
(
'../../service/httpService'
);
httpService
=
require
(
'../../service/httpService'
),
redisThreadList
=
require
(
'../../utils/redisThreadList'
);
var
userUtil
=
require
(
'../../utils/user'
);
var
floorGenerator
=
require
(
'../../utils/floorGenerator'
);
...
...
@@ -1593,6 +1594,8 @@ router.post('/thread/:tid/essence', function(req, res, next) {
console
.
error
(
err
);
res
.
json
(
returnCode
.
BUSY
);
}
else
{
//更新推荐列表redis
redisThreadList
.
updateRedisEsenceThreads
(
ent_code
,
""
,
'_thread_essence'
,
function
()
{});
res
.
json
(
returnCode
.
SUCCESS
);
}
});
...
...
@@ -1619,6 +1622,8 @@ router.post('/thread/:tid/unEssence', function(req, res, next) {
console
.
error
(
err
);
res
.
json
(
returnCode
.
BUSY
);
}
else
{
//更新推荐列表redis
redisThreadList
.
updateRedisEsenceThreads
(
ent_code
,
""
,
'_thread_essence'
,
function
()
{});
res
.
json
(
returnCode
.
SUCCESS
);
}
});
...
...
app/controllers/mobile/forumThread.js
View file @
7666958f
...
...
@@ -24,6 +24,7 @@ var user = require('../../utils/user');
var
floorGenerator
=
require
(
'../../utils/floorGenerator'
);
var
async
=
require
(
'async'
);
var
ForumModeratorApply
=
mongoose
.
model
(
'ForumModeratorApply'
);
var
redisThreadList
=
require
(
'../../utils/redisThreadList'
);
module
.
exports
=
function
(
app
)
{
app
.
use
(
'/v1/forum'
,
router
);
};
...
...
@@ -1774,10 +1775,11 @@ router.post('/thread/:tid/disable', function(req, res, next) {
});
//获取推荐文章
router
.
get
(
'/thread/getThreadWithEssence'
,
function
(
req
,
res
,
next
)
{
//获取推荐文章
//旧的,无用 2016/1/28日后请删除
router
.
get
(
'/thread/getThreadWithEssence
_old
'
,
function
(
req
,
res
,
next
)
{
var
pageNo
=
req
.
query
.
pageNo
||
1
;
var
pageSize
=
req
.
query
.
pageSize
||
10
;
var
infoId
=
req
.
query
.
infoId
||
null
;
var
sort
=
'-new_recommend_time'
;
var
ent_code
=
req
.
session
.
user
.
ent_code
;
var
today
=
new
Date
();
...
...
@@ -1795,43 +1797,18 @@ router.get('/thread/getThreadWithEssence', function(req, res, next) {
'event.eventStartTime'
:
{
$lte
:
today
}
}]
};
forumThreadService
.
getThreadWithNotPopulateComment
(
conditions
,
pageNo
,
pageSize
,
sort
,
function
(
err
,
results
)
{
if
(
err
)
{
console
.
error
(
err
);
res
.
json
(
returnCode
.
BUSY
);
}
else
{
util
.
loadLevel
(
req
.
session
.
user
.
ent_code
,
results
.
items
,
function
()
{
redisPraiseLog
.
get
(
ent_code
,
user
.
getMobileUser
(
req
),
'thread'
,
function
(
error
,
docs
)
{
_
.
forEach
(
results
.
items
,
function
(
d
,
i
)
{
if
(
results
.
items
[
i
].
toObject
)
{
results
.
items
[
i
]
=
results
.
items
[
i
].
toObject
();
if
(
infoId
){
conditions
.
info
=
infoId
;
}
//设置帖子的活动
if
(
results
.
items
[
i
].
isEvent
&&
results
.
items
[
i
].
isEvent
==
1
){
if
(
results
.
items
[
i
].
event
.
eventEndTime
<
today
){
results
.
items
[
i
].
eventStatus
=
2
;
//'已结束'
;
queryThread
(
conditions
,
pageNo
,
pageSize
,
sort
,
function
(
err
,
results
){
if
(
err
){
console
.
error
(
err
);
res
.
json
(
returnCode
.
BUSY
)
;
}
else
{
results
.
items
[
i
].
eventStatus
=
1
;
//'进行中';
}
}
//获取等级最高的荣誉
if
(
results
.
items
[
i
].
from
.
honorTitles
&&
results
.
items
[
i
].
from
.
honorTitles
.
length
>
0
){
var
temp_honorTitles
=
_
.
sortBy
(
results
.
items
[
i
].
from
.
honorTitles
,
'order_idx'
)
results
.
items
[
i
].
from
.
honorTitles
=
temp_honorTitles
[
temp_honorTitles
.
length
-
1
];
}
results
.
items
[
i
].
isPraise
=
false
;
for
(
var
k
=
docs
.
length
-
1
;
k
>=
0
;
k
--
)
{
if
(
results
.
items
[
i
].
_id
==
docs
[
k
])
{
results
.
items
[
i
].
isPraise
=
true
;
break
;
}
};
});
res
.
json
(
_
.
assign
(
results
,
returnCode
.
SUCCESS
));
util
.
loadLevel
(
ent_code
,
results
.
items
,
function
()
{
handleThreadList
(
req
,
results
,
ent_code
,
function
(
result
){
res
.
json
(
_
.
assign
(
result
,
returnCode
.
SUCCESS
));
});
});
}
...
...
@@ -1842,6 +1819,7 @@ router.get('/thread/getThreadWithEssence', function(req, res, next) {
router
.
get
(
'/thread/getThreadWithNotPopulateComment'
,
function
(
req
,
res
,
next
)
{
var
pageNo
=
req
.
query
.
pageNo
||
1
;
var
pageSize
=
req
.
query
.
pageSize
||
10
;
var
infoId
=
req
.
query
.
infoId
||
null
;
var
sort
=
'-_id'
;
var
ent_code
=
req
.
session
.
user
.
ent_code
;
var
today
=
new
Date
();
...
...
@@ -1858,12 +1836,104 @@ router.get('/thread/getThreadWithNotPopulateComment', function(req, res, next) {
'event.eventStartTime'
:
{
$lte
:
today
}
}]
};
forumThreadService
.
getThreadWithNotPopulateComment
(
conditions
,
pageNo
,
pageSize
,
sort
,
function
(
err
,
results
)
{
if
(
err
)
{
if
(
infoId
){
conditions
.
info
=
infoId
;
}
queryThread
(
conditions
,
pageNo
,
pageSize
,
sort
,
function
(
err
,
results
){
if
(
err
){
console
.
error
(
err
);
res
.
json
(
returnCode
.
BUSY
);
}
else
{
util
.
loadLevel
(
req
.
session
.
user
.
ent_code
,
results
.
items
,
function
()
{
}
else
{
util
.
loadLevel
(
ent_code
,
results
.
items
,
function
()
{
handleThreadList
(
req
,
results
,
ent_code
,
function
(
result
){
res
.
json
(
_
.
assign
(
result
,
returnCode
.
SUCCESS
));
});
});
}
});
});
//获取推荐文章
router
.
get
(
'/thread/getThreadWithEssence'
,
function
(
req
,
res
,
next
)
{
var
pageNo
=
req
.
query
.
pageNo
||
1
;
var
pageSize
=
req
.
query
.
pageSize
||
10
;
var
infoId
=
req
.
query
.
infoId
||
null
;
var
ent_code
=
req
.
session
.
user
.
ent_code
;
var
skip
=
(
pageNo
-
1
)
*
pageSize
;
var
redis_type
=
'_thread_essence'
;
var
sort
=
'-new_recommend_time'
;
var
today
=
new
Date
();
var
conditions
=
{
ent_code
:
ent_code
,
level
:
1
,
status
:
1
,
new_recommend
:
1
,
$or
:
[{
isEvent
:
0
},
{
isEvent
:
null
},
{
isEvent
:
1
,
'event.eventStartTime'
:
{
$lte
:
today
}
}]
};
if
((
pageNo
*
pageSize
)
>
redisThreadList
.
getThreadRedisCount
()
||
infoId
){
if
(
infoId
){
conditions
.
info
=
infoId
;
}
queryThread
(
conditions
,
pageNo
,
pageSize
,
sort
,
function
(
err
,
results
){
if
(
err
){
console
.
error
(
err
);
res
.
json
(
returnCode
.
BUSY
);
}
else
{
util
.
loadLevel
(
ent_code
,
results
.
items
,
function
()
{
handleThreadList
(
req
,
results
,
ent_code
,
function
(
result
){
res
.
json
(
_
.
assign
(
result
,
returnCode
.
SUCCESS
));
});
});
}
});
}
else
{
//更新推荐列表redis
redisThreadList
.
get
(
ent_code
,
""
,
redis_type
,
function
(
error
,
docs
)
{
var
results
=
JSON
.
parse
(
docs
);
if
(
results
.
items
==
null
){
//如果不存在,继续重新获取
redisThreadList
.
getRedisEsenceThreads
(
ent_code
,
""
,
redis_type
,
function
(
error
,
docs
){
if
(
error
){
console
.
error
(
err
);
res
.
json
(
returnCode
.
BUSY
);
}
else
{
docs
=
JSON
.
parse
(
docs
);
docs
.
items
=
docs
.
items
.
slice
(
skip
,
skip
+
pageSize
);
handleThreadList
(
req
,
docs
,
ent_code
,
function
(
result
){
res
.
json
(
_
.
assign
(
result
,
returnCode
.
SUCCESS
));
});
}
});
}
else
{
//只取缓存里面
results
.
items
=
results
.
items
.
slice
(
skip
,
Number
(
skip
)
+
Number
(
pageSize
));
handleThreadList
(
req
,
results
,
ent_code
,
function
(
result
){
res
.
json
(
_
.
assign
(
result
,
returnCode
.
SUCCESS
));
});
}
});
}
});
//查询帖子
function
queryThread
(
conditions
,
pageNo
,
pageSize
,
sort
,
callback
){
forumThreadService
.
getThreadWithNotPopulateComment
(
conditions
,
pageNo
,
pageSize
,
sort
,
function
(
err
,
results
)
{
callback
(
err
,
results
);
});
}
//处理帖子
function
handleThreadList
(
req
,
results
,
ent_code
,
callback
){
var
today
=
new
Date
();
redisPraiseLog
.
get
(
ent_code
,
user
.
getMobileUser
(
req
),
'thread'
,
function
(
error
,
docs
)
{
_
.
forEach
(
results
.
items
,
function
(
d
,
i
)
{
if
(
results
.
items
[
i
].
toObject
)
{
...
...
@@ -1892,11 +1962,8 @@ router.get('/thread/getThreadWithNotPopulateComment', function(req, res, next) {
break
;
}
};
});
res
.
json
(
_
.
assign
(
results
,
returnCode
.
SUCCESS
));
});
});
}
callback
(
results
);
});
});
\ No newline at end of file
}
app/utils/redisThreadList
0 → 100644
View file @
7666958f
'use strict';
var redis=global.redis;
var expire = 60*60*3;
//缓存数量
var ThreadRedisCount = 50;
var _ = require('lodash');
var then = require('thenjs');
var forumThreadService=require('../service/forumThreadService');
var redisPraiseLog=require('./redisPraiseLog');
var util=require('./util');
function getKey(ent_code,keyID,type){
var key = ent_code + keyID + type;
return key;
}
function setToRedis(ent_code,keyID,type,value){
var key = getKey(ent_code,keyID,type);
if(!redis){
console.log('redis error');
return 'error'
}
redis.set(key, value, function(error, res){
redis.expire(key, expire);
return 'success'
});
}
exports.get=function(ent_code,keyID,type,callback){
var key = getKey(ent_code,keyID,type);
if(!redis){
console.log('redis error');
return callback && callback('error');
}
redis.get(key, function(error, res){
if(!res){
//不存在,先获取再返回
getEsenceThreads(ent_code, keyID, type,function(err){
redis.get(key, function(error, res){
return callback && callback(error, res.split(","));
});
});
}else{
return callback && callback(error, res);
}
});
};
exports.set=function(ent_code,keyID,type,value,callback){
var key = getKey(ent_code,keyID,type);
if(!redis){
console.log('redis error');
return callback && callback('error');
}
redis.set(key, value, function(error, res){
redis.expire(key, expire);
return callback && callback(error, 'success');
});
};
exports.clear = function(ent_code,keyID,type,callback){
var key = getKey(ent_code,keyID,type);
if(!redis){
console.log('redis error');
return callback && callback('error');
}
redis.del(key, function(error, res){
return callback && callback(error, !!res);
});
};
function getEsenceThreads(ent_code,keyID,type,callback){
var sort = '-new_recommend_time';
var today = new Date();
var conditions = {
ent_code: ent_code,
level: 1,
status: 1,
new_recommend: 1,
$or: [{
isEvent: 0
}, {
isEvent: null
}, {
isEvent: 1,
'event.eventStartTime' : {$lte : today}
}]
};
forumThreadService.getThreadWithNotPopulateComment(conditions, 1, ThreadRedisCount, sort, function(err, results) {
if (err) {
console.error(err);
callback(err);
} else {
util.loadLevel(ent_code, results.items, function() {
setToRedis(ent_code,keyID,type,JSON.stringify(results));
callback(null);
});
}
});
};
//获取缓存列表
exports.getRedisEsenceThreads = function(ent_code,keyID,type,callback){
var key = getKey(ent_code,keyID,type);
getEsenceThreads(ent_code, keyID,type, function(err){
redis.get(key, function(error, res){
return callback && callback(error, res.split(","));
});
});
};
//更新缓存列表
exports.updateRedisEsenceThreads = function(ent_code,keyID,type,callback){
var key = getKey(ent_code,keyID,type);
getEsenceThreads(ent_code, keyID,type, function(err){
callback();
});
};
//获取缓存数值
exports.getThreadRedisCount = function(){
// callback(ThreadRedisCount);
return ThreadRedisCount;
};
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment