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数据库

     下载源码安装即可。

  • 相关阅读:
    127.0.0.1
    【转】linux查看及修改文件权限以及相关
    【转】为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换?
    ADO.NET类库与SQL相关的知识梳理
    【转】应用软件系统架构设计的“七种武器”
    CPoint、CSize、CRect类
    【转】关于int、float、double一些知识的整理
    C# 实现屏幕键盘
    如何在C#中读写INI文件
    TreeView复选框选择逻辑判断
  • 原文地址:https://www.cnblogs.com/hustdc/p/8597134.html
Copyright © 2011-2022 走看看