zoukankan      html  css  js  c++  java
  • redis-java-api

    redis的java操作api

    至于redis五种数据类型, 和redis的命令操作, 和client端差不多的, 就不罗列了

    代码github地址: https://github.com/wenbronk/redis-java.git

    package com.iwhere.learn.redis.java;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import org.junit.Before;
    import org.junit.Test;
    
    import redis.clients.jedis.BinaryClient.LIST_POSITION;
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.ShardedJedis;
    
    /**
     * 使用java 操作 redis
     * @author wenbronk
     * @time 2017年3月24日  下午1:05:20  2017
     */
    
    //@RunWith(SpringJUnit4ClassRunner.class)
    //@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)
    public class JavaAPITest {
    
        private Jedis jedis;
        private ShardedJedis shardedJedis;
        
        /**
         * 获取redis的基础信息
         */
        @Test
        public void testConfiguration() {
            String ping = jedis.ping();
            System.out.println(ping);
        }
        
        
        /**
         * 对key进行操作
         */
        @Test
        public void testKey() {
            // key是否存在
            Boolean exists = jedis.exists("name");
            
            // 查看所有的key, 支持模糊查询
            Set<String> keys = jedis.keys("*");
            
            // del 删除键
            jedis.del("name");
            
            // key的数据类型
            String type = jedis.type("vini");
            
            System.out.println(type);
        }
        
        /**
         * 测试String类型的
         */
        @Test
        public void testString () {
            // set, 会发生覆盖
            String ok = jedis.set("name", "vini");    //OK
            String set = jedis.getSet("name", "被修改的值");
            // 获取value值并截取
            String getrange = jedis.getrange("name", 0, 5);
            
            // append, 直接在后面添加
            Long append = jedis.append("name", "wenbronk");
            
            
            // get
            String value = jedis.get("age");
            
            // 获取字符串的长度
            Long strlen = jedis.strlen("vini");
            
            // mset , 一次设置/获取 多个键值对
            jedis.mset("name", "vini", "age", "23");
            List<String> mget = jedis.mget("vini", "wenbronk");
            
            // 自增
            Long incr = jedis.incr("age");
            
            
            System.out.println(incr + ": " + value);
            
        }
        
        /**
         * 操作list类型的数据
         * 使用双向链表实现
         * 可用于商品评论列表
         */
        @Test
        public void testList() {
            // 左插入, 可同时插入多个值
            jedis.lpush("user", "vini", "123");
            jedis.lpush("user", "wenbronk", "456", "789");
            
            // 右插入, 可同时插入多个值
            jedis.rpush("nanan", "wenbronk", "vini");
            jedis.rpush("nanan", "who");
            
            // 在某个值之前插入
            jedis.linsert("user", LIST_POSITION.AFTER, "wenbronk", "插入新值");
            
            // 长度
            jedis.llen("user");
            
            // 角标操作
            // 获取某个角标的值
            String lindex = jedis.lindex("user", 1);
            // 修改角标的值
            jedis.lset("user", 0, "我变成第一个");
            // 获取list中某段index, 最左为0, 最右为 -1, 子串
            List<String> lrange = jedis.lrange("user", 0, 3);
            // 删除角标的值
            jedis.lrem("user", 0, "这是啥");
            // 删除区间之外的值
            jedis.ltrim("user", 2, 5);
            
            
            // 出栈
            // 两端弹出元素
            jedis.lpop("user");
            jedis.rpop("user");
            
            // 将一个列表转移到另一个列表
            jedis.rpoplpush("user", "nanan");
            
            System.out.println(lrange);
        }
        
        /**
         * 测试set集合
         * 运用是因为集合运算
         */
        @Test
        public void testSet() {
            //添加
            jedis.sadd("testSet", "1", "2", "3");
            // 删除匹配的记录
            jedis.srem("testSet", "5", "6", "7");
            // 删除key
            jedis.del("testSet");
            
            // 是否存在
            jedis.sismember("testSet", "4");
            
            // 获取
            Set<String> smembers = jedis.smembers("testSet");
            // 获取元素个数
            Long scard = jedis.scard("user");
            // 随机取一个
            String srandmember = jedis.srandmember("testSet");
            String spop = jedis.spop("testSet");    // 弹出
            
            
            // 集合运算
            // 差集, 包左不包右
            jedis.sdiff("testSet", "testSet2");
            // 并集, 数据分析
            jedis.sunion("testSet", "testSet2");
            // 交集
            jedis.sinter("testSet", "testSet2");
        }
        
        
        /**
         * 操作 hash 类型的数据
         * 类似map, 解决存储对象的问题, 但太浪费内存了, 使用hash删列实现
         * 不过现在都用json了...
         * 可用在缓存商品信息
         */
        @Test
        public void testHash() {
            // 准备数据
            Map<String,String> map = new HashMap<>();
            map.put("name","vini");
            map.put("age","24");
            map.put("birth","1992-01-26");
            
            // 赋值操作
            jedis.hmset("student", map);
            // 更新, 字段存在覆盖
            jedis.hset("student", "score", "99");
            // 字段存在不做任何操作
            jedis.hsetnx("student", "age", "25");
            // 多个字段, 字段封装在map中, 字段存在会覆盖
            jedis.hmset("student", new HashMap<>());
            
            // 取值, 根据key和字段
            String name = jedis.hget("student", "name");
            // 获取多个字段
            List<String> hmget = jedis.hmget("student", "name", "age", "birth");
            // 获取所有字段
            Map<String, String> hgetAll = jedis.hgetAll("student");
            
            // 删除, 返回被删除字段的值
    //        Long hdel = jedis.hdel("student", "score", "age");
            
            // 自增, 指定字段, step
            jedis.hincrBy("student", "age", 1);
            
            // 判断字段是否存在
            jedis.hexists("student", "name");
            // 只获取字段名
            Set<String> hkeys = jedis.hkeys("student");
            // 只获取字段值
            List<String> hvals = jedis.hvals("student");
        }
        
        /**
         * 有序集合, 有序却不重复, 使用hash散列表实现
         * 内置排序, 但用的并不多
         * 可用在商品销售排行榜
         */
        @Test
        public void testZSet() {
            // 新增, 中间为分数
            jedis.zadd("zset", 10, "234");
            
            // 获取排名, 从小到大
            jedis.zrange("zset", 0, -1);
            // 从大到小获取
            jedis.zrevrange("zset", 0, -1);
            
            // 获取分数
            Double zscore = jedis.zscore("zset", "234");
            // 获取指定分数范围的元素
            jedis.zrangeByScore("zset", 80, 100);
            // 获取指定范围的个数
            jedis.zcount("zset", 80, 100);
            
            // 获取元素数量
            Long zcard = jedis.zcard("zset");
            
            // 删除元素
            jedis.zrem("zset", "234");
            // 按照排名删除
            jedis.zremrangeByRank("zset", 0, 20);
            // 按照分数范围删除
            jedis.zremrangeByScore("zset", 80, 100);
            
        }
        
        @Before
        public void testBefore() {
            jedis = RedisClientUtil.getRedisClient().getJedis();
            shardedJedis = RedisClientUtil.getRedisClient().getShardedJedis();
        }
        @Agfter
       public void testAfter() { jedis.close();    // 资源返还 }
    }
  • 相关阅读:
    POJ 3268——Silver Cow Party——————【最短路、Dijkstra、反向建图】
    POJ 1797 ——Heavy Transportation——————【最短路、Dijkstra、最短边最大化】
    POJ 2253 ——Frogger——————【最短路、Dijkstra、最长边最小化】
    HDU 5505——GT and numbers——————【素数】
    int,long,long long的数据范围
    HDU 5501——The Highest Mark——————【贪心+dp】
    UVALive 4262——Trip Planning——————【Tarjan 求强连通分量个数】
    随手记
    工作流引擎资料/产品收集
    Vim 学习指南
  • 原文地址:https://www.cnblogs.com/wenbronk/p/6627988.html
Copyright © 2011-2022 走看看