欢迎投稿

今日深度:

linux下的redis安装及Jedis应用,redisjedis

linux下的redis安装及Jedis应用,redisjedis


Redis

  • Redis
    • 下载redis,解压redis
    • 单机Redis安装
    • #不自定义redis的配置文件下的安装
      • 自定义redis的配置文件下的安装
    • 集群Redis安装
    • Jedis的使用

下载redis,解压redis

  • redis官网: http://www.redis.cn/
  • 解压命令: tar -zxvf 文件名

单机Redis安装

#不自定义redis的配置文件下的安装

# 进入redis文件目录
cd redis-4.0.9
# 安装c环境
apt-get install gcc
# 编译redis
make
# 安装redis
make install PREFIX=/usr/local/redis
# 进入redis的安装目录下的bin
cd /usr/local/redis/bin
# 启动redis
./redis-server

自定义redis的配置文件下的安装

  • 安装redis之前的步骤一样
  • 复制配置文件
# 将配置文件复制到 /usr/local/redis/conf下
mkdir /usr/local/redis/conf
cp redis-4.0.9/redis.conf /usr/local/redis/conf
  • 根据自己的需求修改配置文件(根据自己需求来,下面是文件中的默认设置)
vim redis.conf

bind=127.0.0.1
port=6379
dir=./
  • 启动redis
/usr/local/redis/bin/redis.server /usr/local/redis/conf/redis.conf 

集群Redis安装

  • 集群安装最少3台服务器,为保持redis的高可用,有设置3台从机;达成一主一从;
  • 模拟集群: 可以在同一台服务器,设置6个不同端口的redis服务
  • 复制6个redis.conf
cp redis.conf /usr/local/redis/conf/redis-7000.conf
cp redis.conf /usr/local/redis/conf/redis-7001.conf
cp redis.conf /usr/local/redis/conf/redis-7002.conf
cp redis.conf /usr/local/redis/conf/redis-7003.conf
cp redis.conf /usr/local/redis/conf/redis-7004.conf
cp redis.conf /usr/local/redis/conf/redis-7005.conf
  • 进入配置文件
vim redis-7000.conf
  • 修改配置文件(所有的都要改:)
# 一定要换成当前的ip地址,不可用127.0.0.1(本机环回地址)因为Jedis调用时会出错
bind 192.168.121.139

# 改成自己设置的端口
port 7000

daemonize yes

# 设置pidfile路径
pidfile /var/run/redis_7000.pid

# 数据文件路径(可以不设置)
dir ../../clusterRedis/dump

cluster-config-file nodes-7000.conf

#是否是集群
cluster-enabled yes
  • 开启redis服务
/usr/local/redis/bin/redis.server /usr/local/redis/conf/redis-7000.conf 
/usr/local/redis/bin/redis.server /usr/local/redis/conf/redis-7001.conf 
/usr/local/redis/bin/redis.server /usr/local/redis/conf/redis-7002.conf 
/usr/local/redis/bin/redis.server /usr/local/redis/conf/redis-7003.conf 
/usr/local/redis/bin/redis.server /usr/local/redis/conf/redis-7004.conf 
/usr/local/redis/bin/redis.server /usr/local/redis/conf/redis-7005.conf 
  • 查看redis状态
ps -ef | grep redis
  • 安装Ruby
apt-get install ruby

apt-get install rubygems

gem install redis
  • 将redis-4.0.9下的src目录下的redis-trib.rb,拷到安装目录
cp ./redis-4.0.9/src/redis-trib.rb /usr/local/redis/bin/
  • 创建集群
cd /usr/local/redis/bin/
./redis-trib.rb create --replicas 1 192.168.121.139:7000 192.168.121.139:7001 192.168.121.139:7002 192.168.121.139:7003 192.168.121.139:7004  192.168.121.139:7005

Jedis的使用

public class JedisClusterTest {
    private static JedisCluster jedisCluster;

    static {
        //集群服务节点的set集合
        Set<HostAndPort> set = new HashSet<>();
        HostAndPort hp0 = new HostAndPort("192.168.121.139", 7000);
        HostAndPort hp1 = new HostAndPort("192.168.121.139", 7001);
        HostAndPort hp2 = new HostAndPort("192.168.121.139", 7002);
        HostAndPort hp3 = new HostAndPort("192.168.121.139", 7003);
        HostAndPort hp4 = new HostAndPort("192.168.121.139", 7004);
        HostAndPort hp5 = new HostAndPort("192.168.121.139", 7005);
        set.add(hp0);
        set.add(hp1);
        set.add(hp2);
        set.add(hp3);
        set.add(hp4);
        set.add(hp5);

        //jedis连接池
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //连接超时时是否阻塞, true阻塞直到超时, false报异常, 默认为true
        jedisPoolConfig.setBlockWhenExhausted(true);

        //逐出策略(默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数))
        jedisPoolConfig.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");

        //每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
        jedisPoolConfig.setNumTestsPerEvictionRun(3);

        //对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数 时直接逐出,不再根据MinEvictableIdleTimeMillis判断  (默认逐出策略)
        jedisPoolConfig.setSoftMinEvictableIdleTimeMillis(1800000);

        //最大空闲连接数,默认8
        jedisPoolConfig.setMaxIdle(100);

        //最大连接数,默认8
        jedisPoolConfig.setMaxTotal(200);

        //最小空闲连接数,默认0
        jedisPoolConfig.setMinIdle(0);

        //获取连接时的最大等待时间,超时抛出异常,小于0:阻塞不确定时间,默认-1
        jedisPoolConfig.setMaxWaitMillis(2000);

        //对拿到的connection进行validateObject校验
        jedisPoolConfig.setTestOnBorrow(true);

        //在进行returnObject对返回的connection进行validateObject校验
        jedisPoolConfig.setTestOnReturn(true);

        //定时对线程池中空闲的链接进行validateObject校验
        jedisPoolConfig.setTestWhileIdle(true);

        jedisCluster = new JedisCluster(set, jedisPoolConfig);
    }

    /**
     * 一些操作的测试
     * flushDB和flushAll不能再用了
     * 集群中flushDb 和 keys 废弃
     */
    @Test
    public void commonTest() throws InterruptedException {
        //判断某个key是否存在, 返回boolean值
        System.out.println("判断某个key是否存在:" + jedisCluster.exists("key1"));

        //设置key的过期时间,60s,返回Long, 成功返回1,失败返回0
        System.out.println("设置key的过期时间:" +
                jedisCluster.expire("key1", 60));


        //查看key的剩余的过期时间,返回Long
        System.out.println("查看key的剩余的过期时间" +
                jedisCluster.ttl("key1"));

        //移除key的过期时间,返回Long,成功返回1,失败返回0
        System.out.println("移除key的过期时间" +
                jedisCluster.persist("key1"));

        //查看key的保存类型,返回String; 'string': String型
        System.out.println("查看key的保存类型:" +
                jedisCluster.type("key1"));
    }

    /**
     * String的操作
     */
    @Test
    public void strTest() {
        //增加数据, 如果key已经存在name就更新数据,成功返回OK
        System.out.println("保存数据" +
                jedisCluster.set("key1", "value1"));
        jedisCluster.set("key2", "value2");

        //删除键, 成功返回1, 失败返回0
        System.out.println("删除键 :" +
                jedisCluster.del("key1"));

        //在键的值之后增加值, 键存在返回总长度,键不存在返回添加的字符串的长度
        System.out.println("在键的值之后添加字符串" +
                jedisCluster.append("key2", "append"));

        //获取键的值
        System.out.println("获取键的值:" +
                jedisCluster.get("key2"));

        //新增数据但是不覆盖原先的值,成功返回1, 失败返回0, 键存在,添加就失败
        System.out.println("增加数据,但不覆盖原先值:" +
                jedisCluster.setnx("key3", "aaaaa"));

        //增加数据,并设置过期时间, 成功返回OK
        System.out.println("增加数据,并设置过期时间,且会覆盖原先值" +
                jedisCluster.setex("key3", 60, "values3"));


        //获取原先的值,更新新值; 返回原先的值
        System.out.println("获取原先的值,并更新为新值" +
                jedisCluster.getSet("key4", "tessss"));
    }

    /**
     * Hash的操作
     */
    @Test
    public void hashTest() {
        Map<String, String> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        map.put("key4", "value4");
        //直接存储Hash, 成功返回OK
        System.out.println("存储hash" +
                jedisCluster.hmset("hash", map));

        //存储Hash, 以EntrySet存储, 成功返回1
        System.out.println("存储hash" +
                jedisCluster.hset("hash", "key5", "value5"));

        //获取hash的所有的键值, 返回值为Map
        System.out.println("获取hash的所有的键值" +
                jedisCluster.hgetAll("hash"));

        //获取hash的所有的键, 返回值为数组
        System.out.println("获取hash的所有的键" +
                jedisCluster.hkeys("hash"));

        //获取hash的所有的值, 返回为数组
        System.out.println("获取hash的所有的值" +
                jedisCluster.hvals("hash"));

        //在键的值上加上整数, 如果不存在就添加键值,返回加上的值
        System.out.println("在键的值上加上整数" +
                jedisCluster.hincrBy("hash", "key6", 6));

        //删除一个或者多个键值对, 返回删除的个数
        System.out.println("删除一个或者多个键值对:" +
                jedisCluster.hdel("hash", new String[]{"key5", "key6"}));

        //获取hash中键值对的个数, 返回长度
        System.out.println("获取hash中键值对的个数:" +
                jedisCluster.hlen("hash"));

        //判断hash中是否存在某键, 存在返回true
        System.out.println("判断hash中是否存在key2:" +
                jedisCluster.hexists("hash", "key2"));

        //获取hash中的一个或多个值, 返回数组
        System.out.println("获取hash中的值:" +
                jedisCluster.hmget("hash", "key1"));
    }
}

更全的Jedis操作
安装redis参考网址

www.htsjk.Com true http://www.htsjk.com/redis/24800.html NewsArticle linux下的redis安装及Jedis应用,redisjedis Redis Redis 下载redis,解压redis 单机Redis安装 #不自定义redis的配置文件下的安装 自定义redis的配置文件下的安装 集群Redis安装 Jedis的使用 下载redis,解...
相关文章
    暂无相关文章
评论暂时关闭