Redis单点安装(Linux版本)

之前写的两篇关于redis的文章,都没有解释redis是什么,今天在这里简单的说一下。

一、redis的介绍(借鉴百度的解释)

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
    Redis是一个key-value存储系统。存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集、并集和差集以及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步(在后边我会给出redis配置主从同步的步骤)。
    Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
    Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
二、Linux系统下redis的安装
1、安装包:
redis-4.0.6.tar.gz
2、解压到指定目录:
tar -zxvf /tmp/redis-4.0.6.tar.gz -C /usr/local/
3、安装:
cd /usr/local/redis-4.0.6/
make && make install

安装出现如下错误:


注意:make指令是需要linux下安装gcc的 如果没有gcc可以尝试安装
yum -y install gcc
安装gcc之后问题解决
4、redis测试:
开启服务:src/redis-server

连接测试:src/redis-cli

注意:远程连接redis的时候,需要修改配置文件redis.conf

启动的时候需要指定配置文件:src/redis-server redis.conf 这样才能生效

5、连接reids的代码:

public class RedisPool {
    private static JedisPool pool;
    private static final Log logger = LogFactory.getLog(RedisPool.class);

    // 静态代码初始化池配置
    static {
        try {
            Properties props = new Properties();
            props.load(RedisPool.class.getClassLoader().getResourceAsStream("redis.properties"));
            // 创建jedis池配置实例
            JedisPoolConfig config = new JedisPoolConfig();
            // 设置池配置项值
            config.setMaxIdle(Integer.valueOf(props.getProperty("jedis.pool.maxIdle")));
            config.setTestOnBorrow(Boolean.valueOf(props.getProperty("jedis.pool.testOnBorrow")));
            config.setTestOnReturn(Boolean.valueOf(props.getProperty("jedis.pool.testOnReturn")));
            // 根据配置实例化jedis            pool = new JedisPool(config, props.getProperty("redis.ip"), Integer.valueOf(props.getProperty("redis.port")));
            System.out.println("redis池配置成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /** 获得jedis对象 */  public static Jedis getJedisObject() {
        return pool.getResource();
    }
    /** 归还jedis对象 */  public static void recycleJedisOjbect(Jedis jedis) {
        pool.returnResource(jedis);
    }

    private static final Jedis jedis = getJedisObject();
    /**  * 传入参数key,基站ID  * @param key  * @return  */  public List<String> getList(String key){
        List<String> list = new ArrayList<String>();

        HashSet<String> set = new HashSet(jedis.smembers(key));
        Iterator<String> it=set.iterator() ;
        while(it.hasNext()){
            String str=it.next();
            list.add(str);
        }
        return list;
    }

    /**  * 获取目标用户的号码  * @param key  * @return  */  public List getHashList(String key){
        List<String> list = new ArrayList<String>();

        HashSet<String> set = new HashSet<String>(jedis.hkeys(key));
        Iterator<String> it = set.iterator() ;
        while(it.hasNext()){
            String keyStr = it.next();
            String value = jedis.hget(key, keyStr);
            list.add(keyStr + " " + value);
        }
        return list;
    }

    /**  * 更新redis的数据  * @param hkey  * @param key  * @param value  */  public void update(String hkey, String key, String value){
        jedis.hset(hkey, key, value);
        jedis.save();
    }

    /**  * 删除一条记录  * @param hkey  * @param key  */  public void delete(String hkey, String key){
        jedis.hdel(hkey, key);
    }

    /**  * 根据key获取value的值  * @param hkey  * @param key  * @return  */  public String getValue(String hkey, String key){
        return jedis.hget(hkey, key);
    }

    /**  * 根据key判断时候存在  * @param hkey  * @param key  * @return  */  public Boolean isExists(String hkey, String key){
        return jedis.hexists(hkey, key);
    }

    public static void main(String[] args) {
        RedisPool redisPool = new RedisPool();
       // jedis.flushDB();
        System.out.println(redisPool.getHashList("activityInfo"));
        System.out.println(redisPool.getHashList("41132_user"));
        System.out.println(redisPool.getHashList("41132_lac"));
        System.out.println(redisPool.getHashList("41132_state"));
        System.out.println(redisPool.getHashList("resultUser"));
    }
}
配置文件:
#*****************jedis连接参数设置*********************#

#redis服务器ip #   

#redis.ip=127.0.0.1
redis.ip=134.192.68.84
#54.193.34.159
#redis159.dwnews.net

#redis服务器端口号#
#redis.port=6379
redis.port=2181

#************************jedis池参数设置*******************#  

#redis超时时间
redis.timeOut=30000

#jedis的最大分配对象#
jedis.pool.maxActive=3000

#jedis最大保存idel状态对象数 #
jedis.pool.maxIdle=300

#jedis池没有对象返回时,最大等待时间 #
jedis.pool.maxWait=1500

#jedis调用borrowObject方法时,是否进行有效检查#
jedis.pool.testOnBorrow=true

#jedis调用returnObject方法时,是否进行有效检查 #
jedis.pool.testOnReturn=true
三、配置Redis主从服务器

步骤一:配置主从服务器设置1)修改主服务器/etc/redis/6379.conf配置文件    requirepass 123456 //设置服务器密码    修改主服务器的启动脚本 /etc/init.d/redis_6379    $CLIEXE –a 123456 –p $PEDISPORT shutdown2)修改从服务器/etc/redis/6379.conf配置文件    slaveof 192.168.4.10 6379 //从服务器的ip和端口号,主动同步主服务器的数据    masterauth redis123 //主从认证的密码    requirepass 123456 //设置服务器密码    修改从服务器的启动脚本 /etc/init.d/redis_6379    $CLIEXE –a 123456 –p $PEDISPORT shutdown