zoukankan      html  css  js  c++  java
  • 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) + "
    ");
    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有相似的地方。

  • 相关阅读:
    Advanced Configuration Tricks
    Reviewing the Blog Module
    Editing and Deleting Data
    Making Use of Forms and Fieldsets
    Understanding the Router
    SQL Abstraction and Object Hydration
    Preparing for Different Databases
    Java学习理解路线图
    Openstack学习历程_1_视频
    CentOS安装Nginx负载
  • 原文地址:https://www.cnblogs.com/RobertC/p/3612253.html
Copyright © 2011-2022 走看看