zoukankan      html  css  js  c++  java
  • 初识Redis

    package com.wangzhu.redis;
    
    import java.util.List;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    /**
     * Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,<br/>
     * 包括string(字符串)、list(链表)、 set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。<br/>
     * 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作 ,而且这些操作都是原子性的。<br/>
     * 在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。<br/>
     * 区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave。<br/>
     * 所需jar包:jedis-2.6.2.jar hamcrest-core-1.3.jar junit-4.11.jar<br/>
     * 
     * @author wangzhu
     * @date 2015-3-9上午9:10:16
     * 
     */
    public class TestRedis {
    
        Jedis jedis;
        JedisPool pool;
    
        @Before
        public void init() {
            pool = new JedisPool(new JedisPoolConfig(), "localhost");
            jedis = pool.getResource();
        }
    
        @Test
        public void testPing() {
            System.out.println("Servier is runnning: " + jedis.ping());
            // Servier is runnning: PONG
        }
    
        @After
        public void destroy() {
            jedis.disconnect();
        }
    
        @Test
        public void testString() {
            // 获取
            System.out.println("get===" + jedis.get("strKey"));
    
            // 设置
            System.out.println("set===" + jedis.set("strKey", "qingyezhu"));
    
            // 获取
            System.out.println("get===" + jedis.get("strKey"));
    
            // 删除
            System.out.println("del===" + jedis.del("strKey"));
    
            // get===null
            // set===OK
            // get===qingyezhu
            // del===1
    
        }
    
        @Test
        public void testList() {
            String listKey = "listKey";
            // System.out.println("lpush==="
            // + jedis.lpush(listKey, "Redis", "MongoDb", "MySql", "Oracle",
            // "Db2"));
    
            System.out.println("lpush====" + jedis.lpush(listKey, "other"));
            long len = jedis.llen(listKey);
            System.out.println("size===" + len);
            List<String> list = jedis.lrange(listKey, 0, len);
            System.out.println("list====" + list);
            for (int i = 0; i < len; i++) {
                System.out.println(i + "===lindex===" + jedis.lindex(listKey, i));
            }
    
            System.out.println(jedis.llen(listKey));
        }
    }
    1、字符串操作
    设置key的值
    set key value
    
    获取key的值
    get key
    
    设置过期的毫秒数
    pexpire key 10000
    
    查看key的生命周期(毫秒)
    pttl key
    
    设置key的生命周期(秒)
    expire key 1
    
    查看key的生命周期(秒)
    ttl key
    
    把指定的key设置为永久有效
    perisist key
    
    删除一个key
    del key
    
    返回随机key
    randomkey
    
    返回key存储的类型
    type key
    
    改名
    rename key newkey
    
    一次设置多个值
    mset key1 value key2 value key3 value
    
    一次获取多个值
    mget key1 key2 key3
    
    把value追加到key的原值上
    append key value
    
    取指定key的value值得长度
    strlen key
    
    2、链表操作
    Redis的list类型其实就是一个每个子元素都是string类型的双向链表,链表的最大长度是2^32。list既可以用做栈,也可以用作队列。
    list的pop操作还有阻塞版本,主要是为了避免轮询。
    
    把值插入到链表头部
    lpush key value
    把值插入到链表尾部
    rpush key value
    返回并删除链表头部元素
    lpop key
    返回并删除链表尾部元素
    rpop key
    返回链表中[start,stop]中的元素
    lrange key start stop
    
    计算链表的元素的个数
    llen key
    
    返回index索引上的值
    lindex key index
    
    3、hashed类型操作
    
    Redis的hash是一个string类型的field和value的映射表,它的添加、删除操作都是O(1)(平均)。hash特别适用于存储对象,
    将一个对象存储在hash类型中会占用更少的内存,并且可以方便的存取整个对象。
    
    配置:
    #配置字段最多64个
    hash_max_zipmap_entries 64
    #配置value最大为512字节
    hash_max_zipmap_value 512
    
    设置hash1的field为value
    hset hash1 field value
    
    获取指定的hash field
    hget hash1 field
    
    同时设置多个field
    hmset hash1 field1 value1 field2 value2 field3 value3
    
    一次获取多个field
    hmget hash1 field1 field2 field3
    
    测试制定的hash field是否存在
    hexists hash1 field
    
    获取hash的field数量
    hlen hash1
    
    返回hash所有的field
    hkeys hash1
    
    返回hash所有的value
    hvals hash1
    
    获取某个hash中全部的field及value
    hgetall hash1
    
    删除指定的field
    hdel hash1 field
    
    
    4、集合结构操作
    特点:无序性、确定性、唯一性
    
    往集合众添加元素
    sadd key value1 value2 value3
    
    获取集合所有的元素
    smembers key
    
    删除集合某个元素
    srem key value
    
    返回并删除集合中的一个随机元素
    spop key
    
    随机取一个元素
    srandmember key
    
    判断集合中是否有某个值
    sismember key value
    
    返回集合元素的个数
    scard key
    
    求key1 key2 key3的交集
    sinter key1 key2 key3
    
    求key1 key2的并集
    sunion key1 key2
    
    求key1 key2的差集
    sdiff key1 key2
    
    求key1 key2的交集并存在res里
    sinterstore res key1 key2
    
    把source的value移动到dest集合中
    smove source dest value
    
    6、有序集合
    概念:它是在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动按新的值调整顺序。
    
    添加元素
    zadd key score1 value1
    
    查询member的排名
    zrank key member
    
    返回集合元素的个数
    zcard key
    
    删除集合中的元素
    zrem key value1 value2

    参考:

    Redis内存使用优化与存储【http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage】

    Windows下Redis的安装使用【http://os.51cto.com/art/201403/431103.htm】

  • 相关阅读:
    python3之datetime模块
    python3之time模块
    前端面试题01
    前端面试题02
    angularjs
    nodejs
    android 报错记录
    android知识点回顾二
    android知识点回顾
    Broadcast广播代码例子
  • 原文地址:https://www.cnblogs.com/xiaoxian1369/p/4322740.html
Copyright © 2011-2022 走看看