zoukankan      html  css  js  c++  java
  • redis

    1 为什么要用redis而不是直接用map、list等作为缓存

    第一,redis可以供多个程序高并发使用,并且可以保证一致性,map、list只是一个程序私有的;

    第二,redis可以提供持久化,map、list不能;

    第三,redis支持分布式;

    2 Jedis是redis的java客户端

    3 什么是连接池、什么是切片连接池和非切片连接池

    连接建立花费时间,何不先建立起来,然后用的时候直接拿来用,这样的话,就可以节省建立连接的时间了。

    3.1 Jetis和JedisPool

    这个是单机版本的Jedis连接池。

    3.2 SharedJetis和SharedJedisPool

    SharedJetis是说,将数据进行水平切片,然后每个片放在一个台服务器上。使用的是一种hash算法进行切片。

    这个是分布式的Jedis连接池。

    4 Jetis使用案例(参考https://www.cnblogs.com/lovling/p/7921500.html)

    4.1 添加maven依赖

    <!-- Redis NoSQL 操作依赖 -->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>

    4.2 连接池帮助类

    package redis;

    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;

    public class RedisUtil {
            
        // Redis 服务器 IP
        private String address = "192.168.3.118";
        
        // Redis的端口号
        private int port = 6379;
        
        // 访问密码
        private String password = "920619";
        
        // 连接 redis 等待时间
        private int timeOut = 10000;
        
        // 可用连接实例的最大数目,默认值为8;
        // 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)
        private int maxTotal = 1024;
        
        // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8
        private int maxIdle = 200;
        
        // 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
        private int maxWait = 10000;
        
        // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的
        private boolean testOnBorrow = true;
        
        // 连接池
        private JedisPool jedisPool = null;
        
        // 构造函数
        public RedisUtil() {
            try {
                JedisPoolConfig config = new JedisPoolConfig();
                config.setMaxTotal(maxTotal);
                config.setMaxIdle(maxIdle);
                config.setMaxWaitMillis(maxWait);
                config.setTestOnBorrow(testOnBorrow);
                jedisPool = new JedisPool(config, address, port, timeOut, password);
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
        
        // 获取 Jedis 实例
        public Jedis getJedis() {
            if (jedisPool != null) {
                return jedisPool.getResource();
            }
            return null;    
        }
    }

    4.3 测试类

    package test;

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;

    import org.junit.Test;

    import redis.RedisUtil;
    import redis.clients.jedis.Jedis;

    public class RedisTest {

        private RedisUtil redisUtil = new RedisUtil();

        // 字符串操作
        @Test
        public void testStr() {
            Jedis jedis = redisUtil.getJedis();
            jedis.set("id", "15"); // 只能是字符串
            String id = jedis.get("id");
            System.out.println(id);
            jedis.close();
        }

        // 操作 map
        @Test
        public void testMap() {
            Jedis jedis = redisUtil.getJedis();
            Map<String, String> map = new HashMap<String, String>();
            map.put("name", "xinxin");
            map.put("age", "22");
            map.put("qq", "123456");
            jedis.hmset("user", map);
            List<String> rsmap = jedis.hmget("user", "name", "age", "qq");
            System.out.println(rsmap);
            jedis.hdel("user", "age");
            Iterator<String> iter = jedis.hkeys("user").iterator();
            while (iter.hasNext()) {
                String key = iter.next();
                System.out.println(key + ":" + jedis.hmget("user", key));
            }
            jedis.close();
        }
      
        // 操作 list
        @Test
        public void testList() {
            Jedis jedis = redisUtil.getJedis();
            jedis.del("java framework");
            System.out.println(jedis.lrange("java framework", 0, -1));
            jedis.lpush("java framework", "spring");
            jedis.lpush("java framework", "struts");
            jedis.lpush("java framework", "hibernate");
            System.out.println(jedis.lrange("java framework", 0, -1));
            jedis.del("java framework");
            jedis.rpush("java framework", "spring");
            jedis.rpush("java framework", "struts");
            jedis.rpush("java framework", "hibernate");
            System.out.println(jedis.lrange("java framework", 0, -1));
            jedis.close();
        }

        // 操作 set
        @Test
        public void testSet() {
            Jedis jedis = redisUtil.getJedis();
            jedis.sadd("user1", "liuling");
            jedis.sadd("user1", "xinxin");
            jedis.sadd("user1", "ling");
            jedis.sadd("user1", "zhangxinxin");
            jedis.sadd("user1", "who");
            jedis.srem("user1", "who"); // 移除noname
            System.out.println(jedis.smembers("user1"));// 获取所有加入的value
            System.out.println(jedis.sismember("user1", "who"));// 判断 who
            System.out.println(jedis.srandmember("user1")); // 是否是user集合的元素
            System.out.println(jedis.scard("user1"));// 返回集合的元素个数
            jedis.close();
        }

        // jedis 排序
        @Test
        public void testOrder() {
            Jedis jedis = redisUtil.getJedis();
            jedis.del("a");
            jedis.rpush("a", "1");
            jedis.lpush("a", "6");
            jedis.lpush("a", "3");
            jedis.lpush("a", "9");
            System.out.println(jedis.lrange("a", 0, -1));  
            System.out.println(jedis.sort("a"));          
            System.out.println(jedis.lrange("a", 0, -1));
            jedis.close();
        }

    }

    5 安装redis数据库

     下载源码安装即可。

  • 相关阅读:
    中国历史朝代公元对照简表
    [Solved] DashBoard – Excel Service: The data sources may be unreachable, may not be responding, or may have denied you access.
    Delete/Remove Project from TFS 2010
    Sharepoint site showing system account instead of my username on the top right corner.
    你的成功在于你每天养成的习惯
    Internet Information Services is running in 32bit emulation mode. Correct the issue listed above and rerun setup.
    Prepare to back up and restore a farm (Office SharePoint Server 2007)
    Word中字号与磅值的对应关系
    How to: Change the Frequency for Refreshing the Data Warehouse for Team System
    UI Automation in WPF/Silverlight
  • 原文地址:https://www.cnblogs.com/hustdc/p/8597134.html
Copyright © 2011-2022 走看看