redis在Java web项目的简单应用(转载)

看到一篇关于redis和spring集成的文章,实际测试后,可以。转载以备用。谢谢 亲昵YY!

html,body { font-size: 15px }
body { font-family: Helvetica, "Hiragino Sans GB", "微软雅黑", "Microsoft YaHei UI", SimSun, SimHei, arial, sans-serif; line-height: 1.6; margin: 0; padding: 1.33rem 1rem }
h1,h2,h3,h4,h5,h6 { margin: 1.33rem 0 0.667rem; padding: 0; font-weight: bold }
h1 { font-size: 1.4rem }
h2 { font-size: 1.33rem }
h3 { font-size: 1.2rem }
h4 { font-size: 1.13rem }
h5 { font-size: 1rem }
h6 { font-size: 1rem; color: #777777; margin: 1rem 0 }
div,p,ul,ol,dl,li { margin: 0 }
blockquote,table,pre,code { margin: 8px 0 }
ul,ol { padding-left: 2.13rem }
blockquote { padding: 0 0.8rem }
blockquote>:first-child { margin-top: 0 }
blockquote>:last-child { margin-bottom: 0 }
img { border: 0; max-width: 100%; height: auto !important; margin: 2px 0 }
table { border-collapse: collapse; border: 1px solid #bbbbbb }
td,th { padding: 4px 8px; border-collapse: collapse; border: 1px solid #bbbbbb }
html,body { font-size: 15px }
body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, "Microsoft YaHei UI", SimSun, SimHei, arial, sans-serif; line-height: 1.6; color: ; background-color: ; margin: 0; padding: 1.33rem 1rem }
img { max-width: 100% }
html { height: 100% }
body { min-height: 100% }
.wiz-img-resize-handle { position: absolute; z-index: 1000; border: 1px solid black; background-color: white }
.wiz-img-resize-handle { width: 5px; height: 5px }
.wiz-img-resize-handle.lt { cursor: nw-resize }
.wiz-img-resize-handle.tm { cursor: n-resize }
.wiz-img-resize-handle.rt { cursor: ne-resize }
.wiz-img-resize-handle.lm { cursor: w-resize }
.wiz-img-resize-handle.rm { cursor: e-resize }
.wiz-img-resize-handle.lb { cursor: sw-resize }
.wiz-img-resize-handle.bm { cursor: s-resize }
.wiz-img-resize-handle.rb { cursor: se-resize }
.wiz-table-body.wiz-table-moving *,.wiz-table-body.wiz-table-moving *::before,.wiz-table-body.wiz-table-moving *::after { cursor: default !important }
td,th { position: relative }
#wiz-table-range-border { display: none; width: 0; height: 0; position: absolute; top: 0; left: 0; z-index: 105 }
#wiz-table-col-line,#wiz-table-row-line { display: none; background-color: #448aff; position: absolute; z-index: 120 }
#wiz-table-col-line { width: 1px; cursor: col-resize }
#wiz-table-row-line { height: 1px; cursor: row-resize }
#wiz-table-range-border_start,#wiz-table-range-border_range { display: none; width: 0; height: 0; position: absolute }
#wiz-table-range-border_start_top,#wiz-table-range-border_range_top { height: 2px; background-color: #448aff; position: absolute; top: 0; left: 0 }
#wiz-table-range-border_range_top { height: 1px }
#wiz-table-range-border_start_right,#wiz-table-range-border_range_right { width: 2px; background-color: #448aff; position: absolute; top: 0 }
#wiz-table-range-border_range_right { width: 1px }
#wiz-table-range-border_start_bottom,#wiz-table-range-border_range_bottom { height: 2px; background-color: #448aff; position: absolute; top: 0 }
#wiz-table-range-border_range_bottom { height: 1px }
#wiz-table-range-border_start_left,#wiz-table-range-border_range_left { width: 2px; background-color: #448aff; position: absolute; top: 0; left: 0 }
#wiz-table-range-border_range_left { width: 1px }
#wiz-table-range-border_start_dot,#wiz-table-range-border_range_dot { width: 5px; height: 5px; border: 2px solid rgb(255, 255, 255); background-color: #448aff; cursor: crosshair; position: absolute; z-index: 110 }
.wiz-table-tools { display: block; background-color: #fff; position: absolute; left: 0px; border: 1px solid #ddd; z-index: 130 }
.wiz-table-tools ul { list-style: none; padding: 0 }
.wiz-table-tools .wiz-table-menu-item { position: relative; float: left; margin: 5px 2px 5px 8px }
.wiz-table-tools .wiz-table-menu-item .wiz-table-menu-button { font-size: 15px; width: 20px; height: 20px; line-height: 20px; cursor: pointer; position: relative }
.wiz-table-tools i.editor-icon { font-size: 15px; color: #455a64 }
.wiz-table-tools .wiz-table-menu-item .wiz-table-menu-button i#wiz-menu-bg-demo { position: absolute; top: 1px; left: 0 }
.wiz-table-tools .wiz-table-menu-sub { position: absolute; display: none; width: 125px; padding: 5px 0; background: #fff; border: 1px solid #E0E0E0; top: 28px; left: -9px }
.wiz-table-tools .wiz-table-menu-sub>div { font-size: 15px }
.wiz-table-tools .wiz-table-menu-item.active .wiz-table-menu-sub { display: block }
.wiz-table-tools .wiz-table-menu-sub::before,.wiz-table-tools .wiz-table-menu-sub::after { position: absolute; content: " "; border-style: solid; border-color: transparent; border-bottom-color: #cccccc; left: 22px; margin-left: -14px; top: -8px; border-width: 0 8px 8px 8px; z-index: 10 }
.wiz-table-tools .wiz-table-menu-sub::after { border-bottom-color: #ffffff; top: -7px }
.wiz-table-tools .wiz-table-menu-sub-item { padding: 4px 12px; font-size: 14px }
.wiz-table-tools .wiz-table-menu-sub-item.split { border-top: 1px solid #E0E0E0 }
.wiz-table-tools .wiz-table-menu-sub-item:hover { background-color: #ececec }
.wiz-table-tools .wiz-table-menu-sub-item.disabled { color: #bbbbbb; cursor: default }
.wiz-table-tools .wiz-table-menu-sub-item.disabled:hover { background-color: transparent }
.wiz-table-tools .wiz-table-menu-item.wiz-table-cell-bg:hover .wiz-table-color-pad { display: block }
.wiz-table-tools .wiz-table-color-pad { display: none; padding: 10px; width: 85px; height: 88px; background-color: #fff; cursor: default }
.wiz-table-tools .wiz-table-color-pad>div { font-size: 15px }
.wiz-table-tools .wiz-table-color-pad .wiz-table-color-pad-item { display: inline-block; width: 15px; height: 15px; margin-right: 9px; position: relative }
.wiz-table-tools .wiz-table-color-pad .wiz-table-color-pad-item i.pad-demo { position: absolute; top: 3px; left: 0 }
.wiz-table-tools .wiz-table-color-pad .wiz-table-color-pad-item .icon-oblique_line { color: #cc0000 }
.wiz-table-tools .wiz-table-color-pad .wiz-table-color-pad-item:last-child { margin-right: 0 }
.wiz-table-tools .wiz-table-color-pad .wiz-table-color-pad-item.active i.editor-icon.icon-box { color: #448aff }
.wiz-table-tools .wiz-table-cell-align { display: none; padding: 10px; width: 85px; height: 65px; background-color: #fff; cursor: default }
.wiz-table-tools .wiz-table-cell-align .wiz-table-cell-align-item { display: inline-block; width: 15px; height: 15px; margin-right: 9px; position: relative }
.wiz-table-tools .wiz-table-cell-align .wiz-table-cell-align-item:last-child { margin-right: 0 }
.wiz-table-tools .wiz-table-cell-align .wiz-table-cell-align-item i.valign { position: absolute; top: 3px; left: 0; color: #d2d2d2 }
.wiz-table-tools .wiz-table-cell-align-item.active i.editor-icon.valign { color: #a1c4ff }
.wiz-table-tools .wiz-table-cell-align-item.active i.editor-icon.icon-box,.wiz-table-tools .wiz-table-cell-align-item.active i.editor-icon.align { color: #448aff }
.wiz-table-tools .wiz-table-color-pad .wiz-table-color-pad-item:last-child,.wiz-table-tools .wiz-table-cell-align .wiz-table-cell-align-item:last-child { margin-right: 0 }
th.wiz-selected-cell-multi,td.wiz-selected-cell-multi { background: rgba(0,102,255,.05) }
th::before,td::before,#wiz-table-col-line::before,#wiz-table-range-border_start_right::before,#wiz-table-range-border_range_right::before { content: " "; position: absolute; top: 0; bottom: 0; right: -5px; width: 9px; cursor: col-resize; background: transparent; z-index: 100 }
th::after,td::after,#wiz-table-row-line::before,#wiz-table-range-border_start_bottom::before,#wiz-table-range-border_range_bottom::before { content: " "; position: absolute; left: 0; right: 0; bottom: -5px; height: 9px; cursor: row-resize; background: transparent; z-index: 100 }
.wiz-table-container { }
.wiz-table-body { position: relative; padding: 0 0 10px }
.wiz-table-body table { margin: 0; outline: none }
td,th { height: 28px; outline: none }
body pre.prettyprint { padding: 0 }
body pre.prettyprint.linenums { overflow: auto }
body pre.prettyprint.linenums ol.linenums { padding: 10px 10px 10px 40px !important }

一.准备要使用的的jar包,我使用了以下jar包,关于json的jar包是方便存储和转换redis用到的值;

redis在Java web项目的简单应用(转载)

二.编写加载redis是要用到的实例类

[java] view plain copy
 

print?

  1. package com.redis;
  2. import redis.clients.jedis.ShardedJedis;
  3. /**
  4. * @Title: RedisDataSource.java
  5. * @copyright
  6. * @Package com.cy.redis
  7. * @Description: 该接口用于获取redis客户端实例,通过该实例操作redis数据源
  8. * @author
  9. * @date 2016-10-21 下午04:22:41
  10. */
  11. public interface RedisDataSource {
  12. public abstract ShardedJedis getRedisClient();
  13. public void returnResource(ShardedJedis shardedJedis);
  14. public void returnResource(ShardedJedis shardedJedis,boolean broken);
  15. }
[java] view plain copy
 

print?

  1. package com.redis;
  2. import org.slf4j.LoggerFactory;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import redis.clients.jedis.ShardedJedis;
  5. import redis.clients.jedis.ShardedJedisPool;
  6. /**
  7. * @Title: RedisDataSourceImpl.java
  8. * @copyright
  9. * @Package com.cy.redis
  10. * @Description: 获取redis客户端实例,通过该实例操作redis数据源
  11. * @author
  12. * @date 2016-10-21 下午04:22:54
  13. */
  14. public class RedisDataSourceImpl implements RedisDataSource{
  15. private static final org.slf4j.Logger log = LoggerFactory.getLogger(RedisDataSourceImpl.class);
  16. @Autowired
  17. private ShardedJedisPool shardedJedisPool;
  18. public ShardedJedisPool getShardedJedisPool() {
  19. return shardedJedisPool;
  20. }
  21. public void setShardedJedisPool(ShardedJedisPool shardedJedisPool) {
  22. this.shardedJedisPool = shardedJedisPool;
  23. }
  24. /**
  25. * 获取redis客户端
  26. */
  27. public ShardedJedis getRedisClient() {
  28. try {
  29. ShardedJedis shardedJedis=shardedJedisPool.getResource();
  30. return shardedJedis;
  31. } catch (Exception e) {
  32. log.error("getRedisClient ,error",e);
  33. e.printStackTrace();
  34. }
  35. return null;
  36. }
  37. /**
  38. * 将资源返还给pool
  39. */
  40. @SuppressWarnings("deprecation")
  41. public void returnResource(ShardedJedis shardedJedis) {
  42. shardedJedisPool.returnResource(shardedJedis);
  43. }
  44. /**
  45. * 出现异常后返回资源给pool
  46. */
  47. @SuppressWarnings("deprecation")
  48. public void returnResource(ShardedJedis shardedJedis, boolean broken) {
  49. if(broken){
  50. shardedJedisPool.returnBrokenResource(shardedJedis);
  51. }else{
  52. shardedJedisPool.returnResource(shardedJedis);
  53. }
  54. }
  55. }
[java] view plain copy
 

print?

  1. package com.redis;
  2. import org.slf4j.LoggerFactory;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import redis.clients.jedis.Jedis;
  5. import redis.clients.jedis.JedisShardInfo;
  6. import redis.clients.jedis.ShardedJedis;
  7. /**
  8. * @Title: RedisClientTemplate.java
  9. * @copyright
  10. * @Package com.cy.redis
  11. * @Description: 用于操作redis取值、存值操作的工具类
  12. * @author
  13. * @date 2016-10-21 下午04:21:59
  14. */
  15. public class RedisClientTemplate {
  16. private static final org.slf4j.Logger log=LoggerFactory.getLogger(RedisClientTemplate.class);
  17. @Autowired
  18. private RedisDataSource redisDataSource;
  19. public RedisDataSource getRedisDataSource() {
  20. return redisDataSource;
  21. }
  22. public void setRedisDataSource(RedisDataSource redisDataSource) {
  23. this.redisDataSource = redisDataSource;
  24. }
  25. public void disconnect(){
  26. ShardedJedis shardedJedis=redisDataSource.getRedisClient();
  27. shardedJedis.disconnect();
  28. }
  29. /**
  30. * @Description: 在redis里设置单个值
  31. * @author Mr.chen
  32. * @date 2016-10-21 下午04:37:06
  33. */
  34. public String set(String key, String value){
  35. String result=null;
  36. ShardedJedis shardedJedis=redisDataSource.getRedisClient();
  37. if(shardedJedis==null){
  38. return result;
  39. }
  40. boolean broken=false;
  41. try {
  42. result=shardedJedis.set(key, value);
  43. } catch (Exception e) {
  44. broken=true;
  45. e.printStackTrace();
  46. }finally{
  47. redisDataSource.returnResource(shardedJedis, broken);
  48. }
  49. return result;
  50. }
  51. /**
  52. * @Description: 获取redis单个值
  53. * @author Mr.chen
  54. * @date 2016-10-21 下午04:40:57
  55. */
  56. public String get(String key) {
  57. String result = null;
  58. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  59. if (shardedJedis == null) {
  60. return result;
  61. }
  62. boolean broken = false;
  63. try {
  64. result = shardedJedis.get(key);
  65. } catch (Exception e) {
  66. log.error(e.getMessage(), e);
  67. broken = true;
  68. } finally {
  69. redisDataSource.returnResource(shardedJedis, broken);
  70. }
  71. return result;
  72. }
  73. /**
  74. * @Description: 判断redis是否存在key
  75. * @author Mr.chen
  76. * @date 2016-10-21 下午04:41:39
  77. */
  78. public Boolean exists(String key) {
  79. Boolean result = false;
  80. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  81. if (shardedJedis == null) {
  82. return result;
  83. }
  84. boolean broken = false;
  85. try {
  86. result = shardedJedis.exists(key);
  87. } catch (Exception e) {
  88. log.error(e.getMessage(), e);
  89. broken = true;
  90. } finally {
  91. redisDataSource.returnResource(shardedJedis, broken);
  92. }
  93. return result;
  94. }
  95. /**
  96. * @Description: 获取key返回存储值的类型
  97. * @author Mr.chen
  98. * @date 2016-10-21 下午04:42:08
  99. */
  100. public String type(String key) {
  101. String result = null;
  102. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  103. if (shardedJedis == null) {
  104. return result;
  105. }
  106. boolean broken = false;
  107. try {
  108. result = shardedJedis.type(key);
  109. } catch (Exception e) {
  110. log.error(e.getMessage(), e);
  111. broken = true;
  112. } finally {
  113. redisDataSource.returnResource(shardedJedis, broken);
  114. }
  115. return result;
  116. }
  117. /**
  118. * @Description: 在某段时间后实现
  119. * @author Mr.chen
  120. * @date 2016-10-21 下午04:43:25
  121. */
  122. public Long expire(String key, int seconds) {
  123. Long result = null;
  124. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  125. if (shardedJedis == null) {
  126. return result;
  127. }
  128. boolean broken = false;
  129. try {
  130. result = shardedJedis.expire(key, seconds);
  131. } catch (Exception e) {
  132. log.error(e.getMessage(), e);
  133. broken = true;
  134. } finally {
  135. redisDataSource.returnResource(shardedJedis, broken);
  136. }
  137. return result;
  138. }
  139. /**
  140. * @Description: 在某个时间点失效
  141. * @author Mr.chen
  142. * @date 2016-10-21 下午04:43:40
  143. */
  144. public Long expireAt(String key, long unixTime) {
  145. Long result = null;
  146. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  147. if (shardedJedis == null) {
  148. return result;
  149. }
  150. boolean broken = false;
  151. try {
  152. result = shardedJedis.expireAt(key, unixTime);
  153. } catch (Exception e) {
  154. log.error(e.getMessage(), e);
  155. broken = true;
  156. } finally {
  157. redisDataSource.returnResource(shardedJedis, broken);
  158. }
  159. return result;
  160. }
  161. /**
  162. * @Description: 以秒为单位,返回给定 key 的剩余生存时间
  163. * @author Mr.chen
  164. * @date 2016-10-21 下午04:44:00
  165. */
  166. public Long ttl(String key) {
  167. Long result = null;
  168. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  169. if (shardedJedis == null) {
  170. return result;
  171. }
  172. boolean broken = false;
  173. try {
  174. result = shardedJedis.ttl(key);
  175. } catch (Exception e) {
  176. log.error(e.getMessage(), e);
  177. broken = true;
  178. } finally {
  179. redisDataSource.returnResource(shardedJedis, broken);
  180. }
  181. return result;
  182. }
  183. /**
  184. * @Description: 将 key 的值设为 value ,当且仅当 key 不存在
  185. * @author Mr.chen
  186. * @date 2016-10-21 下午04:44:17
  187. */
  188. public Long setnx(String key, String value) {
  189. Long result = null;
  190. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  191. if (shardedJedis == null) {
  192. return result;
  193. }
  194. boolean broken = false;
  195. try {
  196. result = shardedJedis.setnx(key, value);
  197. } catch (Exception e) {
  198. log.error(e.getMessage(), e);
  199. broken = true;
  200. } finally {
  201. redisDataSource.returnResource(shardedJedis, broken);
  202. }
  203. return result;
  204. }
  205. /**
  206. * 将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)
  207. * @param key
  208. * @param seconds
  209. * @param value
  210. * @return
  211. */
  212. public String setex(String key, int seconds, String value) {
  213. String result = null;
  214. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  215. if (shardedJedis == null) {
  216. return result;
  217. }
  218. boolean broken = false;
  219. try {
  220. result = shardedJedis.setex(key, seconds, value);
  221. } catch (Exception e) {
  222. log.error(e.getMessage(), e);
  223. broken = true;
  224. } finally {
  225. redisDataSource.returnResource(shardedJedis, broken);
  226. }
  227. return result;
  228. }
  229. /**
  230. * 将 key 所储存的值减去减量 integer
  231. * @param key
  232. * @param integer
  233. * @return
  234. */
  235. public Long decrBy(String key, long integer) {
  236. Long result = null;
  237. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  238. if (shardedJedis == null) {
  239. return result;
  240. }
  241. boolean broken = false;
  242. try {
  243. result = shardedJedis.decrBy(key, integer);
  244. } catch (Exception e) {
  245. log.error(e.getMessage(), e);
  246. broken = true;
  247. } finally {
  248. redisDataSource.returnResource(shardedJedis, broken);
  249. }
  250. return result;
  251. }
  252. /**
  253. * 将 key 中储存的数字值减一。
  254. * @param key
  255. * @return
  256. */
  257. public Long decr(String key) {
  258. Long result = null;
  259. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  260. if (shardedJedis == null) {
  261. return result;
  262. }
  263. boolean broken = false;
  264. try {
  265. result = shardedJedis.decr(key);
  266. } catch (Exception e) {
  267. log.error(e.getMessage(), e);
  268. broken = true;
  269. } finally {
  270. redisDataSource.returnResource(shardedJedis, broken);
  271. }
  272. return result;
  273. }
  274. /**
  275. * 将 key 所储存的值加上增量 integer
  276. * @param key
  277. * @param integer
  278. * @return
  279. */
  280. public Long incrBy(String key, long integer) {
  281. Long result = null;
  282. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  283. if (shardedJedis == null) {
  284. return result;
  285. }
  286. boolean broken = false;
  287. try {
  288. result = shardedJedis.incrBy(key, integer);
  289. } catch (Exception e) {
  290. log.error(e.getMessage(), e);
  291. broken = true;
  292. } finally {
  293. redisDataSource.returnResource(shardedJedis, broken);
  294. }
  295. return result;
  296. }
  297. /**
  298. * 将 key 中储存的数字值增一
  299. * @param key
  300. * @return
  301. */
  302. public Long incr(String key) {
  303. Long result = null;
  304. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  305. if (shardedJedis == null) {
  306. return result;
  307. }
  308. boolean broken = false;
  309. try {
  310. result = shardedJedis.incr(key);
  311. } catch (Exception e) {
  312. log.error(e.getMessage(), e);
  313. broken = true;
  314. } finally {
  315. redisDataSource.returnResource(shardedJedis, broken);
  316. }
  317. return result;
  318. }
  319. /**
  320. * 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
  321. * 如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
  322. * @param key
  323. * @param value
  324. * @return
  325. */
  326. public Long append(String key, String value) {
  327. Long result = null;
  328. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  329. if (shardedJedis == null) {
  330. return result;
  331. }
  332. boolean broken = false;
  333. try {
  334. result = shardedJedis.append(key, value);
  335. } catch (Exception e) {
  336. log.error(e.getMessage(), e);
  337. broken = true;
  338. } finally {
  339. redisDataSource.returnResource(shardedJedis, broken);
  340. }
  341. return result;
  342. }
  343. /**
  344. * 返回名称为key的string的value的子串
  345. * @param key
  346. * @param start
  347. * @param end
  348. * @return
  349. */
  350. public String substr(String key, int start, int end) {
  351. String result = null;
  352. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  353. if (shardedJedis == null) {
  354. return result;
  355. }
  356. boolean broken = false;
  357. try {
  358. result = shardedJedis.substr(key, start, end);
  359. } catch (Exception e) {
  360. log.error(e.getMessage(), e);
  361. broken = true;
  362. } finally {
  363. redisDataSource.returnResource(shardedJedis, broken);
  364. }
  365. return result;
  366. }
  367. /**
  368. * 将哈希表 key 中的域 field 的值设为 value
  369. * @param key
  370. * @param field
  371. * @param value
  372. * @return
  373. */
  374. public Long hset(String key, String field, String value) {
  375. Long result = null;
  376. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  377. if (shardedJedis == null) {
  378. return result;
  379. }
  380. boolean broken = false;
  381. try {
  382. result = shardedJedis.hset(key, field, value);
  383. } catch (Exception e) {
  384. log.error(e.getMessage(), e);
  385. broken = true;
  386. } finally {
  387. redisDataSource.returnResource(shardedJedis, broken);
  388. }
  389. return result;
  390. }
  391. /**
  392. * 返回哈希表 key 中给定域 field 的值
  393. * @param key
  394. * @param field
  395. * @return
  396. */
  397. public String hget(String key, String field) {
  398. String result = null;
  399. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  400. if (shardedJedis == null) {
  401. return result;
  402. }
  403. boolean broken = false;
  404. try {
  405. result = shardedJedis.hget(key, field);
  406. } catch (Exception e) {
  407. log.error(e.getMessage(), e);
  408. broken = true;
  409. } finally {
  410. redisDataSource.returnResource(shardedJedis, broken);
  411. }
  412. return result;
  413. }
  414. /**
  415. * 同时将多个 field-value (域-值)对设置到哈希表 key 中。
  416. * @param key
  417. * @param hash
  418. * @return
  419. */
  420. public String hmset(String key, Map<String, String> hash) {
  421. String result = null;
  422. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  423. if (shardedJedis == null) {
  424. return result;
  425. }
  426. boolean broken = false;
  427. try {
  428. result = shardedJedis.hmset(key, hash);
  429. } catch (Exception e) {
  430. log.error(e.getMessage(), e);
  431. broken = true;
  432. } finally {
  433. redisDataSource.returnResource(shardedJedis, broken);
  434. }
  435. return result;
  436. }
  437. /**
  438. * 返回哈希表 key 中,一个或多个给定域的值
  439. * @param key
  440. * @param fields
  441. * @return
  442. */
  443. public List<String> hmget(String key, String... fields) {
  444. List<String> result = null;
  445. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  446. if (shardedJedis == null) {
  447. return result;
  448. }
  449. boolean broken = false;
  450. try {
  451. result = shardedJedis.hmget(key, fields);
  452. } catch (Exception e) {
  453. log.error(e.getMessage(), e);
  454. broken = true;
  455. } finally {
  456. redisDataSource.returnResource(shardedJedis, broken);
  457. }
  458. return result;
  459. }
  460. /**
  461. * 为哈希表 key 中的域 field 的值加上增量 value
  462. * @param key
  463. * @param field
  464. * @param value
  465. * @return
  466. */
  467. public Long hincrBy(String key, String field, long value) {
  468. Long result = null;
  469. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  470. if (shardedJedis == null) {
  471. return result;
  472. }
  473. boolean broken = false;
  474. try {
  475. result = shardedJedis.hincrBy(key, field, value);
  476. } catch (Exception e) {
  477. log.error(e.getMessage(), e);
  478. broken = true;
  479. } finally {
  480. redisDataSource.returnResource(shardedJedis, broken);
  481. }
  482. return result;
  483. }
  484. /**
  485. * 查看哈希表 key 中,给定域 field 是否存在。
  486. * @param key
  487. * @param field
  488. * @return
  489. */
  490. public Boolean hexists(String key, String field) {
  491. Boolean result = false;
  492. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  493. if (shardedJedis == null) {
  494. return result;
  495. }
  496. boolean broken = false;
  497. try {
  498. result = shardedJedis.hexists(key, field);
  499. } catch (Exception e) {
  500. log.error(e.getMessage(), e);
  501. broken = true;
  502. } finally {
  503. redisDataSource.returnResource(shardedJedis, broken);
  504. }
  505. return result;
  506. }
  507. /**
  508. * 删除key
  509. * @param key
  510. * @return
  511. */
  512. public Long del(String key) {
  513. Long result = null;
  514. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  515. if (shardedJedis == null) {
  516. return result;
  517. }
  518. boolean broken = false;
  519. try {
  520. result = shardedJedis.del(key);
  521. } catch (Exception e) {
  522. log.error(e.getMessage(), e);
  523. broken = true;
  524. } finally {
  525. redisDataSource.returnResource(shardedJedis, broken);
  526. }
  527. return result;
  528. }
  529. /**
  530. * 删除哈希表 key 中的一个或多个指定域。
  531. * @param key
  532. * @param field
  533. * @return
  534. */
  535. public Long hdel(String key, String field) {
  536. Long result = null;
  537. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  538. if (shardedJedis == null) {
  539. return result;
  540. }
  541. boolean broken = false;
  542. try {
  543. result = shardedJedis.hdel(key, field);
  544. } catch (Exception e) {
  545. log.error(e.getMessage(), e);
  546. broken = true;
  547. } finally {
  548. redisDataSource.returnResource(shardedJedis, broken);
  549. }
  550. return result;
  551. }
  552. /**
  553. * 返回哈希表 key 中域的数量。
  554. * @param key
  555. * @return
  556. */
  557. public Long hlen(String key) {
  558. Long result = null;
  559. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  560. if (shardedJedis == null) {
  561. return result;
  562. }
  563. boolean broken = false;
  564. try {
  565. result = shardedJedis.hlen(key);
  566. } catch (Exception e) {
  567. log.error(e.getMessage(), e);
  568. broken = true;
  569. } finally {
  570. redisDataSource.returnResource(shardedJedis, broken);
  571. }
  572. return result;
  573. }
  574. /**
  575. * 返回哈希表 key 中的所有域。
  576. * @param key
  577. * @return
  578. */
  579. public Set<String> hkeys(String key) {
  580. Set<String> result = null;
  581. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  582. if (shardedJedis == null) {
  583. return result;
  584. }
  585. boolean broken = false;
  586. try {
  587. result = shardedJedis.hkeys(key);
  588. } catch (Exception e) {
  589. log.error(e.getMessage(), e);
  590. broken = true;
  591. } finally {
  592. redisDataSource.returnResource(shardedJedis, broken);
  593. }
  594. return result;
  595. }
  596. /**
  597. * 返回哈希表 key 中所有域的值。
  598. * @param key
  599. * @return
  600. */
  601. public List<String> hvals(String key) {
  602. List<String> result = null;
  603. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  604. if (shardedJedis == null) {
  605. return result;
  606. }
  607. boolean broken = false;
  608. try {
  609. result = shardedJedis.hvals(key);
  610. } catch (Exception e) {
  611. log.error(e.getMessage(), e);
  612. broken = true;
  613. } finally {
  614. redisDataSource.returnResource(shardedJedis, broken);
  615. }
  616. return result;
  617. }
  618. /**
  619. * 返回哈希表 key 中,所有的域和值。
  620. * @param key
  621. * @return
  622. */
  623. public Map<String, String> hgetAll(String key) {
  624. Map<String, String> result = null;
  625. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  626. if (shardedJedis == null) {
  627. return result;
  628. }
  629. boolean broken = false;
  630. try {
  631. result = shardedJedis.hgetAll(key);
  632. } catch (Exception e) {
  633. log.error(e.getMessage(), e);
  634. broken = true;
  635. } finally {
  636. redisDataSource.returnResource(shardedJedis, broken);
  637. }
  638. return result;
  639. }
  640. // ================list ====== l表示 list或 left, r表示right====================
  641. /**
  642. * 将一个或多个值 value 插入到列表 key 的表尾(最右边)
  643. * @param key
  644. * @param string
  645. * @return
  646. */
  647. public Long rpush(String key, String string) {
  648. Long result = null;
  649. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  650. if (shardedJedis == null) {
  651. return result;
  652. }
  653. boolean broken = false;
  654. try {
  655. result = shardedJedis.rpush(key, string);
  656. } catch (Exception e) {
  657. log.error(e.getMessage(), e);
  658. broken = true;
  659. } finally {
  660. redisDataSource.returnResource(shardedJedis, broken);
  661. }
  662. return result;
  663. }
  664. /**
  665. * 将一个或多个值 value 插入到列表 key 的表头
  666. * @param key
  667. * @param string
  668. * @return
  669. */
  670. public Long lpush(String key, String string) {
  671. Long result = null;
  672. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  673. if (shardedJedis == null) {
  674. return result;
  675. }
  676. boolean broken = false;
  677. try {
  678. result = shardedJedis.lpush(key, string);
  679. } catch (Exception e) {
  680. log.error(e.getMessage(), e);
  681. broken = true;
  682. } finally {
  683. redisDataSource.returnResource(shardedJedis, broken);
  684. }
  685. return result;
  686. }
  687. /**
  688. * 返回列表 key 的长度。
  689. * @param key
  690. * @return
  691. */
  692. public Long llen(String key) {
  693. Long result = null;
  694. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  695. if (shardedJedis == null) {
  696. return result;
  697. }
  698. boolean broken = false;
  699. try {
  700. result = shardedJedis.llen(key);
  701. } catch (Exception e) {
  702. log.error(e.getMessage(), e);
  703. broken = true;
  704. } finally {
  705. redisDataSource.returnResource(shardedJedis, broken);
  706. }
  707. return result;
  708. }
  709. /**
  710. * 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定
  711. * @param key
  712. * @param start
  713. * @param end
  714. * @return
  715. */
  716. public List<String> lrange(String key, long start, long end) {
  717. List<String> result = null;
  718. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  719. if (shardedJedis == null) {
  720. return result;
  721. }
  722. boolean broken = false;
  723. try {
  724. result = shardedJedis.lrange(key, start, end);
  725. } catch (Exception e) {
  726. log.error(e.getMessage(), e);
  727. broken = true;
  728. } finally {
  729. redisDataSource.returnResource(shardedJedis, broken);
  730. }
  731. return result;
  732. }
  733. /**
  734. * 只保留指定区间内的元素,不在指定区间之内的元素都将被删除
  735. * @param key
  736. * @param start
  737. * @param end
  738. * @return
  739. */
  740. public String ltrim(String key, long start, long end) {
  741. String result = null;
  742. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  743. if (shardedJedis == null) {
  744. return result;
  745. }
  746. boolean broken = false;
  747. try {
  748. result = shardedJedis.ltrim(key, start, end);
  749. } catch (Exception e) {
  750. log.error(e.getMessage(), e);
  751. broken = true;
  752. } finally {
  753. redisDataSource.returnResource(shardedJedis, broken);
  754. }
  755. return result;
  756. }
  757. /**
  758. * 返回列表 key 中,下标为 index 的元素。
  759. * @param key
  760. * @param index
  761. * @return
  762. */
  763. public String lindex(String key, long index) {
  764. String result = null;
  765. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  766. if (shardedJedis == null) {
  767. return result;
  768. }
  769. boolean broken = false;
  770. try {
  771. result = shardedJedis.lindex(key, index);
  772. } catch (Exception e) {
  773. log.error(e.getMessage(), e);
  774. broken = true;
  775. } finally {
  776. redisDataSource.returnResource(shardedJedis, broken);
  777. }
  778. return result;
  779. }
  780. /**
  781. * 将列表 key 下标为 index 的元素的值设置为 value
  782. * @param key
  783. * @param index
  784. * @param value
  785. * @return
  786. */
  787. public String lset(String key, long index, String value) {
  788. String result = null;
  789. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  790. if (shardedJedis == null) {
  791. return result;
  792. }
  793. boolean broken = false;
  794. try {
  795. result = shardedJedis.lset(key, index, value);
  796. } catch (Exception e) {
  797. log.error(e.getMessage(), e);
  798. broken = true;
  799. } finally {
  800. redisDataSource.returnResource(shardedJedis, broken);
  801. }
  802. return result;
  803. }
  804. /**
  805. * 移除并返回列表 key 的头元素
  806. * @param key
  807. * @return
  808. */
  809. public String lpop(String key) {
  810. String result = null;
  811. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  812. if (shardedJedis == null) {
  813. return result;
  814. }
  815. boolean broken = false;
  816. try {
  817. result = shardedJedis.lpop(key);
  818. } catch (Exception e) {
  819. log.error(e.getMessage(), e);
  820. broken = true;
  821. } finally {
  822. redisDataSource.returnResource(shardedJedis, broken);
  823. }
  824. return result;
  825. }
  826. /**
  827. * 移除并返回列表 key 的尾元素。
  828. * @param key
  829. * @return
  830. */
  831. public String rpop(String key) {
  832. String result = null;
  833. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  834. if (shardedJedis == null) {
  835. return result;
  836. }
  837. boolean broken = false;
  838. try {
  839. result = shardedJedis.rpop(key);
  840. } catch (Exception e) {
  841. log.error(e.getMessage(), e);
  842. broken = true;
  843. } finally {
  844. redisDataSource.returnResource(shardedJedis, broken);
  845. }
  846. return result;
  847. }
  848. //return 1 add a not exist value ,
  849. //return 0 add a exist value
  850. /**
  851. * 将一个或多个 member 元素加入到集合 key 当中
  852. * @param key
  853. * @param member
  854. * @return
  855. */
  856. public Long sadd(String key, String member) {
  857. Long result = null;
  858. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  859. if (shardedJedis == null) {
  860. return result;
  861. }
  862. boolean broken = false;
  863. try {
  864. result = shardedJedis.sadd(key, member);
  865. } catch (Exception e) {
  866. log.error(e.getMessage(), e);
  867. broken = true;
  868. } finally {
  869. redisDataSource.returnResource(shardedJedis, broken);
  870. }
  871. return result;
  872. }
  873. /**
  874. * 返回集合 key 中的所有成员。
  875. * @param key
  876. * @return
  877. */
  878. public Set<String> smembers(String key) {
  879. Set<String> result = null;
  880. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  881. if (shardedJedis == null) {
  882. return result;
  883. }
  884. boolean broken = false;
  885. try {
  886. result = shardedJedis.smembers(key);
  887. } catch (Exception e) {
  888. log.error(e.getMessage(), e);
  889. broken = true;
  890. } finally {
  891. redisDataSource.returnResource(shardedJedis, broken);
  892. }
  893. return result;
  894. }
  895. /**
  896. * 返回集合 key 的基数(集合中元素的数量)
  897. * @param key
  898. * @return
  899. */
  900. public Long scard(String key) {
  901. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  902. Long result = null;
  903. if (shardedJedis == null) {
  904. return result;
  905. }
  906. boolean broken = false;
  907. try {
  908. result = shardedJedis.scard(key);
  909. } catch (Exception e) {
  910. log.error(e.getMessage(), e);
  911. broken = true;
  912. } finally {
  913. redisDataSource.returnResource(shardedJedis, broken);
  914. }
  915. return result;
  916. }
  917. /**
  918. * 将一个或多个 member 元素及其 score 值加入到有序集 key 当中
  919. * @param key
  920. * @param score
  921. * @param member
  922. * @return
  923. */
  924. public Long zadd(String key, double score, String member) {
  925. Long result = null;
  926. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  927. if (shardedJedis == null) {
  928. return result;
  929. }
  930. boolean broken = false;
  931. try {
  932. result = shardedJedis.zadd(key, score, member);
  933. } catch (Exception e) {
  934. log.error(e.getMessage(), e);
  935. broken = true;
  936. } finally {
  937. redisDataSource.returnResource(shardedJedis, broken);
  938. }
  939. return result;
  940. }
  941. /**
  942. * 返回有序集 key 中,指定区间内的成员
  943. * @param key
  944. * @param start
  945. * @param end
  946. * @return
  947. */
  948. public Set<String> zrange(String key, int start, int end) {
  949. Set<String> result = null;
  950. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  951. if (shardedJedis == null) {
  952. return result;
  953. }
  954. boolean broken = false;
  955. try {
  956. result = shardedJedis.zrange(key, start, end);
  957. } catch (Exception e) {
  958. log.error(e.getMessage(), e);
  959. broken = true;
  960. } finally {
  961. redisDataSource.returnResource(shardedJedis, broken);
  962. }
  963. return result;
  964. }
  965. /**
  966. * 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略
  967. * @param key
  968. * @param member
  969. * @return
  970. */
  971. public Long zrem(String key, String member) {
  972. Long result = null;
  973. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  974. if (shardedJedis == null) {
  975. return result;
  976. }
  977. boolean broken = false;
  978. try {
  979. result = shardedJedis.zrem(key, member);
  980. } catch (Exception e) {
  981. log.error(e.getMessage(), e);
  982. broken = true;
  983. } finally {
  984. redisDataSource.returnResource(shardedJedis, broken);
  985. }
  986. return result;
  987. }
  988. /**
  989. * 为有序集 key 的成员 member 的 score 值加上增量 member 。
  990. * @param key
  991. * @param score
  992. * @param member
  993. * @return
  994. */
  995. public Double zincrby(String key, double score, String member) {
  996. Double result = null;
  997. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  998. if (shardedJedis == null) {
  999. return result;
  1000. }
  1001. boolean broken = false;
  1002. try {
  1003. result = shardedJedis.zincrby(key, score, member);
  1004. } catch (Exception e) {
  1005. log.error(e.getMessage(), e);
  1006. broken = true;
  1007. } finally {
  1008. redisDataSource.returnResource(shardedJedis, broken);
  1009. }
  1010. return result;
  1011. }
  1012. /**
  1013. * 回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列
  1014. * @param key
  1015. * @param member
  1016. * @return
  1017. */
  1018. public Long zrank(String key, String member) {
  1019. Long result = null;
  1020. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1021. if (shardedJedis == null) {
  1022. return result;
  1023. }
  1024. boolean broken = false;
  1025. try {
  1026. result = shardedJedis.zrank(key, member);
  1027. } catch (Exception e) {
  1028. log.error(e.getMessage(), e);
  1029. broken = true;
  1030. } finally {
  1031. redisDataSource.returnResource(shardedJedis, broken);
  1032. }
  1033. return result;
  1034. }
  1035. /**
  1036. * 返回有序集 key 的基数
  1037. * @param key
  1038. * @return
  1039. */
  1040. public Long zcard(String key) {
  1041. Long result = null;
  1042. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1043. if (shardedJedis == null) {
  1044. return result;
  1045. }
  1046. boolean broken = false;
  1047. try {
  1048. result = shardedJedis.zcard(key);
  1049. } catch (Exception e) {
  1050. log.error(e.getMessage(), e);
  1051. broken = true;
  1052. } finally {
  1053. redisDataSource.returnResource(shardedJedis, broken);
  1054. }
  1055. return result;
  1056. }
  1057. /**
  1058. * 返回有序集 key 中,成员 member 的 score 值。
  1059. * @param key
  1060. * @param member
  1061. * @return
  1062. */
  1063. public Double zscore(String key, String member) {
  1064. Double result = null;
  1065. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1066. if (shardedJedis == null) {
  1067. return result;
  1068. }
  1069. boolean broken = false;
  1070. try {
  1071. result = shardedJedis.zscore(key, member);
  1072. } catch (Exception e) {
  1073. log.error(e.getMessage(), e);
  1074. broken = true;
  1075. } finally {
  1076. redisDataSource.returnResource(shardedJedis, broken);
  1077. }
  1078. return result;
  1079. }
  1080. /**
  1081. * 返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量
  1082. * @param key
  1083. * @param min
  1084. * @param max
  1085. * @return
  1086. */
  1087. public Long zcount(String key, double min, double max) {
  1088. Long result = null;
  1089. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1090. if (shardedJedis == null) {
  1091. return result;
  1092. }
  1093. boolean broken = false;
  1094. try {
  1095. result = shardedJedis.zcount(key, min, max);
  1096. } catch (Exception e) {
  1097. log.error(e.getMessage(), e);
  1098. broken = true;
  1099. } finally {
  1100. redisDataSource.returnResource(shardedJedis, broken);
  1101. }
  1102. return result;
  1103. }
  1104. /**
  1105. * 批量存储
  1106. * @param key
  1107. * @param value
  1108. * @return
  1109. */
  1110. public String set(byte[] key, byte[] value) {
  1111. String result = null;
  1112. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1113. if (shardedJedis == null) {
  1114. return result;
  1115. }
  1116. boolean broken = false;
  1117. try {
  1118. result = shardedJedis.set(key, value);
  1119. } catch (Exception e) {
  1120. log.error(e.getMessage(), e);
  1121. broken = true;
  1122. } finally {
  1123. redisDataSource.returnResource(shardedJedis, broken);
  1124. }
  1125. return result;
  1126. }
  1127. /**
  1128. * 获取多个key的值
  1129. * @param key
  1130. * @return
  1131. */
  1132. public byte[] get(byte[] key) {
  1133. byte[] result = null;
  1134. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1135. if (shardedJedis == null) {
  1136. return result;
  1137. }
  1138. boolean broken = false;
  1139. try {
  1140. result = shardedJedis.get(key);
  1141. } catch (Exception e) {
  1142. log.error(e.getMessage(), e);
  1143. broken = true;
  1144. } finally {
  1145. redisDataSource.returnResource(shardedJedis, broken);
  1146. }
  1147. return result;
  1148. }
  1149. /**
  1150. * 判断多个key存在
  1151. * @param key
  1152. * @return
  1153. */
  1154. public Boolean exists(byte[] key) {
  1155. Boolean result = false;
  1156. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1157. if (shardedJedis == null) {
  1158. return result;
  1159. }
  1160. boolean broken = false;
  1161. try {
  1162. result = shardedJedis.exists(key);
  1163. } catch (Exception e) {
  1164. log.error(e.getMessage(), e);
  1165. broken = true;
  1166. } finally {
  1167. redisDataSource.returnResource(shardedJedis, broken);
  1168. }
  1169. return result;
  1170. }
  1171. public Long expire(byte[] key, int seconds) {
  1172. Long result = null;
  1173. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1174. if (shardedJedis == null) {
  1175. return result;
  1176. }
  1177. boolean broken = false;
  1178. try {
  1179. result = shardedJedis.expire(key, seconds);
  1180. } catch (Exception e) {
  1181. log.error(e.getMessage(), e);
  1182. broken = true;
  1183. } finally {
  1184. redisDataSource.returnResource(shardedJedis, broken);
  1185. }
  1186. return result;
  1187. }
  1188. public Long expireAt(byte[] key, long unixTime) {
  1189. Long result = null;
  1190. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1191. if (shardedJedis == null) {
  1192. return result;
  1193. }
  1194. boolean broken = false;
  1195. try {
  1196. result = shardedJedis.expireAt(key, unixTime);
  1197. } catch (Exception e) {
  1198. log.error(e.getMessage(), e);
  1199. broken = true;
  1200. } finally {
  1201. redisDataSource.returnResource(shardedJedis, broken);
  1202. }
  1203. return result;
  1204. }
  1205. public Long ttl(byte[] key) {
  1206. Long result = null;
  1207. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1208. if (shardedJedis == null) {
  1209. return result;
  1210. }
  1211. boolean broken = false;
  1212. try {
  1213. result = shardedJedis.ttl(key);
  1214. } catch (Exception e) {
  1215. log.error(e.getMessage(), e);
  1216. broken = true;
  1217. } finally {
  1218. redisDataSource.returnResource(shardedJedis, broken);
  1219. }
  1220. return result;
  1221. }
  1222. public Long append(byte[] key, byte[] value) {
  1223. Long result = null;
  1224. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1225. if (shardedJedis == null) {
  1226. return result;
  1227. }
  1228. boolean broken = false;
  1229. try {
  1230. result = shardedJedis.append(key, value);
  1231. } catch (Exception e) {
  1232. log.error(e.getMessage(), e);
  1233. broken = true;
  1234. } finally {
  1235. redisDataSource.returnResource(shardedJedis, broken);
  1236. }
  1237. return result;
  1238. }
  1239. /**
  1240. * 批量增加到hash
  1241. * @param key
  1242. * @param field
  1243. * @param value
  1244. * @return
  1245. */
  1246. public Long hset(byte[] key, byte[] field, byte[] value) {
  1247. Long result = null;
  1248. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1249. if (shardedJedis == null) {
  1250. return result;
  1251. }
  1252. boolean broken = false;
  1253. try {
  1254. result = shardedJedis.hset(key, field, value);
  1255. } catch (Exception e) {
  1256. log.error(e.getMessage(), e);
  1257. broken = true;
  1258. } finally {
  1259. redisDataSource.returnResource(shardedJedis, broken);
  1260. }
  1261. return result;
  1262. }
  1263. /**
  1264. * 批量获取field域值
  1265. * @param key
  1266. * @param field
  1267. * @return
  1268. */
  1269. public byte[] hget(byte[] key, byte[] field) {
  1270. byte[] result = null;
  1271. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1272. if (shardedJedis == null) {
  1273. return result;
  1274. }
  1275. boolean broken = false;
  1276. try {
  1277. result = shardedJedis.hget(key, field);
  1278. } catch (Exception e) {
  1279. log.error(e.getMessage(), e);
  1280. broken = true;
  1281. } finally {
  1282. redisDataSource.returnResource(shardedJedis, broken);
  1283. }
  1284. return result;
  1285. }
  1286. public String hmset(byte[] key, Map<byte[], byte[]> hash) {
  1287. String result = null;
  1288. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1289. if (shardedJedis == null) {
  1290. return result;
  1291. }
  1292. boolean broken = false;
  1293. try {
  1294. result = shardedJedis.hmset(key, hash);
  1295. } catch (Exception e) {
  1296. log.error(e.getMessage(), e);
  1297. broken = true;
  1298. } finally {
  1299. redisDataSource.returnResource(shardedJedis, broken);
  1300. }
  1301. return result;
  1302. }
  1303. public List<byte[]> hmget(byte[] key, byte[]... fields) {
  1304. List<byte[]> result = null;
  1305. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1306. if (shardedJedis == null) {
  1307. return result;
  1308. }
  1309. boolean broken = false;
  1310. try {
  1311. result = shardedJedis.hmget(key, fields);
  1312. } catch (Exception e) {
  1313. log.error(e.getMessage(), e);
  1314. broken = true;
  1315. } finally {
  1316. redisDataSource.returnResource(shardedJedis, broken);
  1317. }
  1318. return result;
  1319. }
  1320. public Boolean hexists(byte[] key, byte[] field) {
  1321. Boolean result = false;
  1322. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1323. if (shardedJedis == null) {
  1324. return result;
  1325. }
  1326. boolean broken = false;
  1327. try {
  1328. result = shardedJedis.hexists(key, field);
  1329. } catch (Exception e) {
  1330. log.error(e.getMessage(), e);
  1331. broken = true;
  1332. } finally {
  1333. redisDataSource.returnResource(shardedJedis, broken);
  1334. }
  1335. return result;
  1336. }
  1337. /**
  1338. * 批量删除hash的key
  1339. * @param key
  1340. * @param field
  1341. * @return
  1342. */
  1343. public Long hdel(byte[] key, byte[] field) {
  1344. Long result = null;
  1345. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1346. if (shardedJedis == null) {
  1347. return result;
  1348. }
  1349. boolean broken = false;
  1350. try {
  1351. result = shardedJedis.hdel(key, field);
  1352. } catch (Exception e) {
  1353. log.error(e.getMessage(), e);
  1354. broken = true;
  1355. } finally {
  1356. redisDataSource.returnResource(shardedJedis, broken);
  1357. }
  1358. return result;
  1359. }
  1360. public Long rpush(byte[] key, byte[] string) {
  1361. Long result = null;
  1362. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1363. if (shardedJedis == null) {
  1364. return result;
  1365. }
  1366. boolean broken = false;
  1367. try {
  1368. result = shardedJedis.rpush(key, string);
  1369. } catch (Exception e) {
  1370. log.error(e.getMessage(), e);
  1371. broken = true;
  1372. } finally {
  1373. redisDataSource.returnResource(shardedJedis, broken);
  1374. }
  1375. return result;
  1376. }
  1377. public Long lpush(byte[] key, byte[] string) {
  1378. Long result = null;
  1379. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1380. if (shardedJedis == null) {
  1381. return result;
  1382. }
  1383. boolean broken = false;
  1384. try {
  1385. result = shardedJedis.lpush(key, string);
  1386. } catch (Exception e) {
  1387. log.error(e.getMessage(), e);
  1388. broken = true;
  1389. } finally {
  1390. redisDataSource.returnResource(shardedJedis, broken);
  1391. }
  1392. return result;
  1393. }
  1394. public Long llen(byte[] key) {
  1395. Long result = null;
  1396. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1397. if (shardedJedis == null) {
  1398. return result;
  1399. }
  1400. boolean broken = false;
  1401. try {
  1402. result = shardedJedis.llen(key);
  1403. } catch (Exception e) {
  1404. log.error(e.getMessage(), e);
  1405. broken = true;
  1406. } finally {
  1407. redisDataSource.returnResource(shardedJedis, broken);
  1408. }
  1409. return result;
  1410. }
  1411. public List<byte[]> lrange(byte[] key, int start, int end) {
  1412. List<byte[]> result = null;
  1413. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1414. if (shardedJedis == null) {
  1415. return result;
  1416. }
  1417. boolean broken = false;
  1418. try {
  1419. result = shardedJedis.lrange(key, start, end);
  1420. } catch (Exception e) {
  1421. log.error(e.getMessage(), e);
  1422. broken = true;
  1423. } finally {
  1424. redisDataSource.returnResource(shardedJedis, broken);
  1425. }
  1426. return result;
  1427. }
  1428. public String lset(byte[] key, int index, byte[] value) {
  1429. String result = null;
  1430. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1431. if (shardedJedis == null) {
  1432. return result;
  1433. }
  1434. boolean broken = false;
  1435. try {
  1436. result = shardedJedis.lset(key, index, value);
  1437. } catch (Exception e) {
  1438. log.error(e.getMessage(), e);
  1439. broken = true;
  1440. } finally {
  1441. redisDataSource.returnResource(shardedJedis, broken);
  1442. }
  1443. return result;
  1444. }
  1445. public Long lrem(byte[] key, int count, byte[] value) {
  1446. Long result = null;
  1447. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1448. if (shardedJedis == null) {
  1449. return result;
  1450. }
  1451. boolean broken = false;
  1452. try {
  1453. result = shardedJedis.lrem(key, count, value);
  1454. } catch (Exception e) {
  1455. log.error(e.getMessage(), e);
  1456. broken = true;
  1457. } finally {
  1458. redisDataSource.returnResource(shardedJedis, broken);
  1459. }
  1460. return result;
  1461. }
  1462. public byte[] lpop(byte[] key) {
  1463. byte[] result = null;
  1464. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1465. if (shardedJedis == null) {
  1466. return result;
  1467. }
  1468. boolean broken = false;
  1469. try {
  1470. result = shardedJedis.lpop(key);
  1471. } catch (Exception e) {
  1472. log.error(e.getMessage(), e);
  1473. broken = true;
  1474. } finally {
  1475. redisDataSource.returnResource(shardedJedis, broken);
  1476. }
  1477. return result;
  1478. }
  1479. public byte[] rpop(byte[] key) {
  1480. byte[] result = null;
  1481. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1482. if (shardedJedis == null) {
  1483. return result;
  1484. }
  1485. boolean broken = false;
  1486. try {
  1487. result = shardedJedis.rpop(key);
  1488. } catch (Exception e) {
  1489. log.error(e.getMessage(), e);
  1490. broken = true;
  1491. } finally {
  1492. redisDataSource.returnResource(shardedJedis, broken);
  1493. }
  1494. return result;
  1495. }
  1496. /**
  1497. *   批量增加到set
  1498. * @param key
  1499. * @param member
  1500. * @return
  1501. */
  1502. public Long sadd(byte[] key, byte[] member) {
  1503. Long result = null;
  1504. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1505. if (shardedJedis == null) {
  1506. return result;
  1507. }
  1508. boolean broken = false;
  1509. try {
  1510. result = shardedJedis.sadd(key, member);
  1511. } catch (Exception e) {
  1512. log.error(e.getMessage(), e);
  1513. broken = true;
  1514. } finally {
  1515. redisDataSource.returnResource(shardedJedis, broken);
  1516. }
  1517. return result;
  1518. }
  1519. public Set<byte[]> smembers(byte[] key) {
  1520. Set<byte[]> result = null;
  1521. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1522. if (shardedJedis == null) {
  1523. return result;
  1524. }
  1525. boolean broken = false;
  1526. try {
  1527. result = shardedJedis.smembers(key);
  1528. } catch (Exception e) {
  1529. log.error(e.getMessage(), e);
  1530. broken = true;
  1531. } finally {
  1532. redisDataSource.returnResource(shardedJedis, broken);
  1533. }
  1534. return result;
  1535. }
  1536. public Long scard(byte[] key) {
  1537. Long result = null;
  1538. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1539. if (shardedJedis == null) {
  1540. return result;
  1541. }
  1542. boolean broken = false;
  1543. try {
  1544. result = shardedJedis.scard(key);
  1545. } catch (Exception e) {
  1546. log.error(e.getMessage(), e);
  1547. broken = true;
  1548. } finally {
  1549. redisDataSource.returnResource(shardedJedis, broken);
  1550. }
  1551. return result;
  1552. }
  1553. public Long zadd(byte[] key, double score, byte[] member) {
  1554. Long result = null;
  1555. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1556. if (shardedJedis == null) {
  1557. return result;
  1558. }
  1559. boolean broken = false;
  1560. try {
  1561. result = shardedJedis.zadd(key, score, member);
  1562. } catch (Exception e) {
  1563. log.error(e.getMessage(), e);
  1564. broken = true;
  1565. } finally {
  1566. redisDataSource.returnResource(shardedJedis, broken);
  1567. }
  1568. return result;
  1569. }
  1570. public Long zcard(byte[] key) {
  1571. Long result = null;
  1572. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1573. if (shardedJedis == null) {
  1574. return result;
  1575. }
  1576. boolean broken = false;
  1577. try {
  1578. result = shardedJedis.zcard(key);
  1579. } catch (Exception e) {
  1580. log.error(e.getMessage(), e);
  1581. broken = true;
  1582. } finally {
  1583. redisDataSource.returnResource(shardedJedis, broken);
  1584. }
  1585. return result;
  1586. }
  1587. public JedisShardInfo getShardInfo(String key) {
  1588. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1589. JedisShardInfo result = null;
  1590. if (shardedJedis == null) {
  1591. return result;
  1592. }
  1593. boolean broken = false;
  1594. try {
  1595. result = shardedJedis.getShardInfo(key);
  1596. } catch (Exception e) {
  1597. log.error(e.getMessage(), e);
  1598. broken = true;
  1599. } finally {
  1600. redisDataSource.returnResource(shardedJedis, broken);
  1601. }
  1602. return result;
  1603. }
  1604. public Collection<JedisShardInfo> getAllShardInfo() {
  1605. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1606. Collection<JedisShardInfo> result = null;
  1607. if (shardedJedis == null) {
  1608. return result;
  1609. }
  1610. boolean broken = false;
  1611. try {
  1612. result = shardedJedis.getAllShardInfo();
  1613. } catch (Exception e) {
  1614. log.error(e.getMessage(), e);
  1615. broken = true;
  1616. } finally {
  1617. redisDataSource.returnResource(shardedJedis, broken);
  1618. }
  1619. return result;
  1620. }
  1621. public Collection<Jedis> getAllShards() {
  1622. ShardedJedis shardedJedis = redisDataSource.getRedisClient();
  1623. Collection<Jedis> result = null;
  1624. if (shardedJedis == null) {
  1625. return result;
  1626. }
  1627. boolean broken = false;
  1628. try {
  1629. result = shardedJedis.getAllShards();
  1630. } catch (Exception e) {
  1631. log.error(e.getMessage(), e);
  1632. broken = true;
  1633. } finally {
  1634. redisDataSource.returnResource(shardedJedis, broken);
  1635. }
  1636. return result;
  1637. }
  1638. }

三.配置spring xml文件

[html] view plain copy
 

print?

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
  3. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
  8. <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
  9. <property name="maxTotal" value="2048" />
  10. <property name="maxIdle" value="200" />
  11. <property name="numTestsPerEvictionRun" value="1024"/>
  12. <property name="timeBetweenEvictionRunsMillis" value="30000" />
  13. <property name="minEvictableIdleTimeMillis" value="-1" />
  14. <property name="softMinEvictableIdleTimeMillis" value="10000" />
  15. <property name="maxWaitMillis" value="1500"/>
  16. <property name="testOnBorrow" value="true" />
  17. <property name="testWhileIdle" value="true"/>
  18. <property name="testOnReturn" value="false"/>
  19. <property name="jmxEnabled" value="true"/>
  20. <property name="blockWhenExhausted" value="false"/>
  21. </bean>
  22. <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">
  23. <constructor-arg index="0" ref="jedisPoolConfig" />
  24. <constructor-arg index="1">
  25. <list>
  26. <bean class="redis.clients.jedis.JedisShardInfo">
  27. <constructor-arg name="host" value="127.0.0.1" />
  28. <constructor-arg name="port" value="6379" />
  29. <constructor-arg name="timeout" value="10000" />
  30. </bean>
  31. </list>
  32. </constructor-arg>
  33. </bean>
  34. <bean id="redisDataSource" class="redis.dao.RedisDataSourceImpl">
  35. <property name="shardedJedisPool" ref="shardedJedisPool"></property>
  36. </bean>
  37. <bean id="redisClientTemplate" class="redis.dao.RedisClientTemplate">
  38. <property name="redisDataSource" ref="redisDataSource"></property>
  39. </bean>
  40. </beans>

四.代码中的使用,原则就是在执行service时,先通过key到redis里检测是否存在,如果存在则在redis里去数据,如果没有则到数据库去数据,然后存到redis里

[java] view plain copy
 

print?

  1. public class StudentinfoServiceImpl implements StudentinfoService{
  2. private StudentinfoDao studentinfoDao;
  3. private RedisClientTemplate redisClientTemplate;
  4. private static final ObjectMapper mapper=new ObjectMapper();
  5. public List<Studentinfo> getStudentinfoByStu(Studentinfo stu) {
  6. String key="getStudentinfoByStu:usernumber:"+stu.getUsernumber()+":name:"+stu.getName()+":idnumber:"+stu.getIdnumber();
  7. try {
  8. boolean flag=redisClientTemplate.exists(key);
  9. if(flag){
  10. String stuJsonStr=redisClientTemplate.get(key);
  11. List<Studentinfo> list=mapper.readValue(stuJsonStr, new TypeReference<List<Studentinfo>>() {});
  12. return list;
  13. }
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. String hql="from Studentinfo where 1=1";
  18. if(stu!=null){
  19. if(stu.getUsernumber()!=null){
  20. hql+=" and usernumber like '%"+stu.getUsernumber()+"%' ";
  21. }
  22. }
  23. List<Studentinfo> list = studentinfoDao.getStudentinfoByStu(hql);
  24. try {
  25. String stuJsonStr=mapper.writeValueAsString(list);
  26. redisClientTemplate.setex(key, 60, stuJsonStr);
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. }
  30. return list;
  31. }
  32. public StudentinfoDao getStudentinfoDao() {
  33. return studentinfoDao;
  34. }
  35. public void setStudentinfoDao(StudentinfoDao studentinfoDao) {
  36. this.studentinfoDao = studentinfoDao;
  37. }
  38. public RedisClientTemplate getRedisClientTemplate() {
  39. return redisClientTemplate;
  40. }
  41. public void setRedisClientTemplate(RedisClientTemplate redisClientTemplate) {
  42. this.redisClientTemplate = redisClientTemplate;
  43. }
  44. }  

来源: http://blog.csdn.net/u012498149/article/details/53170719

 
 
 
 
上一篇:解决在IE下LABEL中IMG图片无法选中RADIO的几个方法


下一篇:SHA1算法实现及详解