好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java连接redis及基本操作示例

本文实例讲述了java连接redis及基本操作。分享给大家供大家参考,具体如下:

点击此处: 本站下载 安装。

解压安装

启动redis:使用cd命令切换目录到 d:\redis 运行 redis-server.exe redis.windows.conf

默认端口为6379

访问:切换到redis目录下运行 redis-cli.exe -h 127.0.0.1 -p 6379 。

pom.xml:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<project xmlns= "http://maven.apache.org/pom/4.0.0" xmlns:xsi= "http://HdhCmsTestw3.org/2001/xmlschema-instance" xsi:schemalocation= "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >

  <modelversion> 4.0 . 0 </modelversion>

  <groupid>testredis</groupid>

  <artifactid>testredis</artifactid>

  <version> 0.0 . 1 -snapshot</version>

  <build/>

  <dependencies>

   <!-- redis nosql 操作依赖 -->

     <dependency>

       <groupid>redis.clients</groupid>

       <artifactid>jedis</artifactid>

       <version> 2.1 . 0 </version>

     </dependency>

  </dependencies>

</project>

测试代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

package com.crisy.redis;

import java.util.arraylist;

import java.util.iterator;

import java.util.list;

import java.util.set;

import redis.clients.jedis.jedis;

import redis.clients.jedis.jedispool;

import redis.clients.jedis.jedispoolconfig;

import redis.clients.jedis.jedisshardinfo;

import redis.clients.jedis.shardedjedis;

import redis.clients.jedis.shardedjedispool;

public class redisclient {

  /**

  * 一般项目基本都使用非切片池;

  * 切片池主要用于分布式项目,可以设置主从redis库

  */

  private jedis jedis; //非切片客户端连接

  private jedispool jedispool; //非切片连接池

  private shardedjedis shardedjedis; //切片客户端连接

  private shardedjedispool shardedjedispool; //切片连接池

 

  public redisclient(){

     initialpool(); //初始化非切片连接池

     initialshardedpool(); //初始化切片连接池

     shardedjedis = shardedjedispool.getresource();

     jedis = jedispool.getresource();

   }

  private void initialpool() {

  jedispoolconfig config = new jedispoolconfig();

  config.setmaxactive( 20 );

  config.setmaxidle( 5 );

  config.setmaxwait( 100001 );

  config.settestonborrow( false );

  jedispool = new jedispool(config, "127.0.0.1" , 6379 );

  }

 

  private void initialshardedpool() {

  jedispoolconfig config = new jedispoolconfig();

  config.setmaxactive( 20 );

  config.setmaxidle( 5 );

  config.setmaxwait( 100001 );

  config.settestonborrow( false );

  //slave连接

  list<jedisshardinfo> shardinfos = new arraylist<jedisshardinfo>();

  shardinfos.add( new jedisshardinfo( "127.0.0.1" , 6379 , "master" ));

  //构造池

  shardedjedispool = new shardedjedispool(config, shardinfos);

  }

 

  public void show(){

  system.out.println( "----对value操作的命令----" );

  valueoperate();

  system.out.println( "----对string操作的命令----" );

  stringoperator();

  system.out.println( "----对list操作的命令----" );

  listoperator();

  system.out.println( "----对set操作的命令----" );

  setoperator();

  system.out.println( "----对hash操作的命令----" );

  hashoperate();

  }

 

 

  /**

  * 对value操作的命令

  * @throws interruptedexception

  */

  private void valueoperate(){

  system.out.println( "清空当前选择库中所有key:" +jedis.flushdb());

  system.out.println( "清空所有库中所有key:" +jedis.flushall());

  system.out.println( "判断mykey键是否存在:" +shardedjedis.exists( "mykey" ));

  system.out.println( "新增mykey:" +shardedjedis.set( "mykey" , "myvalue" ));

  system.out.println( "判断mykey键是否存在:" +shardedjedis.exists( "mykey" ));

  system.out.println( "查看mykey所储存的值的类型:" +jedis.type( "mykey" ));

  system.out.println( "重命名mykey-mykey_1:" +jedis.rename( "mykey" , "mykey_1" ));

  system.out.println( "判断mykey键是否存在:" +shardedjedis.exists( "mykey" ));

  system.out.println( "判断mykey_1键是否存在:" +shardedjedis.exists( "mykey_1" ));

  system.out.println( "新增mykey_2:" +shardedjedis.set( "mykey_2" , "myvalue_2" ));

  system.out.println( "查看索引为0的key:" +jedis.select( 0 ));

  system.out.println( "当前数据库中key的数目:" +jedis.dbsize());

  system.out.println( "系统中所有键如下:" );

  //返回满足给定pattern的所有key

     set<string> keys = jedis.keys( "*" );

     iterator<string> it=keys.iterator() ; 

     while (it.hasnext()){ 

       string key = it.next(); 

       system.out.println(key); 

     }

     //删除时,如果不存在忽略此命令

     system.out.println( "系统中删除mykey_3: " +jedis.del( "mykey_3" ));

     system.out.println( "系统中删除mykey_2: " +jedis.del( "mykey_2" ));

     system.out.println( "判断mykey_2是否存在:" +shardedjedis.exists( "mykey_2" ));

     system.out.println( "设置 mykey_1的过期时间为5秒:" +jedis.expire( "mykey_1" , 5 ));

     try {

   thread.sleep( 2000 );

  } catch (interruptedexception e) {

   // todo auto-generated catch block

   e.printstacktrace();

  }

     //没有设置过期时间或者不存在的都返回-1

     system.out.println( "获得mykey_1的剩余活动时间:" +jedis.ttl( "mykey_1" ));

     system.out.println( "取消设置mykey_1的活动时间:" +jedis.persist( "mykey_1" ));

     system.out.println( "查看mykey_1的剩余活动时间:" +jedis.ttl( "mykey_1" ));

  }

 

  /**

  * 对string操作的命令

  */

  private void stringoperator(){

  system.out.println( "清空当前选择库中所有key:" +jedis.flushdb());

  system.out.println( "给数据库中名称为key01的string赋予值value:" +jedis.set( "key01" , "value01" ));

  system.out.println( "给数据库中名称为key02的string赋予值value:" +jedis.set( "key02" , "value02" ));

  system.out.println( "给数据库中名称为key03的string赋予值value:" +jedis.set( "key03" , "value03" ));

  system.out.println( "返回数据库中名称为key01的string的value:" +jedis.get( "key01" ));

  system.out.println( "返回库中多个string的value:" +jedis.mget( "key01" , "key02" , "key03" ));

  system.out.println( "添加string,名称为key,值为value:" +jedis.setnx( "key04" , "value04" ));

  system.out.println( "向库中添加string,设定过期时间time:" +jedis.setex( "key05" , 5 , "value05" ));

  system.out.println( "批量设置多个string的值:" +jedis.mset( "key06_1" , "value06_1" , "key06_2" , "value06_2" ));

  system.out.println( "给数据库中名称为key07的string赋予值value:" +jedis.set( "key07" , "1" ));

  system.out.println( "名称为key07的string增1操作:" +jedis.incr( "key07" ));

  //err value is not an integer or out of range

  //system.out.println("名称为key01的string增1操作:"+jedis.incr("key01"));

  system.out.println( "名称为key07的string增加integer:" +jedis.incrby( "key07" , 5 ));

  system.out.println( "名称为key07的string减1操作:" +jedis.decr( "key07" ));

  system.out.println( "名称为key07的string减少integer:" +jedis.decrby( "key07" , 3 ));

  system.out.println( "名称为key的string的值附加value:" +jedis.append( "key01" , "hello world" ));

  system.out.println( "返回名称为key的string的value的子串:" +jedis.substr( "key01" , 0 , 5 ));

  }

 

  /**

  * 对list操作的命令

  */

  private void listoperator(){

  system.out.println( "清空当前选择库中所有key:" +jedis.flushdb());

  //准备两个list

  shardedjedis.lpush( "mylist" , "java" );

     shardedjedis.lpush( "mylist" , "c" );

     shardedjedis.lpush( "mylist" , "c++" );

     shardedjedis.lpush( "mylist" , "java" );

  system.out.println( "在名称为mylist的list尾添加一个值为value的元素:" +jedis.rpush( "mylist" , "phython" ));

  system.out.println( "在名称为mylist的list头添加一个值为value的 元素:" +jedis.rpush( "mylist" , "php" ));

  system.out.println( "返回名称为mylist的list的长度:" +jedis.llen( "mylist" ));

  system.out.println( "返回名称为mylist中start至end之间的元素:" +jedis.lrange( "mylist" , 0 , 3 ));

  system.out.println( "截取名称为mylist的list:" +jedis.ltrim( "mylist" , 0 , 3 ));

  system.out.println( "返回名称为mylist的list中index位置的元素:" +jedis.lindex( "mylist" , 0 ));

  system.out.println( "给名称为mylist的list中index位置的元素赋值:" +jedis.lset( "mylist" , 0 , "hahahahah我改啦" ));

  system.out.println( "删除count个mylist的key中值为value的元素:" +jedis.lrem( "mylist" , 1 , "java" ));

  system.out.println( "返回并删除名称为mylist的list中的首元素:" +jedis.lpop( "mylist" ));

  system.out.println( "返回并删除名称为mylist的list中的尾元素:" +jedis.rpop( "mylist" ));

  }

 

  /**

  * 对set操作的命令

  */

  private void setoperator(){

  system.out.println( "清空当前选择库中所有key:" +jedis.flushdb());

  //准备两个set

  jedis.sadd( "myset" , "hahaha" );

  jedis.sadd( "myset" , "hahaha" );

  jedis.sadd( "myset" , "lalala" );

  jedis.sadd( "myset" , "kakaka" );

  jedis.sadd( "myset2" , "hahaha" );

  jedis.sadd( "myset2" , "lalala" );

  jedis.sadd( "myset2" , "kakaka" );

  system.out.println( "向名称为myset的set中添加元素member:" +jedis.sadd( "myset" , "wawawa" ));

  system.out.println( "返回名称为myset的set的所有元素:" +jedis.smembers( "myset" ));

  system.out.println( "删除名称为myset的set中的元素member:" +jedis.srem( "myset" , "wawawa" ));

  system.out.println( "返回名称为myset的set的所有元素:" +jedis.smembers( "myset" ));

  system.out.println( "随机返回并删除名称为myset的set中一个元素:" +jedis.spop( "myset" ));

  system.out.println( "移到集合元素:" +jedis.smove( "myset" , "myset2" , "hahaha" ));

  system.out.println( "返回名称为myset的set的所有元素:" +jedis.smembers( "myset" ));

  system.out.println( "返回名称为myset2的set的所有元素:" +jedis.smembers( "myset2" ));

  system.out.println( "返回名称为mykey的set的基数:" +jedis.scard( "myset" ));

  system.out.println( "member是否是名称为mykey的set的元素:" +jedis.sismember( "myset" , "hahaha" ));

  system.out.println( "求交集:" +jedis.sinter( "myset" , "myset2" ));

  system.out.println( "求交集并将交集保存到dstkey的集合:" +jedis.sinterstore( "dstkey" , "myset2" , "myset" ));

  system.out.println( "返回名称为dstkey的set的所有元素:" +jedis.smembers( "dstkey" ));

  system.out.println( "求并集:" +jedis.sunion( "myset" , "myset2" ));

  system.out.println( "求并集并将并集保存到dstkey的集合:" +jedis.sinterstore( "dstkey" , "myset2" , "myset" ));

  system.out.println( "返回名称为dstkey的set的所有元素:" +jedis.smembers( "dstkey" ));

  system.out.println( "求差集:" +jedis.sdiff( "myset2" , "myset" ));

  system.out.println( "求差集并将差集保存到dstkey的集合:" +jedis.sdiffstore( "dstkey" , "myset2" , "myset" ));

  system.out.println( "返回名称为dstkey的set的所有元素:" +jedis.smembers( "dstkey" ));

  system.out.println( "随机返回名称为dstkey的set的一个元素:" +jedis.srandmember( "dstkey" ));

  }

 

  /**

  * hash

  */

  private void hashoperate(){

  system.out.println(jedis.flushdb());

  system.out.println( "向名称为key的hash中添加元素field1:" +shardedjedis.hset( "key" , "field1" , "value1" ));

     system.out.println( "向名称为key的hash中添加元素field2:" +shardedjedis.hset( "key" , "field2" , "value2" ));

     system.out.println( "向名称为key的hash中添加元素field3:" +shardedjedis.hset( "key" , "field3" , "value3" ));

     system.out.println( "返回名称为key的hash中field1对应的value:" +shardedjedis.hget( "key" , "field1" ));

     system.out.println( "返回名称为key的hash中field1对应的value:" +shardedjedis.hmget( "key" , "field1" , "field2" , "field3" ));

     system.out.println( "删除名称为key的hash中键为field1的域:" +shardedjedis.hdel( "key" , "field1" ));

     system.out.println( "返回名称为key的hash中所有键对应的value:" +shardedjedis.hvals( "key" ));

     system.out.println( "返回名称为key的hash中元素个数:" +shardedjedis.hlen( "key" ));

     system.out.println( "返回名称为key的hash中所有键:" +shardedjedis.hkeys( "key" ));

     system.out.println( "返回名称为key的hash中所有的键(field)及其对应的value:" +shardedjedis.hgetall( "key" ));

     system.out.println( "名称为key的hash中是否存在键为field1的域:" +shardedjedis.hexists( "key" , "field1" ));

  }

}

希望本文所述对大家java程序设计有所帮助。

查看更多关于Java连接redis及基本操作示例的详细内容...

  阅读:14次