看到一篇关于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] 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

 
 
 
 

redis在Java web项目的简单应用(转载)的更多相关文章

  1. java web 项目中 简单定时器实现 Timer

    java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报  分类: JAVA(24)  版权声明:本文为博 ...

  2. java web项目最简单的结构

    为了解“徒手”建立一个web应用,此博客建立简单过程 1.在任意一个目录下,建立一个文件夹,取名字 webDemo .这个应用名字. 2.在 webDemo 内建立一个 WEB-INF 文件夹,此处大 ...

  3. IDEA与Tomcat创建并运行Java Web项目及servlet的简单实现

    创建Web项目 1. File -> New Project ,进入创建项目窗口 2.在 WEB-INF 目录下点击右键, New -> Directory ,创建  classes 和  ...

  4. 在cmd命令行使用Maven Archetype插件 generate命令创建简单的java web项目

    前提: 1.下载apache-maven:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache ...

  5. Idea创建简单Java Web项目并部署Servlet

    1.打开Idea,创建JAVA Web项目 在WEB-INF目录下创建classes和lib文件夹 配置编译输出路径为刚才新建的classes文件夹 配置依赖jar包加载路径 添加tomcat ser ...

  6. 一个简单的Java Web项目搭建流程

    今天试图在服务器上搭建一个web服务器,顺便回顾了java web项目的入门,使用Servlet处理HTTP请求,并记录日志等操作.当很久没有做过web项目时,有些东西还是很容易忘记的. Maven配 ...

  7. 一个完整Java Web项目背后的密码

    前言 最近自己做了几个Java Web项目,有公司的商业项目,也有个人做着玩的小项目,写篇文章记录总结一下收获,列举出在做项目的整个过程中,所需要用到的技能和知识点,带给还没有真正接触过完整Java ...

  8. 做一个完整的Java Web项目需要掌握的技能[转]

    转自:http://blog.csdn.net/JasonLiuLJX/article/details/51494048 最近自己做了几个Java Web项目,有公司的商业项目,也有个人做着玩的小项目 ...

  9. 一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)

    概述 此项目基于SSM框架技术的Java Web项目,是全栈项目,涉及前端.后端.插件.上线部署等各个板块,项目所有的代码都是自己编码所得,每一步.部分都有清晰的注释,完全不用担心代码混乱,可以轻松. ...

随机推荐

  1. jQuery的选择器中的通配符[id^='code']或[name^='code']

    这两天在做一个专题的时候遇到了一个通配符的问题 //弹层操作$(function(){ //视频播放 $("a[href^='#video']").each(function(in ...

  2. php输出金字塔

    <?php for($i=0;$i<10;$i++){ for($j=1;$j<=$i;$j++){ echo $i.'*'.$j.'|'; } echo '<br>'; ...

  3. 【转】Objective-C中一种消息处理方法performSelector: withObject:

    原文 : http://www.cnblogs.com/buro79xxd/archive/2012/04/10/2440074.html   Objective-C中调用函数的方法是“消息传递”,这 ...

  4. UIGestureRecognizer手势识别

    UIGestureRecognizer 1.#import "ViewController.h"2.3.@interface ViewController ()<UIGest ...

  5. [个人原创]关于java中对象排序的一些探讨(二)

    2.  使用Collections.sort()方法 Collections类中提供了诸多静态方法,诸如addAll(),max()等等.当自己相对Collection接口下的类处理的时候,可以看看这 ...

  6. 重新开始学习javase_Exception

    “违例”(Exception)这个词表达的是一种“例外”情况,亦即正常情况之外的一种“异常”.在问题发生的时候,我们可能不知具体该如何解决,但肯定知道已不能不顾一切地继续下去.此时,必须坚决地停下来, ...

  7. VBoxManage 命令行使用

    原文地址:http://cnjun939.blog.163.com/blog/static/78144538201251474311135/ 由于最近需研究virtualbox,看好看到上面的网址有, ...

  8. bash shell学习-实践 (自己实现一些小工具)

    The poor starve while the rich feast. "穷人饥肠辘辘,富人大吃大喝" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux S ...

  9. 对于方法 String.Contains,只支持可在客户端上求值的参数。

    var ProjectLevel_XJJS = "06,07,08,09"; p.Where(e =>ProjectLevel_XJJS.Contains(e.LevelCo ...

  10. js中的 window.location、document.location、document.URL 对像的区别(转载)

    原文:http://www.cr173.com/html/18417_1.html 当我们需要对html网页进行转向的时候或是读取当前网页的时候可以用到下面三个对像: window.location. ...