`
leiyongping88
  • 浏览: 76880 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Redis - 超高性能 key-value 数据库 java学习

阅读更多

package com.commons.redis.cache;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

public class RedisManager {
    /** 切片链接池 */
    private static ShardedJedisPool shardedJedisPool;
    private ShardedJedis shardedJedis;

    // 设置与缓存服务器的连接池
    static {
        // 池基本配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxActive(Integer.parseInt(Config
                .getProperty("redis.pool.maxActive")));
        config.setMaxIdle(Integer.parseInt(Config
                .getProperty("redis.pool.maxIdle")));
        config.setMaxWait(Integer.parseInt(Config
                .getProperty("redis.pool.maxWait")));
        config.setTestOnBorrow(true);

        List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
        // 服务器列表
        String[] addressArr = (Config.getProperty("redis.address")).split(",");
        for (String str : addressArr) {
            String []addressConfig = str.split(":");
            shards.add(new JedisShardInfo(addressConfig[0], Integer
                    .parseInt(addressConfig[1]), addressConfig[2]));
        }
        // 构造池
        shardedJedisPool = new ShardedJedisPool(config, shards);
    }

    /**
     * redis的List集合 ,向key这个list添加元素
     *
     * @param key
     *            List别名
     * @param string
     *            元素
     * @return
     */
    public long rpush(String key, String string) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            long ret = shardedJedis.rpush(key, string);
            shardedJedisPool.returnResource(shardedJedis);
            return ret;
        } catch (Exception e) {
            if (shardedJedis != null)
                shardedJedisPool.returnBrokenResource(shardedJedis);
            e.printStackTrace();
            return 0L;
        }
    }

    /**
     * 获取key这个List,从第几个元素到第几个元素 LRANGE key start
     * stop返回列表key中指定区间内的元素,区间以偏移量start和stop指定。
     * 下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。
     * 也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
     *
     * @param key
     *            List别名
     * @param start
     *            开始下标
     * @param end
     *            结束下标
     * @return
     */
    public List<String> lrange(String key, long start, long end) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            List<String> ret = shardedJedis.lrange(key, start, end);
            shardedJedisPool.returnResource(shardedJedis);
            return ret;
        } catch (Exception e) {
            if (shardedJedis != null)
                shardedJedisPool.returnBrokenResource(shardedJedis);
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 将哈希表key中的域field的值设为value。
     *
     * @param key
     *            哈希表别名
     * @param field键
     * @param value
     *            值
     */
    public void hset(String key, String field, String value) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            shardedJedis.hset(key, field, value);
            shardedJedisPool.returnResource(shardedJedis);
        } catch (Exception e) {
            if (shardedJedis != null)
                shardedJedisPool.returnBrokenResource(shardedJedis);
            e.printStackTrace();
        }
    }

    /**
     * 向key赋值
     *
     * @param key
     * @param value
     */
    public void set(String key, String value) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            shardedJedis.set(key, value);
            shardedJedisPool.returnResource(shardedJedis);
        } catch (Exception e) {
            if (shardedJedis != null)
                shardedJedisPool.returnBrokenResource(shardedJedis);
            e.printStackTrace();
        }
    }

    /**
     * 获取key的值
     *
     * @param key
     * @return
     */
    public String get(String key) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            String value = shardedJedis.get(key);
            shardedJedisPool.returnResource(shardedJedis);
            return value;
        } catch (Exception e) {
            if (shardedJedis != null)
                shardedJedisPool.returnBrokenResource(shardedJedis);
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 将多个field - value(域-值)对设置到哈希表key中。
     *
     * @param key
     * @param map
     */
    public void hmset(String key, Map<String, String> map) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            shardedJedis.hmset(key, map);
            shardedJedisPool.returnResource(shardedJedis);
        } catch (Exception e) {
            if (shardedJedis != null)
                shardedJedisPool.returnBrokenResource(shardedJedis);
            e.printStackTrace();
        }
    }

    /**
     * 给key赋值,并生命周期设置为seconds
     *
     * @param key
     * @param seconds
     *            生命周期 秒为单位
     * @param value
     */
    public void setex(String key, int seconds, String value) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            shardedJedis.setex(key, seconds, value);
            shardedJedisPool.returnResource(shardedJedis);
        } catch (Exception e) {
            if (shardedJedis != null)
                shardedJedisPool.returnBrokenResource(shardedJedis);
            e.printStackTrace();
        }
    }

    /**
     * 为给定key设置生命周期
     *
     * @param key
     * @param seconds
     *            生命周期 秒为单位
     */
    public void expire(String key, int seconds) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            shardedJedis.expire(key, seconds);
            shardedJedisPool.returnResource(shardedJedis);
        } catch (Exception e) {
            if (shardedJedis != null)
                shardedJedisPool.returnBrokenResource(shardedJedis);
            e.printStackTrace();
        }
    }

    /**
     * 检查key是否存在
     *
     * @param key
     * @return
     */
    public boolean exists(String key) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            boolean bool = shardedJedis.exists(key);
            shardedJedisPool.returnResource(shardedJedis);
            return bool;
        } catch (Exception e) {
            if (shardedJedis != null) {
                shardedJedisPool.returnBrokenResource(shardedJedis);
            }
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 返回key值的类型 none(key不存在),string(字符串),list(列表),set(集合),zset(有序集),hash(哈希表)
     *
     * @param key
     * @return
     */
    public String type(String key) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            String type = shardedJedis.type(key);
            shardedJedisPool.returnResource(shardedJedis);
            return type;
        } catch (Exception e) {
            if (shardedJedis != null) {
                shardedJedisPool.returnBrokenResource(shardedJedis);
            }
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 从哈希表key中获取field的value
     *
     * @param key
     * @param field
     */
    public String hget(String key, String field) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            String value = shardedJedis.hget(key, field);
            shardedJedisPool.returnResource(shardedJedis);
            return value;
        } catch (Exception e) {
            if (shardedJedis != null) {
                shardedJedisPool.returnBrokenResource(shardedJedis);
            }
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 返回哈希表key中,所有的域和值
     *
     * @param key
     * @return
     */
    public Map<String, String> hgetAll(String key) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            Map<String, String> map = shardedJedis.hgetAll(key);
            shardedJedisPool.returnResource(shardedJedis);
            return map;
        } catch (Exception e) {
            if (shardedJedis != null) {
                shardedJedisPool.returnBrokenResource(shardedJedis);
            }
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 返回哈希表key中,所有的域和值
     *
     * @param key
     * @return
     */
    public Set<?> smembers(String key) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            Set<?> set = shardedJedis.smembers(key);
            shardedJedisPool.returnResource(shardedJedis);
            return set;
        } catch (Exception e) {
            if (shardedJedis != null) {
                shardedJedisPool.returnBrokenResource(shardedJedis);
            }
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 移除集合中的member元素
     *
     * @param key
     *            List别名
     * @param field
     *            键
     */
    public void delSetObj(String key, String field) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            shardedJedis.srem(key, field);
            shardedJedisPool.returnResource(shardedJedis);
        } catch (Exception e) {
            if (shardedJedis != null) {
                shardedJedisPool.returnBrokenResource(shardedJedis);
                e.printStackTrace();
            }
        }
    }

    /**
     * 判断member元素是否是集合key的成员。是(true),否则(false)
     *
     * @param key
     * @param field
     * @return
     */
    public boolean isNotField(String key, String field) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            boolean bool = shardedJedis.sismember(key, field);
            shardedJedisPool.returnResource(shardedJedis);
            return bool;
        } catch (Exception e) {
            if (shardedJedis != null) {
                shardedJedisPool.returnBrokenResource(shardedJedis);
            }
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 如果key已经存在并且是一个字符串,将value追加到key原来的值之后
     *
     * @param key
     * @param value
     */
    public void append(String key, String value) {
        try {
            shardedJedis = shardedJedisPool.getResource();
            shardedJedis.append(key, value);
            shardedJedisPool.returnResource(shardedJedis);
        } catch (Exception e) {
            if (shardedJedis != null) {
                shardedJedisPool.returnBrokenResource(shardedJedis);
            }
            e.printStackTrace();
        }
    }

    /**
     * 获取客户端连接
     *
     * @return
     */
    public static ShardedJedis getShardedJedis() {
        try {
            return shardedJedisPool.getResource();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 释放连接
     *
     * @param jedis
     */
    public static void returnResourceObject(ShardedJedisPool shardedJedisPool) {
        try {
            if (shardedJedisPool != null) {
                shardedJedisPool.returnResourceObject(shardedJedisPool);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 关闭 Redis
     */
    public void destory() {
        try {
            shardedJedisPool.destroy();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

 

 

 

package com.commons.redis.cache;

import java.io.File;
import java.io.InputStream;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Config {
    private static Log log = LogFactory.getLog(Config.class);
    private static Properties props = new Properties();

    private static String contextAbsoultePath = "";
    private static String contextPath = "";
    private static ServletContext context;
    private static InitialContext ic;

    static {
        InputStream in = Config.class.getResourceAsStream("/commons-pool.properties");
        try {
            if (in != null) {
                try {
                    props.load(in);
                    in.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public static String getProperty(String key) {
        return getProperty(key, "");
    }

   
    public static String getProperty(String key,String defaultValue) {
        return props.getProperty(key, defaultValue);
    }


    public static String getPathProperty(String key) {
        String s = props.getProperty(key, "");
        s = s.replace('/', File.separator.charAt(0));
        return s;
    }


    public static String getContextAbsoultePath() {
        return contextAbsoultePath;
    }


    public static void setContextAbsoultePath(String contextAbsoultePath) {
        Config.contextAbsoultePath = contextAbsoultePath;
    }


    public static String getContextPath() {
        return contextPath;
    }


    public static void setContextPath(String contextPath) {
        Config.contextPath = contextPath;
    }

    public static void setContext(ServletContext ctx) {
        context = ctx;
    }

    public static ServletContext getContext() {
        return context;
    }

    public static InitialContext getInitialContext() {
        try {
            if (ic == null) {
                Properties p = new Properties();
                p.put(
                    Context.INITIAL_CONTEXT_FACTORY,
                    getProperty("jndi.InitialContextFactory"));
                p.put(Context.PROVIDER_URL, getProperty("jndi.ProviderURL"));

                ic = new InitialContext(p);
            }
        } catch (Exception ne) {
            log.fatal(ne);
        }

        return ic;
    }
}

 

 

commons-pool.properties:

#最大分配的对象数 
redis.pool.maxActive=5000

#最大能够保持idel状态的对象数 
redis.pool.maxIdle=5000

#当池内没有返回对象时,最大等待时间 
redis.pool.maxWait=10000

#当调用borrow Object方法时,是否进行有效性检查 
redis.pool.testOnBorrow=true
 
#当调用return Object方法时,是否进行有效性检查 
redis.pool.testOnReturn=true


#address[ip地址:端口号:密码]多个以英文逗号分开
redis.address=127.0.0.1:6379:rayping88

package com.commons.redis.cache;

public class RedisTest {
    public static void main(String[] args) {
        RedisManager redisManager =new RedisManager();
        redisManager.set("ray", "redis 测试");
        System.out.println(redisManager.get("ray"));
    }

}

 

 

 

分享到:
评论

相关推荐

    tomcat-redis-session-manager-1.2-tomcat-7-java-7

    tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-...

    redis-windows-7.2.4.zip

    - 解压"redis-windows-7.2.4.zip",找到`redis-server.exe`启动文件。 - 运行`redis-server.exe`,默认情况下,Redis监听6379端口。 - 可以通过配置文件`redis.windows.conf`修改默认设置,如端口、内存限制、...

    redis安装文件Redis-x64-3.2.10、Redis-x64-3.0.50

    Redis是一种高性能的键值对数据存储系统,常用于数据库、缓存和消息中间件等场景。Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合,以及更复杂的Geo空间索引等,使其在许多应用中具有广泛的应用性。 ...

    Redis-x64-3.2.100.zip

    - 使用`redis-benchmark`进行性能测试,找出瓶颈并优化。 综上所述,这个压缩包提供了在Windows环境下运行Redis所需的基本组件和文档,帮助用户在非Linux系统上搭建和管理Redis服务。通过正确配置和使用这些文件,...

    redis-copy, 将一个redis数据库复制到另一个数据库.zip

    redis-copy, 将一个redis数据库复制到另一个数据库 RedisCopy这个工具提供了一种将一个redis数据库的内容移动到另一个redis数据库的方法。 代码是由包含在redis源代码中的 redis-copy.rb 脚本插件激发的,但目标是...

    Windows版本Redis-x64-5.0.14安装包

    2. **redis-benchmark.exe**:这是一个性能测试工具,可以用来测量Redis服务器的读写速度。 3. **redis-cli.pdb**:客户端命令行界面的调试信息文件。 4. **redis-check-aof.pdb**:用于检查Append Only File(AOF)...

    django-redis-sessions, 在Redis数据库中,用于存储会话的Django 会话后端.zip

    django-redis-sessions, 在Redis数据库中,用于存储会话的Django 会话后端 django-redis-sessions用于你的会话的Redis数据库后端 安装工具可用设置变更日志文件安装运行 pip install django-redis-sessions 或者另外...

    Redis-x64-5.0.14 windows

    Redis的核心概念包括键(key)、值(value)和数据类型。键是用于标识存储内容的唯一标识符,值则是键所关联的数据。Redis支持多种数据类型,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序...

    redis-64.3.0.503

    - **redis-benchmark**:性能测试工具,可以用来测量Redis的吞吐量和延迟。 - **redis-check-aof**和**redis-check-rdb**:用于检查和修复AOF文件和RDB文件的工具。 - **其他库文件和文档**:可能包含必要的库文件...

    Redis-windows可直接运行文件

    4. `redis-benchmark.exe`:性能测试工具,用于测试Redis服务器的读写速度和并发能力,是评估Redis性能的重要手段。 5. `redis-check-dump.exe`:用于检查RDB持久化文件的工具,确保数据的完整性和一致性。 6. `...

    redis-windows-redis7.0.5.zip

    描述中提到“Redis是一个高性能的key-value数据库”,这是对Redis核心功能的简洁概述。作为键值数据库,Redis通过键(key)来唯一标识每个数据项,并允许快速查找和操作对应的值(value)。其高性能主要来源于以下几...

    redis-windows-7.2.5.zip

    在Windows环境下安装Redis,可以借助于提供的压缩包"redis-windows-7.2.5.zip"进行。以下是关于Redis及其在Windows上的安装和使用的详细知识: 1. **Redis特性** - **键值对存储**:Redis的核心是键值对模型,其中...

    tomcat-redis-session-manager jar包

    【标题】"tomcat-redis-session-manager jar包"是一个用于集成Redis进行Session管理的Java库,特别设计用于Apache Tomcat服务器。这个库使得在多台Tomcat服务器之间共享和协调用户的Session数据成为可能,从而提高了...

    redis-windows-7.0.2.zip

    4. **其他辅助工具**:可能还包括一些诊断或管理工具,如`redis-benchmark.exe`用于性能测试,`redis-check-aof.exe`和`redis-check-dump.exe`用于检查和修复数据文件。 在Windows环境下安装Redis,首先解压"redis-...

    redis-py-master.zip

    在实际开发中,可以通过阅读`redis-py-master`源代码了解其实现细节,更好地理解和优化使用Redis的方式,提升应用性能。此外,持续关注Redis的更新和`redis-py`的版本升级,以利用最新的特性和改进。

    Redis-x64-3.0.504.msi.zip

    - 通过`SET key value`和`GET key`命令,可以测试Redis的基本功能。 - 为了在生产环境中使用,还需要了解如何与其他应用程序集成,例如通过连接池和适配器与编程语言如Java、Python或C#通信。 6. **管理和监控...

    Redis-x64-5.0.14.1软件安装包

    Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object...

    Redis-x64-3.2.100压缩包及使用说明.rar

    Redis是一种高性能的键值对数据存储系统,常用于数据库、缓存和消息中间件等场景。Redis-x64-3.2.100是针对64位Windows平台的Redis服务器的一个具体版本,该版本提供了稳定性和兼容性的保证。本文将详细介绍如何安装...

    Redis-x64-3.2.100-稳定版.rar

    例如,`SET key value` 用于设置键值对,`GET key` 用于获取键对应的值,`LPUSH key value` 将值推入列表头部,`SADD set member` 将成员添加到集合中。 7. **持久化**:Redis 提供两种持久化方式,RDB(快照)和 ...

Global site tag (gtag.js) - Google Analytics