在Redis的官网上,我们可以看到Redis的Java客户端众多

其中,Jedis是Redis官方推荐,也是使用用户最多的Java客户端。

开始前的准备

创建项目

  1. 首先创建一个新的Java Project,命名为Jedis(你也可以给它你喜爱的名字)
  2. 在项目中新建一个Folder(文件夹),命名为“lib”
  3. 将jedis-2.1.0.jar、commons-pool-1.5.4.jar、junit-4.10.jar复制到lib文件夹下
  4. 选中文件夹或者三个jar文件,右击找到Build Path,选择菜单下的Add to Build Path加入到Build Path中

开始撸代码

继续之前,请务必阅读过Redis入门教程(二)—基本数据类型,这将对你有很大的帮助。


  1. import java.util.HashMap;
  2. import java.util.List;
  3. import java.util.Map;
  4. import java.util.Set;
  5. import org.junit.Before;
  6. import org.junit.Test;
  7. import redis.clients.jedis.BinaryClient.LIST_POSITION;
  8. import redis.clients.jedis.Jedis;
  9. /**
  10. * @author dotleo
  11. *
  12. */
  13. public class Jedis_Test {
  14. //Java中操作Redis的对象
  15. private Jedis jedis ;
  16. @Before
  17. public void connection() {
  18. //连接Redis服务器,参数1为ip,参数2为端口号,请根据自己实际情况赋值
  19. jedis = new Jedis("192.168.1.233",6379);
  20. }
  21. /**
  22. * redis字符串操作
  23. */
  24. @Test
  25. public void stringTest() {
  26. //为避免多次运行Redis中存在键,导致结果不符合预期,每次执行时清理当前库
  27. //特别注意:在开发中请勿如此操作
  28. jedis.flushDB();
  29. //添加字符串
  30. jedis.set("age", "101");
  31. System.out.println("age = " + jedis.get("age"));
  32. //批量添加字符串
  33. jedis.mset("age1","1","age2","2");
  34. System.out.println("age1 = " + jedis.get("age1"));
  35. System.out.println("age2 = " + jedis.get("age2"));
  36. //添加字符串(仅在不存在时)
  37. jedis.setnx("price", "101");
  38. System.out.println("price = " + jedis.get("price"));
  39. //加1操作
  40. jedis.incr("price");
  41. System.out.println("price = " + jedis.get("price"));
  42. //拼接字符串
  43. jedis.append("age", "years");
  44. System.out.println("age = " + jedis.get("age"));
  45. //截取字符串
  46. String str = jedis.getrange("age", 0L, 5L);
  47. System.out.println("age[0,5] = " + str);
  48. //获取字符串长度
  49. Long len = jedis.strlen("age");
  50. System.out.println("age length = " + len);
  51. //删除字符串
  52. jedis.del("age");
  53. System.out.print("age = " + jedis.get("age"));
  54. }
  55. /**
  56. * redis哈希操作
  57. */
  58. @Test
  59. public void hashTest() {
  60. //为避免多次运行Redis中存在键,导致结果不符合预期,每次执行时清理当前库
  61. //特别注意:在开发中请勿如此操作
  62. jedis.flushDB();
  63. //添加值
  64. jedis.hset("student", "name", "zhangsan");
  65. //添加值(仅在不存在时)
  66. jedis.hsetnx("student", "age", "12");
  67. //批量添加值
  68. Map<String,String> map = new HashMap<String,String>();
  69. map.put("sex", "boy");
  70. map.put("address", "beijing");
  71. jedis.hmset("student", map);
  72. //获取值
  73. String str = jedis.hget("student", "name");
  74. System.out.println("student:name = " + str);
  75. //批量获取值
  76. List<String> list = jedis.hmget("student", "name","age");
  77. System.out.println("student:name = " + list.get(0));
  78. System.out.println("student:age = " + list.get(1));
  79. //获取key
  80. Set<String> set = jedis.hkeys("student");
  81. System.out.println("student keys:");
  82. for (String string : set) {
  83. System.out.println(string);
  84. }
  85. //获取值
  86. list = jedis.hvals("student");
  87. System.out.println("student vals:");
  88. for (String string : list) {
  89. System.out.println(string);
  90. }
  91. //获取key和值
  92. map = jedis.hgetAll("student");
  93. System.out.println("student keys vals:");
  94. for (String key:map.keySet()) {
  95. System.out.println(key + " = " + map.get(key));
  96. }
  97. //删除值
  98. jedis.hdel("student", "sex");
  99. System.out.println("student:sex = " + jedis.hget("student", "sex"));
  100. //获取长度
  101. Long len = jedis.hlen("student");
  102. System.out.println("student length = " + len);
  103. }
  104. /**
  105. * redis列表操作
  106. */
  107. @Test
  108. public void listTest() {
  109. //为避免多次运行Redis中存在键,导致结果不符合预期,每次执行时清理当前库
  110. //特别注意:在开发中请勿如此操作
  111. jedis.flushDB();
  112. //表头添加
  113. jedis.lpush("student", "xiaoli","xiaowang","xiaoliu","xiaozhang");
  114. //表尾添加
  115. jedis.rpush("student", "zhangsan","lisi","wangwu");
  116. //通过索引获取元素
  117. String str = jedis.lindex("student", 1L);
  118. System.out.println("student 1st = " + str);
  119. //在元素前或者后插入元素
  120. jedis.linsert("student", LIST_POSITION.BEFORE, "xiaozhang", "zhangsan");
  121. //从表头弹出
  122. str = jedis.lpop("student");
  123. System.out.println("student first = " + str);
  124. //从表尾弹出
  125. str = jedis.rpop("student");
  126. System.out.println("student end = " + str);
  127. //删除
  128. jedis.lrem("student", 2, "zhangsan");
  129. //获取所有值
  130. List<String> list = jedis.lrange("student", 0L, -1L);
  131. System.out.println("student vals:");
  132. for (String string : list) {
  133. System.out.println(string);
  134. }
  135. }
  136. /**
  137. * redis集合操作
  138. */
  139. @Test
  140. public void setTest() {
  141. //为避免多次运行Redis中存在键,导致结果不符合预期,每次执行时清理当前库
  142. //特别注意:在开发中请勿如此操作
  143. jedis.flushDB();
  144. //添加成员
  145. jedis.sadd("student", "zhangsan","lisi");
  146. jedis.sadd("monitor","wangwu","zhangsan");
  147. //获取成员数
  148. Long count = jedis.scard("student");
  149. System.out.println("student count = " + count);
  150. //获取成员
  151. Set<String> set = jedis.smembers("student");
  152. System.out.println("student members:");
  153. for (String string : set) {
  154. System.out.println(string);
  155. }
  156. //是否为该集合的成员
  157. boolean bool = jedis.sismember("student", "zhangsan");
  158. System.out.println("member zhangsan exist?\n" + bool);
  159. //交集
  160. set = jedis.sinter("student","monitor");
  161. System.out.println("student inter monitor members:");
  162. for (String string : set) {
  163. System.out.println(string);
  164. }
  165. //并集
  166. set = jedis.sunion("student","monitor");
  167. System.out.println("student union monitor members:");
  168. for (String string : set) {
  169. System.out.println(string);
  170. }
  171. //补集
  172. set = jedis.sdiff("student","monitor");
  173. System.out.println("student diff monitor members:");
  174. for (String string : set) {
  175. System.out.println(string);
  176. }
  177. //随机返回成员
  178. String str = jedis.srandmember("student");
  179. System.out.println("random member:\n" + str);
  180. //移动成员
  181. jedis.smove("student", "monitor", "lisi");
  182. //删除成员
  183. jedis.srem("monitor", "zhangsan");
  184. //显示
  185. set = jedis.smembers("student");
  186. System.out.println("student members:");
  187. for (String string : set) {
  188. System.out.println(string);
  189. }
  190. set = jedis.smembers("monitor");
  191. System.out.println("monitor members:");
  192. for (String string : set) {
  193. System.out.println(string);
  194. }
  195. }
  196. /**
  197. * redis有序集合操作
  198. */
  199. @Test
  200. public void sortSetTest() {
  201. //为避免多次运行Redis中存在键,导致结果不符合预期,每次执行时清理当前库
  202. //特别注意:在开发中请勿如此操作
  203. jedis.flushDB();
  204. //添加成员
  205. Map<Double,String> map = new HashMap<Double,String>();
  206. map.put(50d, "zhangsan");
  207. map.put(60d, "lisi");
  208. map.put(70d, "wangwu");
  209. map.put(80d, "zhaoliu");
  210. map.put(90d, "yangqi");
  211. map.put(120d, "xiaoming");
  212. map.put(130d, "xiaozhang");
  213. map.put(140d, "xiaoli");
  214. map.put(150d, "xiaoliu");
  215. jedis.zadd("score", map);
  216. //更新分数
  217. jedis.zadd("score", 100d, "zhangsan");
  218. //获取成员的分数值
  219. Double dou = jedis.zscore("score", "zhangsan");
  220. System.out.println("zhangsan score :\n" + dou);
  221. //按照成员分数小到大返回索引区间的成员
  222. Set<String> set = jedis.zrange("score", 0, -1);
  223. System.out.println("score member order:");
  224. for (String string : set) {
  225. System.out.println(string);
  226. }
  227. //按照成员分数大到小返回索引区间的成员
  228. set = jedis.zrevrange("score", 0, -1);
  229. System.out.println("score member reverse:");
  230. for (String string : set) {
  231. System.out.println(string);
  232. }
  233. //按照成员分数小到大返回分数值区间的成员
  234. set = jedis.zrangeByScore("score", 50d, 80d);
  235. System.out.println("score member order:");
  236. for (String string : set) {
  237. System.out.println(string);
  238. }
  239. //返回有序集合中指定成员的索引
  240. Long index = jedis.zrank("score", "xiaoliu");
  241. System.out.println("xiaoliu index is:\n" + index);
  242. }
  243. }

如果你读过我的Redis入门教程(二)—基本数据类型,你会发现上面这些命令在其中都有提及,只是诸如参数传递的形式、返回值的类型等有少许不同,但方法名和文中的指令完全相同,其他方面也大同小异。因此在上面的代码中并没有像文章中一样尽可能多的列出所有的函数,还需你自己勤于练习、摸索。

Redis连接池


  1. import redis.clients.jedis.Jedis;
  2. import redis.clients.jedis.JedisPool;
  3. import redis.clients.jedis.JedisPoolConfig;
  4. /**
  5. * @author dotleo
  6. *
  7. */
  8. public class RedisUtil {
  9. //Redis服务器ip地址
  10. private static final String IP_ADDRESS = "192.168.1.233";
  11. //Redis端口号
  12. private static final int PORT = 6379;
  13. //可用连接实例的最大数目,默认值为8;
  14. //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
  15. private static final int MAX_ACTIVE = 1024;
  16. //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
  17. private static final int MAX_IDLE = 200;
  18. //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
  19. private static final int MAX_WAIT = 10000;
  20. //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
  21. private static boolean TEST_ON_BORROW = true;
  22. //Jedis连接池对象
  23. private static JedisPool jedisPool = null;
  24. /**
  25. * 初始化连接池
  26. */
  27. static {
  28. try {
  29. JedisPoolConfig conf = new JedisPoolConfig();
  30. conf.setMaxActive(MAX_ACTIVE);
  31. conf.setMaxIdle(MAX_IDLE);
  32. conf.setMaxWait(MAX_WAIT);
  33. conf.setTestOnBorrow(TEST_ON_BORROW);
  34. jedisPool = new JedisPool(conf, IP_ADDRESS, PORT);
  35. } catch(Exception ex) {
  36. ex.printStackTrace();
  37. }
  38. }
  39. /**
  40. * 获取Jedis实例
  41. * @return Jedis实例
  42. */
  43. public synchronized static Jedis getJedis() {
  44. try {
  45. if (jedisPool != null) {
  46. Jedis resource = jedisPool.getResource();
  47. return resource;
  48. } else {
  49. return null;
  50. }
  51. } catch (Exception e) {
  52. e.printStackTrace();
  53. return null;
  54. }
  55. }
  56. /**
  57. * 释放jedis资源
  58. * @param jedis Jedis对象
  59. */
  60. public static void returnResource(final Jedis jedis) {
  61. if (jedis != null) {
  62. jedisPool.returnResourceObject(jedis);
  63. }
  64. }
  65. }

Redis入门教程(三)— Java中操作Redis的更多相关文章

  1. Java中操作Redis

    一.server端安装 1.下载 https://github.com/MSOpenTech/redis 可看到当前可下载版本:redis2.6 下载后的文件为: 解压后,选择当前64位win7系统对 ...

  2. 20190928-02使用Redis客户端Jedis连接Redis,以及用Java代码操作Redis 000 030

    启动redis package com.yujie.jedis; import java.util.HashMap; import java.util.Map; import java.util.Se ...

  3. Redis【4】Java Jedis 操作 Redis~

    package redis.redis; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; /** * 描 ...

  4. 超强、超详细Redis入门教程【转】

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...

  5. 超详细Redis入门教程【转】

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下   [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使 ...

  6. Redis入门教程:特性及数据类型的操作

    虽然Redis已经很火了,相信还是有很多同学对Redis只是有所听闻或者了解并不全面,下面是一个比较系统的Redis介绍,对Redis的特性及各种数据类型及操作进行了介绍.是一个很不错的Redis入门 ...

  7. 【原】Redis入门教程

    最近在学习Redis,写几篇文章记录一下学习过程:Redis入门教程. 1.Redis基本概念 Redis Redis Keys Redis 基本数据类型 Redis基本操作 遍历操作 Pub-Sub ...

  8. Redis入门教程(二)

    推荐阅读: Redis入门教程(一)https://www.cnblogs.com/jichi/p/10285346.html 5. Redis 的数据结构 5.1 Redis 数据结构介绍 redi ...

  9. redis学习教程三《发送订阅、事务、连接》

    redis学习教程三<发送订阅.事务.连接>  一:发送订阅      Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.Redi ...

随机推荐

  1. POJ-1328-放置雷达

    这是一道贪心的题目,首先我们要知道,我们放置雷达的话我们可以做一个转换,就是已知岛屿的点坐标的时候,我们可以算一下,这个点以d为半径与x轴交点之间的线段在x轴上的投影,然后我们只需要在这个投影范围内设 ...

  2. UART中RTS、CTS

    RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据. CTS (Clear ToSend,发送允许)为输入信号,用于 ...

  3. 数据结构( Pyhon 语言描述 ) — — 第2章:集合概览

    集合类型 定义 个或多个其他对象的对象.集合拥有访问对象.插入对象.删除对象.确定集合大小以及遍历或访问集合的对象的操作 分类 根据组织方式进行 线性集合 线性集合按照位置排列其项,除了第一项,每一项 ...

  4. Android开发——查询/卸载手机里的应用、应用图标创建

    1. 获取手机里的所有已安装的应用 以前写过一个SoftProviderUtil工具类,拿出来分享一个.通过PackageManager,不仅可以获取PackageName,判断此进程是否为系统应用, ...

  5. linux中的grep命令用法

    原文请移驾:http://blog.csdn.net/greytree/article/details/428532 grep -- print lines matching a pattern (将 ...

  6. 大数据学习——hive数据类型

    1. hive的数据类型Hive的内置数据类型可以分为两大类:(1).基础数据类型:(2).复杂数据类型2. hive基本数据类型基础数据类型包括:TINYINT,SMALLINT,INT,BIGIN ...

  7. HDU 4499

    题目大意: N*M的棋盘上摆了一些棋子,在剩余位置上尽可能多的摆上炮,使所有炮不能互吃 dfs+回溯 #include <iostream> #include <cstdio> ...

  8. js中trim函数的简单实现

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  9. msp430入门编程24

    msp430中C语言的扩展--段的使用 msp430入门学习 msp430入门编程

  10. 三、fs文件操作模块

    fs模块用于文件的读写等操作. 该模块有如下这些方法: 1.fs.stat() : 检测是文件还是目录 const fs = require('fs'); fs.stat('test.html',fu ...