CounpenRepository.java
5.3 KB
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.zhaoonline.coupen.repository;
import com.zhaoonline.coupen.bean.Activity;
import com.zhaoonline.coupen.bean.CommonCoupenEntity;
import com.zhaoonline.coupen.bean.CommonCoupenSeed;
import com.zhaoonline.redis.repository.DataValueRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
/**
* Created by ZhaoOnline<br/>
* User: yangyoupeng<br/>
* Date: 2016/12/17<br/>
* Time: 14:46<br/>
* Description:please descript you class
*/
public class CounpenRepository {
private static final String radisKeyCoupenPreffix="coupen";
private static final String radisKeyActivityPreffix="activity";
private static final String radisKeySeedPreffix="seed";
private DataValueRepository<CommonCoupenEntity> coupenRepository =null;
private RedisTemplate<String,CommonCoupenEntity> redisTemplate;
private static GenericJackson2JsonRedisSerializer valueDeSe= new GenericJackson2JsonRedisSerializer();
@Autowired
public CounpenRepository(DataValueRepository<CommonCoupenEntity> coupenRepository){
this.coupenRepository=coupenRepository;
redisTemplate = this.coupenRepository.getRedisTemplate();
}
public boolean saveCoupenEntity(CommonCoupenEntity coupen) {
String coupenKey=concatCoupenRedisKey(coupen.getCoupenID());
CommonCoupenSeed seed=coupen.getSeed();
byte[] activityKeyBytes =null;
byte[] seedKeyBytes=null;
if(seed !=null){
String seedKey=concatSeedRedisKey(seed.getSeedID());
seedKeyBytes=redisTemplate.getStringSerializer().serialize(seedKey);
Activity activity= seed.getActivity();
if(activity != null){
String activityKey=concatActivityRedisKey(activity.getActivityID());
activityKeyBytes=redisTemplate.getStringSerializer().serialize(activityKey);
}
}
byte[] coupenKeyBytes=redisTemplate.getStringSerializer().serialize(coupenKey);
byte[] valueBytes=valueDeSe.serialize(coupen);
CoupenAddRedisCallBack addRedisCallBack = new CoupenAddRedisCallBack(activityKeyBytes,seedKeyBytes,coupenKeyBytes,valueBytes);
redisTemplate.executePipelined(addRedisCallBack);
return true;
}
private String concatActivityRedisKey(Integer activityID) {
return radisKeyActivityPreffix+":"+activityID;
}
private String concatSeedRedisKey(String seedID) {
return radisKeySeedPreffix+":"+seedID;
}
public void deleteCoupenEntityByKey(CommonCoupenEntity coupen){
String coupenKey=concatCoupenRedisKey(coupen.getCoupenID());
CommonCoupenSeed seed=coupen.getSeed();
String seedKey=concatSeedRedisKey(seed.getSeedID());
byte[] coupenKeyBytes=redisTemplate.getStringSerializer().serialize(coupenKey);
byte[] seedKeyBytes=redisTemplate.getStringSerializer().serialize(seedKey);
redisTemplate.executePipelined(new RedisCallback<CommonCoupenEntity>() {
@Override
public CommonCoupenEntity doInRedis(RedisConnection connection) throws DataAccessException {
connection.del(coupenKeyBytes);
connection.sRem(seedKeyBytes,coupenKeyBytes);
//必须要返回null。否则会抛出异常
// org.springframework.dao.InvalidDataAccessApiUsageException: Callback cannot return a non-null value as it gets overwritten by the pipeline
return null;
}
});
//coupenRepository.delete(activitySaveedKey);
}
public CommonCoupenEntity getCoupenEntityByKey(String coupenID){
String activitySaveedKey=concatCoupenRedisKey(coupenID);
CommonCoupenEntity result= coupenRepository.get(activitySaveedKey);
return result;
}
private String concatCoupenRedisKey(String key){
return radisKeyCoupenPreffix+":"+key;
}
public class CoupenAddRedisCallBack implements RedisCallback<CommonCoupenEntity>{
private byte[] activityKeyBytes =null;
private byte[] seedKeyBytes =null;
private byte[] coupenKeyBytes =null;
private byte[] valueBytes =null;
public CoupenAddRedisCallBack(byte[] activityKeyBytes , byte[] seedKeyBytes,byte[] coupenKeyBytes, byte[] valueBytes){
this.activityKeyBytes=activityKeyBytes;
this.seedKeyBytes = seedKeyBytes;
this.coupenKeyBytes = coupenKeyBytes;
this.valueBytes = valueBytes;
}
@Override
public CommonCoupenEntity doInRedis(RedisConnection connection) throws DataAccessException {
// connection.watch(coupenKeyBytes);
// connection.multi();
if(activityKeyBytes != null){
connection.sAdd(activityKeyBytes,seedKeyBytes);
}
if(seedKeyBytes != null){
connection.sAdd(seedKeyBytes,coupenKeyBytes);
}
connection.setNX(coupenKeyBytes,valueBytes);
// connection.exec();
// connection.unwatch();
return null;
}
}
}