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参考网址
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。