Redis
下载redis,解压redis
单机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的配置文件下的安装
# 将配置文件复制到 /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=./
/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
/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
ps -ef | grep redis
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<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);
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setBlockWhenExhausted(true);
jedisPoolConfig.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
jedisPoolConfig.setNumTestsPerEvictionRun(3);
jedisPoolConfig.setSoftMinEvictableIdleTimeMillis(1800000);
jedisPoolConfig.setMaxIdle(100);
jedisPoolConfig.setMaxTotal(200);
jedisPoolConfig.setMinIdle(0);
jedisPoolConfig.setMaxWaitMillis(2000);
jedisPoolConfig.setTestOnBorrow(true);
jedisPoolConfig.setTestOnReturn(true);
jedisPoolConfig.setTestWhileIdle(true);
jedisCluster = new JedisCluster(set, jedisPoolConfig);
}
/**
* 一些操作的测试
* flushDB和flushAll不能再用了
* 集群中flushDb 和 keys 废弃
*/
@Test
public void commonTest() throws InterruptedException {
System.out.println("判断某个key是否存在:" + jedisCluster.exists("key1"));
System.out.println("设置key的过期时间:" +
jedisCluster.expire("key1", 60));
System.out.println("查看key的剩余的过期时间" +
jedisCluster.ttl("key1"));
System.out.println("移除key的过期时间" +
jedisCluster.persist("key1"));
System.out.println("查看key的保存类型:" +
jedisCluster.type("key1"));
}
/**
* String的操作
*/
@Test
public void strTest() {
System.out.println("保存数据" +
jedisCluster.set("key1", "value1"));
jedisCluster.set("key2", "value2");
System.out.println("删除键 :" +
jedisCluster.del("key1"));
System.out.println("在键的值之后添加字符串" +
jedisCluster.append("key2", "append"));
System.out.println("获取键的值:" +
jedisCluster.get("key2"));
System.out.println("增加数据,但不覆盖原先值:" +
jedisCluster.setnx("key3", "aaaaa"));
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");
System.out.println("存储hash" +
jedisCluster.hmset("hash", map));
System.out.println("存储hash" +
jedisCluster.hset("hash", "key5", "value5"));
System.out.println("获取hash的所有的键值" +
jedisCluster.hgetAll("hash"));
System.out.println("获取hash的所有的键" +
jedisCluster.hkeys("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"}));
System.out.println("获取hash中键值对的个数:" +
jedisCluster.hlen("hash"));
System.out.println("判断hash中是否存在key2:" +
jedisCluster.hexists("hash", "key2"));
System.out.println("获取hash中的值:" +
jedisCluster.hmget("hash", "key1"));
}
}
更全的Jedis操作
安装redis参考网址