Walking on the path of Redis --- Data structure

废话开篇

相比于其他内存数据库,Redis最大的特点就是拥有丰富的数据结构, 经常被称为Date Structure Server。Redis支持的数据结构包含strings, hashes, lists, sets and sorted sets。可以说能包含的基本都包含了,哈哈。

代码示例

下面列出的是对上述数据结构的操作代码示例,请选择参考。

  1 /**  

  2  * @Title: RedisDemo.java

  3  * @Package never.database.redis

  4  * @author "Never" xzllc2010#gmail.com  

  5  * @date Mar 19, 2014 4:52:07 PM

  6  * @Description: A demo for Redis's data structure which

  7  *     include Set, List, SortedSet, hashSet, String and so on.

  8  */

  9 package never.database.redis;

 10 

 11 import java.util.Iterator;

 12 import java.util.Set;

 13 

 14 import redis.clients.jedis.Jedis;

 15 import redis.clients.jedis.SortingParams;

 16 

 17 public class RedisDemo {

 18 

 19     private Jedis jedis;

 20 

 21     public RedisDemo() {

 22         this.jedis = new Jedis("127.0.0.1", 6379);

 23     }

 24 

 25     private void KeyOperate() {

 26         System.out.println("======================key==========================");

 27         System.out.println("清空库中所有数据:" + jedis.flushDB());

 28         System.out.println("判断key999键是否存在:" + jedis.exists("key999"));

 29         System.out.println("新增key001,value001键值对:" + jedis.set("key001", "value001"));

 30         System.out.println("判断key001是否存在:" + jedis.exists("key001"));

 31         System.out.println("新增key002,value002键值对:" + jedis.set("key002", "value002"));

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

 33         Set<String> keys = jedis.keys("*");

 34         Iterator<String> it = keys.iterator();

 35         while (it.hasNext()) {

 36             String key = it.next();

 37             System.out.println(key);

 38         }

 39         System.out.println("系统中删除key002: " + jedis.del("key002"));

 40         System.out.println("判断key002是否存在:" + jedis.exists("key002"));

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

 42         try {

 43             Thread.sleep(2000);

 44         } catch (InterruptedException e) {

 45         }

 46         System.out.println("查看key001的剩余生存时间:" + jedis.ttl("key001"));

 47         System.out.println("移除key001的生存时间:" + jedis.persist("key001"));

 48         System.out.println("查看key001的剩余生存时间:" + jedis.ttl("key001"));

 49         System.out.println("查看key所储存的值的类型:" + jedis.type("key001"));

 50     }

 51 

 52     private void StringOperate() {

 53         System.out.println("======================String_1==========================");

 54         // 清空数据

 55         System.out.println("清空库中所有数据:" + jedis.flushDB());

 56 

 57         System.out.println("=============增=============");

 58         jedis.set("key001", "value001");

 59         jedis.set("key002", "value002");

 60         jedis.set("key003", "value003");

 61         System.out.println("已新增的3个键值对如下:");

 62         System.out.println(jedis.get("key001"));

 63         System.out.println(jedis.get("key002"));

 64         System.out.println(jedis.get("key003"));

 65 

 66         System.out.println("=============删=============");

 67         System.out.println("删除key003键值对:" + jedis.del("key003"));

 68         System.out.println("获取key003键对应的值:" + jedis.get("key003"));

 69 

 70         System.out.println("=============改=============");

 71 

 72         System.out.println("直接覆盖key001原来的数据:" + jedis.set("key001", "value001-update"));

 73         System.out.println("获取key001对应的新值:" + jedis.get("key001"));

 74 

 75         System.out.println("在key002原来值后面追加:" + jedis.append("key002", "+appendString"));

 76         System.out.println("获取key002对应的新值" + jedis.get("key002"));

 77 

 78         System.out.println("=============增,删,查(多个)=============");

 79         /**

 80          * mset,mget同时新增,修改,查询多个键值对 等价于: jedis.set("name","ssss");

 81          * jedis.set("jarorwar","xxxx");

 82          */

 83         System.out.println("一次性新增key201,key202,key203,key204及其对应值:" + jedis.mset("key201", "value201", "key202", "value202", "key203", "value203", "key204", "value204"));

 84         System.out.println("一次性获取key201,key202,key203,key204各自对应的值:" + jedis.mget("key201", "key202", "key203", "key204"));

 85         System.out.println("一次性删除key201,key202:" + jedis.del(new String[] { "key201", "key202" }));

 86         System.out.println("一次性获取key201,key202,key203,key204各自对应的值:" + jedis.mget("key201", "key202", "key203", "key204"));

 87         System.out.println();

 88 

 89         // jedis具备的功能shardedJedis中也可直接使用,下面测试一些前面没用过的方法

 90         System.out.println("======================String_2==========================");

 91         // 清空数据

 92         System.out.println("清空库中所有数据:" + jedis.flushDB());

 93 

 94         System.out.println("=============新增键值对时防止覆盖原先值=============");

 95         System.out.println("原先key301不存在时,新增key301:" + jedis.setnx("key301", "value301"));

 96         System.out.println("原先key302不存在时,新增key302:" + jedis.setnx("key302", "value302"));

 97         System.out.println("当key302存在时,尝试新增key302:" + jedis.setnx("key302", "value302_new"));

 98         System.out.println("获取key301对应的值:" + jedis.get("key301"));

 99         System.out.println("获取key302对应的值:" + jedis.get("key302"));

100 

101         System.out.println("=============超过有效期键值对被删除=============");

102         // 设置key的有效期,并存储数据

103         System.out.println("新增key303,并指定过期时间为2秒" + jedis.setex("key303", 2, "key303-2second"));

104         System.out.println("获取key303对应的值:" + jedis.get("key303"));

105         try {

106             Thread.sleep(3000);

107         } catch (InterruptedException e) {

108         }

109         System.out.println("3秒之后,获取key303对应的值:" + jedis.get("key303"));

110 

111         System.out.println("=============获取原值,更新为新值一步完成=============");

112         System.out.println("key302原值:" + jedis.getSet("key302", "value302-after-getset"));

113         System.out.println("key302新值:" + jedis.get("key302"));

114 

115         System.out.println("=============获取子串=============");

116         System.out.println("获取key302对应值中的子串:" + jedis.getrange("key302", 5, 7));

117     }

118 

119     private void ListOperate() {

120         System.out.println("======================list==========================");

121         System.out.println("清空库中所有数据:" + jedis.flushDB());

122 

123         System.out.println("=============增=============");

124         jedis.lpush("stringlists", "vector");

125         jedis.lpush("stringlists", "ArrayList");

126         jedis.lpush("stringlists", "vector");

127         jedis.lpush("stringlists", "vector");

128         jedis.lpush("stringlists", "LinkedList");

129         jedis.lpush("stringlists", "MapList");

130         jedis.lpush("stringlists", "SerialList");

131         jedis.lpush("stringlists", "HashList");

132         jedis.lpush("numberlists", "3");

133         jedis.lpush("numberlists", "1");

134         jedis.lpush("numberlists", "5");

135         jedis.lpush("numberlists", "2");

136         System.out.println("所有元素-stringlists:" + jedis.lrange("stringlists", 0, -1));

137         System.out.println("所有元素-numberlists:" + jedis.lrange("numberlists", 0, -1));

138 

139         System.out.println("=============删=============");

140         // 删除列表指定的值 ,第二个参数为删除的个数(有重复时),后add进去的值先被删,类似于出栈

141         System.out.println("成功删除指定元素个数-stringlists:" + jedis.lrem("stringlists", 2, "vector"));

142         System.out.println("删除指定元素之后-stringlists:" + jedis.lrange("stringlists", 0, -1));

143         // 删除区间以外的数据

144         System.out.println("删除下标0-3区间之外的元素:" + jedis.ltrim("stringlists", 0, 3));

145         System.out.println("删除指定区间之外元素后-stringlists:" + jedis.lrange("stringlists", 0, -1));

146         // 列表元素出栈

147         System.out.println("出栈元素:" + jedis.lpop("stringlists"));

148         System.out.println("元素出栈后-stringlists:" + jedis.lrange("stringlists", 0, -1));

149 

150         System.out.println("=============改=============");

151         // 修改列表中指定下标的值

152         jedis.lset("stringlists", 0, "hello list!");

153         System.out.println("下标为0的值修改后-stringlists:" + jedis.lrange("stringlists", 0, -1));

154         System.out.println("=============查=============");

155         // 数组长度

156         System.out.println("长度-stringlists:" + jedis.llen("stringlists"));

157         System.out.println("长度-numberlists:" + jedis.llen("numberlists"));

158         // 排序

159         /*

160          * list中存字符串时必须指定参数为alpha,如果不使用SortingParams,而是直接使用sort("list"),

161          * 会出现"ERR One or more scores can't be converted into double"

162          */

163         SortingParams sortingParameters = new SortingParams();

164         sortingParameters.alpha();

165         sortingParameters.limit(0, 3);

166         System.out.println("返回排序后的结果-stringlists:" + jedis.sort("stringlists", sortingParameters));

167         System.out.println("返回排序后的结果-numberlists:" + jedis.sort("numberlists"));

168         // 子串: start为元素下标,end也为元素下标;-1代表倒数一个元素,-2代表倒数第二个元素

169         System.out.println("子串-第二个开始到结束:" + jedis.lrange("stringlists", 1, -1));

170         // 获取列表指定下标的值

171         System.out.println("获取下标为2的元素:" + jedis.lindex("stringlists", 2) + "\n");

172     }

173 

174     private void SetOperate() {

175 

176         System.out.println("======================set==========================");

177         // 清空数据

178         System.out.println("清空库中所有数据:" + jedis.flushDB());

179 

180         System.out.println("=============增=============");

181         System.out.println("向sets集合中加入元素element001:" + jedis.sadd("sets", "element001"));

182         System.out.println("向sets集合中加入元素element002:" + jedis.sadd("sets", "element002"));

183         System.out.println("向sets集合中加入元素element003:" + jedis.sadd("sets", "element003"));

184         System.out.println("向sets集合中加入元素element004:" + jedis.sadd("sets", "element004"));

185         System.out.println("查看sets集合中的所有元素:" + jedis.smembers("sets"));

186         System.out.println();

187 

188         System.out.println("=============删=============");

189         System.out.println("集合sets中删除元素element003:" + jedis.srem("sets", "element003"));

190         System.out.println("查看sets集合中的所有元素:" + jedis.smembers("sets"));

191         /*

192          * System.out.println("sets集合中任意位置的元素出栈:"+jedis.spop("sets"));//注:

193          * 出栈元素位置居然不定?--无实际意义

194          * System.out.println("查看sets集合中的所有元素:"+jedis.smembers("sets"));

195          */

196         System.out.println();

197 

198         System.out.println("=============改=============");

199         System.out.println();

200 

201         System.out.println("=============查=============");

202         System.out.println("判断element001是否在集合sets中:" + jedis.sismember("sets", "element001"));

203         System.out.println("循环查询获取sets中的每个元素:");

204         Set<String> set = jedis.smembers("sets");

205         Iterator<String> it = set.iterator();

206         while (it.hasNext()) {

207             Object obj = it.next();

208             System.out.println(obj);

209         }

210         System.out.println();

211 

212         System.out.println("=============集合运算=============");

213         System.out.println("sets1中添加元素element001:" + jedis.sadd("sets1", "element001"));

214         System.out.println("sets1中添加元素element002:" + jedis.sadd("sets1", "element002"));

215         System.out.println("sets1中添加元素element003:" + jedis.sadd("sets1", "element003"));

216         System.out.println("sets1中添加元素element002:" + jedis.sadd("sets2", "element002"));

217         System.out.println("sets1中添加元素element003:" + jedis.sadd("sets2", "element003"));

218         System.out.println("sets1中添加元素element004:" + jedis.sadd("sets2", "element004"));

219         System.out.println("查看sets1集合中的所有元素:" + jedis.smembers("sets1"));

220         System.out.println("查看sets2集合中的所有元素:" + jedis.smembers("sets2"));

221         System.out.println("sets1和sets2交集:" + jedis.sinter("sets1", "sets2"));

222         System.out.println("sets1和sets2并集:" + jedis.sunion("sets1", "sets2"));

223         System.out.println("sets1和sets2差集:" + jedis.sdiff("sets1", "sets2"));

224     }

225 

226     private void SortedSetOperate() {

227         System.out.println("======================zset==========================");

228         // 清空数据

229         System.out.println(jedis.flushDB());

230 

231         System.out.println("=============增=============");

232         System.out.println("zset中添加元素element001:" + jedis.zadd("zset", 7.0, "element001"));

233         System.out.println("zset中添加元素element002:" + jedis.zadd("zset", 8.0, "element002"));

234         System.out.println("zset中添加元素element003:" + jedis.zadd("zset", 2.0, "element003"));

235         System.out.println("zset中添加元素element004:" + jedis.zadd("zset", 3.0, "element004"));

236         System.out.println("zset集合中的所有元素:" + jedis.zrange("zset", 0, -1));// 按照权重值排序

237         System.out.println();

238 

239         System.out.println("=============删=============");

240         System.out.println("zset中删除元素element002:" + jedis.zrem("zset", "element002"));

241         System.out.println("zset集合中的所有元素:" + jedis.zrange("zset", 0, -1));

242         System.out.println();

243 

244         System.out.println("=============改=============");

245         System.out.println();

246 

247         System.out.println("=============查=============");

248         System.out.println("统计zset集合中的元素中个数:" + jedis.zcard("zset"));

249         System.out.println("统计zset集合中权重某个范围内(1.0——5.0),元素的个数:" + jedis.zcount("zset", 1.0, 5.0));

250         System.out.println("查看zset集合中element004的权重:" + jedis.zscore("zset", "element004"));

251         System.out.println("查看下标1到2范围内的元素值:" + jedis.zrange("zset", 1, 2));

252 

253     }

254 

255     private void HashOperate() {

256         System.out.println("======================hash==========================");

257         // 清空数据

258         System.out.println(jedis.flushDB());

259 

260         System.out.println("=============增=============");

261         System.out.println("hashs中添加key001和value001键值对:" + jedis.hset("hashs", "key001", "value001"));

262         System.out.println("hashs中添加key002和value002键值对:" + jedis.hset("hashs", "key002", "value002"));

263         System.out.println("hashs中添加key003和value003键值对:" + jedis.hset("hashs", "key003", "value003"));

264         System.out.println("新增key004和4的整型键值对:" + jedis.hincrBy("hashs", "key004", 4l));

265         System.out.println("hashs中的所有值:" + jedis.hvals("hashs"));

266         System.out.println();

267 

268         System.out.println("=============删=============");

269         System.out.println("hashs中删除key002键值对:" + jedis.hdel("hashs", "key002"));

270         System.out.println("hashs中的所有值:" + jedis.hvals("hashs"));

271         System.out.println();

272 

273         System.out.println("=============改=============");

274         System.out.println("key004整型键值的值增加100:" + jedis.hincrBy("hashs", "key004", 100l));

275         System.out.println("hashs中的所有值:" + jedis.hvals("hashs"));

276         System.out.println();

277 

278         System.out.println("=============查=============");

279         System.out.println("判断key003是否存在:" + jedis.hexists("hashs", "key003"));

280         System.out.println("获取key004对应的值:" + jedis.hget("hashs", "key004"));

281         System.out.println("批量获取key001和key003对应的值:" + jedis.hmget("hashs", "key001", "key003"));

282         System.out.println("获取hashs中所有的key:" + jedis.hkeys("hashs"));

283         System.out.println("获取hashs中所有的value:" + jedis.hvals("hashs"));

284 

285     }

286 

287     public static void main(String[] args) {

288             RedisDemo redisDemo = new RedisDemo();

289             redisDemo.KeyOperate();

290             redisDemo.StringOperate();

291             redisDemo.ListOperate();

292             redisDemo.SetOperate();

293             redisDemo.SortedSetOperate();

294             redisDemo.HashOperate();        

295     }

296     

297 }
View Code

废话结尾

今天还算有点收获,慢慢了解了这个神奇东西的基本操作,对这些数据结构的底层实现有些好奇心,不知是否和Java的Cellections有相似的地方。

你可能感兴趣的:(struct)