zoukankan      html  css  js  c++  java
  • Redis相关操作

    Redis相关参数简述

    该参数放在config.properties

    ###redis库连接地址 真实用###
    redisUrl=
    ###redis库连接默认端口###
    redisPort=
    ###redis库最大连接数###
    maxTotal=20
    ###redis库最大空闲连接数###
    maxIdle=5
    ###redis库获取连接时的最大等待毫秒数###
    maxWaitMillis=-1
    ###redis库在获取连接的时候检查有效性###
    testOnBorrow=true
    ###redis库在获取返回结果的时候检查有效性###
    testOnReturn=true
    ###redis库下标 1号库###
    indexDatabase=1
    ###redis库队列名###
    queueName=UserOperateQ

    引入jar

     

    Jar包下载地址

    http://mvnrepository.com/artifact/redis.clients/jedis

    http://mvnrepository.com/artifact/org.apache.commons/commons-pool2

    下载操作图解:

           链接进去如图,在红色框内找到所需版本jar包

     

    如图找到点击红框内进去

     

    进入如图,点击红框内链接即可下载

     

    以上两个地址jar包下载操作一样。

    Redis库连接

           Redis连接分为切片池连接与非切片池连接,其区别在于一般项目基本都使用非切片池,切片池主要用于分布式项目,可以设置主从Redis库。

           此处是非切片池连接

           该连接类几个注意点:

    1. 使用了单例模式创建对象
    2. 获取配置文件中redis相关参数放在内存中
    3. 单独提出open连接与close连接方法
    public class InitRedisClient {
        public Jedis jedis;//非切片的客户端连接
        public JedisPool jedisPool;//非切片连接池
        private static String redisUrl; //redis库连接地址
        private static int redisPort; //redis库连接端口
        private static int maxTotal; //最大连接数
        private static int maxIdle; //最大空闲连接数
        private static int maxWaitMillis; //获取连接时的最大等待毫秒数
        private static boolean testOnBorrow; //在获取连接的时候检查有效性
        private static boolean testOnReturn; //在获取返回结果的时候检查有效性
        private static int indexDatabase; //rdis库下标
        //该类实例
        private static volatile InitRedisClient instance;
    
        static {
            //todo 获取redis库的相关配置信息
            redisUrl = ReadConfig.getProperty("redisUrl");
            redisPort = Integer.parseInt(ReadConfig.getProperty("redisPort"));
            maxTotal = Integer.parseInt(ReadConfig.getProperty("maxTotal"));
            maxIdle = Integer.parseInt(ReadConfig.getProperty("maxIdle"));
            maxWaitMillis = Integer.parseInt(ReadConfig.getProperty("maxWaitMillis"));
            testOnBorrow = Boolean.parseBoolean(ReadConfig.getProperty("testOnBorrow"));
            testOnReturn = Boolean.parseBoolean(ReadConfig.getProperty("testOnReturn"));
            indexDatabase = Integer.parseInt(ReadConfig.getProperty("indexDatabase"));
        }
        //私有化
        private InitRedisClient() {
        }
    
        /**
         * 单例模式创建对象
         * @return
         */
        public static InitRedisClient getInstance() {
            if (instance == null) {
                synchronized (InitRedisClient.class) {
                    if (instance == null) {
                        instance = new InitRedisClient();
                    }
                }
            }
            return instance;
        }
    
        /**
         * 打开redis连接
         */
        public void open() {
            initialPool();
            jedis = jedisPool.getResource();
            //设置数据操作服务器上第几个redis库
            jedis.select(indexDatabase);
        }
    
        /**
         * 初始化非切片池
         */
        private void initialPool() {
            // 池基本配置
            JedisPoolConfig config = getConfig();
            jedisPool = new JedisPool(config, redisUrl, redisPort, 30000);
        }
    
        /**
         * 设置redis库中相关配置信息
         *
         * @return
         */
        private JedisPoolConfig getConfig() {
            // 池基本配置
            JedisPoolConfig config = new JedisPoolConfig();
            //最大连接数
            config.setMaxTotal(maxTotal);
            //最大空闲连接数
            config.setMaxIdle(maxIdle);
            //获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
            config.setMaxWaitMillis(maxWaitMillis);
            //在获取连接的时候检查有效性, 默认false
            config.setTestOnBorrow(testOnBorrow);
            //在获取返回结果的时候检查有效性, 默认false
            config.setTestOnReturn(testOnReturn);
            return config;
        }
    
        /**
         * 关闭连接
         *
         * @param jedis
         */
        public void close(Jedis jedis) {
            if (jedis != null) {
                try {
                    jedisPool.returnResource(jedis);
                    if (jedis.isConnected()) {
                        jedis.quit();
                        jedis.disconnect();
                    }
                } catch (Exception e) {
                    jedisPool.returnBrokenResource(jedis);
                    if (jedis.isConnected()) {
                        jedis.quit();
                        jedis.disconnect();
                    }
                }
            }
        }
    }
    关于redis相关参数是写在配置文件config.properties

    读取该配置文件类

    public class ReadConfig {
        private static Properties prop = null;
    
        private static void loadProperties() {
            prop = new Properties();
            try {
                InputStream input = ReadConfig.class.getResourceAsStream("/config.properties");
                prop.load(input);
            } catch (IOException e) {
                System.out.println("读取配置文件异常!");
            }
        }
    
        public static String getProperty(String key) {
            loadProperties();
            String value = prop.getProperty(key);
            if (value == null) return null;
            try {
                value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
            } catch (UnsupportedEncodingException e) {
                System.out.println("读取配置文件异常!");
            }
            return value;
        }
    }

    Redis数据类型的基本操作

    在做redis库相关操作之前肯定是需要先获取连接,操作之后需要关闭连接,基于以上连接类操作。

    Key功能:

    Private void keyOperate(){
        Try{
        //获取连接类实例
        InitRedisClient initRedis = InitRedisClient.getInstance();
        //打开redis连接
        initRedis.open();
        Jedis jedis = initRedis.jedis;
        //删除选择数据库中的所有key
        jedis.flushDB()
        //判断key值是否存在,返回值为TRUE或FALSE
        jedis.exists("key")
        //输出系统中所有key
        Set<String> keys = jedis.keys("*"); 
            Iterator<String> it=keys.iterator() ;   
            while(it.hasNext()){   
                String key = it.next();   
                System.out.println(key);   
            }
        //删除某个key
        jedis.del("key")
        //设置key活动时间5秒
        jedis.expire("key", 5)
        //获取key活动时间
        jedis.ttl("key")
        //查看key所存储的值的类型
        jedis.type("key")
        //将key由oldname重命名为newname,若newname存在则删除newname表示的key
        rename(oldname, newname)
        //将当前数据库中的key转移到有dbindex索引的数据库
        rename(oldname, newname)
        }catch (Exception e) {
            //释放redis对象
        initRedis.jedisPool.returnBrokenResource(jedis);
        e.printStackTrace();
    }finally {
        //返还到连接池
        initRedis.close(jedis);
    }
    }

    String功能

    Public void stringOperate(){
        Try{
        //获取连接类实例
        InitRedisClient initRedis = InitRedisClient.getInstance();
        //打开redis连接
        initRedis.open();
        Jedis jedis = initRedis.jedis;
        //增加值,有key则会覆盖其value值
        jedis.set("key","value");
        //删除key值键值对
        jedis.del("key")
        //获取key值的value值
        jedis.get("key")
        //追加value值
        jedis.append("key","appendString")
        //同时给多个key值赋值
        jedis.mset(key1, value1, key2, value2,…key N, value N):
        //获取多个key值的value值
        jedis.mget(key1, key2,…, key N):
        //删除多个key
        jedis.del(new String[]{"key201", "key202"})
        //如果不存在名称为key的string,则向库中添加string,存在不加
        jedis.setnx(key, value):
        //向库中添加(名称为key,值为value)同时,设定过期时间time
        jedis.setex(key, time, value):
            }catch (Exception e) {
            //释放redis对象
        initRedis.jedisPool.returnBrokenResource(jedis);
        e.printStackTrace();
    }finally {
        //返还到连接池
        initRedis.close(jedis);
    }
    }

    List功能(即队列)

    Public void stringOperate(){
        Try{
        //获取连接类实例
        InitRedisClient initRedis = InitRedisClient.getInstance();
        //打开redis连接
        initRedis.open();
        Jedis jedis = initRedis.jedis;
    //清空库里所有数据
    jedis.flushDB()
    //在名称为key的list头添加一个值为value的 元素
    jedis.lpush(key,value);
        //在名称为key的list尾添加一个值为value的元素
        jedis.rpush(key,value);
        //返回名称为key的list的长度
        jedis.llen(key):
        //返回名称为key的list中start至end之间的元素(下标从0开始)
        jedis.lrange(key, start, end):
        //截取名称为key的list,保留start至end之间的元素
        jedis.ltrim(key, start, end):
        //返回名称为key的list中index位置的元素
        jedis.lindex(key, index):
        //给名称为key的list中index位置的元素赋值为value
        jedis.lset(key, index, value):
        //删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0      从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素。
        jedis.lrem(key, count, value):
        //返回并删除名称为key的list中的首元素
        jedis.lpop(key):
        //返回并删除名称为key的list中的尾元素
        jedis.rpop(key):
        //返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
    Jedis.rpoplpush(srckey, dstkey):
    }catch (Exception e) {
            //释放redis对象
        initRedis.jedisPool.returnBrokenResource(jedis);
        e.printStackTrace();
    }finally {
        //返还到连接池
        initRedis.close(jedis);
    }
    }

    Set功能

    Public void stringOperate(){
        Try{
        //获取连接类实例
        InitRedisClient initRedis = InitRedisClient.getInstance();
        //打开redis连接
        initRedis.open();
        Jedis jedis = initRedis.jedis;
        //向名称为key的set中添加元素member
        Jedis.sadd(key, member)
        //删除名称为key的set中的元素member
        Jedis.srem(key, member)
        //随机返回并删除名称为key的set中一个元素
        Jedis.spop(key)
        //将member元素从名称为srckey的集合移到名称为dstkey的集合
        Jedis.smove(srckey, dstkey, member)
        //返回名称为key的set的基数
        Jedis.scard(key)
        //测试member是否是名称为key的set的元素
        Jedis.sismember(key, member)
        //返回名称为key的set的所有元素
        Jedis.smembers(key)
        //随机返回名称为key的set的一个元素
        Jedis.srandmember(key) 
    }catch (Exception e) {
            //释放redis对象
        initRedis.jedisPool.returnBrokenResource(jedis);
        e.printStackTrace();
    }finally {
        //返还到连接池
        initRedis.close(jedis);
    }
    }

    Hash功能

    Public void stringOperate(){
        Try{
        //获取连接类实例
        InitRedisClient initRedis = InitRedisClient.getInstance();
        //打开redis连接
        initRedis.open();
        Jedis jedis = initRedis.jedis;
        //向名称为key的hash中添加元素field<—>value
        Jedis.hset(key, field, value)
        //返回名称为key的hash中field对应的value
        Jedis.hget(key, field)
        //返回名称为key的hash中field i对应的value
        Jedis.hmget(key, field1, …,field N)
        //向名称为key的hash中添加元素field i<—>value i
        jedis.hmset(key, field1, value1,…,field N, value N):
        //将名称为key的hash中field的value增加integer
        Jedis.hincrby(key, field, integer)
        //名称为key的hash中是否存在键为field的域
        Jedis.hexists(key, field)
        //删除名称为key的hash中键为field的域
        Jedis.hdel(key, field)
        //返回名称为key的hash中元素个数
        Jedis.hlen(key)
        //返回名称为key的hash中所有键
        Jedis.hkeys(key)
        //返回名称为key的hash中所有键对应的value
        Jedis.hvals(key)
        //返回名称为key的hash中所有的键(field)及其对应的value
        Jedis.hgetall(key)
    }catch (Exception e) {
            //释放redis对象
        initRedis.jedisPool.returnBrokenResource(jedis);
        e.printStackTrace();
    }finally {
        //返还到连接池
        initRedis.close(jedis);
    }
    }
  • 相关阅读:
    CS1704问题汇总
    Android hdpi ldpi mdpi xhdpi xxhdpi适配详解
    Mac开发工具汇总
    Objective-C语法之代码块(block)的使用 (转载)
    iOS学习之Object-C语言属性和点语法(转载收集)
    object-c中疑问
    Android ListVeiw控件(转载整理)
    Android Studio--》Gradle Scripts配置说明
    xutils android studio引用问题
    15 个 Android 通用流行框架大全(转载)
  • 原文地址:https://www.cnblogs.com/bad-guy/p/10997961.html
Copyright © 2011-2022 走看看