安装部署步骤
1. 准备工作:
将下载好的redis-3.2.2.tar.gz上传到linux服务器 /lamp,进行解压解压
tar -zxvf redis-3.2.2.tar.gz
网址:http://download.redis.io/releases/redis-3.2.2.tar.gz
2. 进行编译:
cd redis-3.2.2
make
make这一步可能会报错,如果报错,可以尝试使用如下命令来编译:
make MALLOC=libc
( 注意:make指令是需要linux下安装gcc的 如果没有gcc可以尝试安装
yum -y install gcc )
编译好的二进制文件会放到src/目录下,可以看到有redis-server和redis-cli,这是redis的服务端和客户端,我们到时候可以直接运行这两个文件即可启动服务端和客户端
3. 创建目录移动文件、便于管理:
mkdir –p /usr/local/redis/bin 放命令
mkdir –p /usr/local/redis/etc放配置文件
然后将上面src目录下的命令和配置文件分别移动到对应的目录
mv /lamp/redis-3.2.2/redis.conf /usr/local/redis/etc
cd /lamp/redis-3.2.2/src
mv mkreleasdhdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin
4. 启动redis服务:
进入到/usr/local/redis/bin目录下,执行
./redis-server /usr/local/redis/etc/redis.conf
这是根据配置文件redis.conf来启动redis服务,但是默认是前台启动的,会占用我的session,如果想要后台启动redis,还需要修改一下redis.conf的配置,打开该配置文件:
vi /usr/local/redis/etc/redis.conf
然后将daemonize no改为yes,然后再启动一下redis服务就可以后台启动了,然后我们可以查看一下是否启动成功:
ps -ef | grep redis 查看是否启动成功
netstat -tunpl | grep 6379 查看该端口有没有占用
5. 启动redis客户端:(在redis.conf 中增加 requirepass = ylx (密码))
redis客户端命令也在bin目录下,是redis-cli文件,运行一下即可启动redis客户端:
./redis-cli -a ylx
随便往里面插入一个name为test测试一下,可以正常获取,说明客户端没有问题。
set name test
get name
退出客户端的话直接quit即可。
6. 关闭redis服务:
关闭redis服务的话直接使用如下命令即可:
pkill redis-server
java调用工具类
配置文件 application.properties
#redis
redis.ip=192.168.203.13
redis.auth=ylx
redis.port=6379
redis.timeout=10000
redis.MaxTotal=200
redis.MaxIdle=200
redis.MinIdle=0
redis.MaxWaitMillis=-1
redis_list_len=100000
1. 加载redis配置文件
package com.eversec.pierce.redis;
import com.eversec.pierce.util.PropertiesLoader;
public class RedisConfig {
/**
* 加载redis配置文件
*/
private static PropertiesLoader propertiesLoader = null;
static{
propertiesLoader = new PropertiesLoader("application.properties");
String active=propertiesLoader.getProperty("spring.profiles.active");
propertiesLoader = new PropertiesLoader("application-"+active+".properties");
}
public static String getRedisConfig(String key){
return propertiesLoader.getProperty(key);
}
}
2. 维护redis连接池资源
package com.eversec.pierce.redis;
import java.io.Serializable;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* 维护redis连接池资源
* @author root
*
*/
public class RedisResources {
private static final Logger logger = LoggerFactory.getLogger(RedisResources.class);
private static String IP = RedisConfig.getRedisConfig("redis.ip");// 连接地址
private static String AUTH = RedisConfig.getRedisConfig("redis.auth");// 认证信息
private static int PORT = Integer.parseInt(RedisConfig.getRedisConfig("redis.port"));
private static int TIMEOUT = Integer.parseInt(RedisConfig.getRedisConfig("redis.timeout"));// 超时时间
private static int MaxTotal = Integer.parseInt(RedisConfig.getRedisConfig("redis.MaxTotal"));
private static int MaxIdle = Integer.parseInt(RedisConfig.getRedisConfig("redis.MaxIdle"));
private static int MinIdle = Integer.parseInt(RedisConfig.getRedisConfig("redis.MinIdle"));
private static int MaxWaitMillis = Integer.parseInt(RedisConfig.getRedisConfig("redis.MaxWaitMillis"));
private static JedisPool jedisPool = null;
/**
* 加载redis连接池
*/
static {
init();
}
private static void init(){
JedisPoolConfig config = new JedisPoolConfig();
//config.setMaxWaitMillis(MAX_WAIT);
//config.setMaxTotal(MAX_ACTIVE);
//config.setMinIdle(MIN_IDLE);
//config.setTestOnBorrow(TEST_ON_BORROW);
//-------------------------------------------------
config.setMaxTotal(MaxTotal);
config.setMaxIdle(MaxIdle);
config.setMinIdle(MinIdle);//设置最小空闲数
config.setMaxWaitMillis(MaxWaitMillis);
//config.setTestOnBorrow(TestOnBorrow);
//config.setTestOnReturn(TestOnReturn);
//Idle时进行连接扫描
//config.setTestWhileIdle(TestWhileIdle);
//表示idle object evitor两次扫描之间要sleep的毫秒数
//config.setTimeBetweenEvictionRunsMillis(TimeBetweenEvictionRunsMillis);
//表示idle object evitor每次扫描的最多的对象数
//config.setNumTestsPerEvictionRun(NumTestsPerEvictionRun);
//表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义
//config.setMinEvictableIdleTimeMillis(MinEvictableIdleTimeMillis);
jedisPool = new JedisPool(config,IP,PORT,TIMEOUT,AUTH);
}
/**
* 从连接池里获取redis连接
* @return
*/
public static Jedis getResources(){
int i=0;
Jedis jedis=null;
while(true){
try{
jedis=jedisPool.getResource();
}catch(Exception e){
init();
jedis=jedisPool.getResource();
logger.error("Redis连接失败,第"+i+"次连接");
}
if(jedis != null){
return jedis;
}
}
}
}
3. redis使用工具类
package com.eversec.pierce.redis;
import java.io.Serializable;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.eversec.pierce.config.Global;
import redis.clients.jedis.Jedis;
/**
* redis使用工具类
* @author root
*
*/
public class RedisTemplate<T extends Serializable> {
private static final Logger logger = LoggerFactory.getLogger(RedisTemplate.class);
/**
* 保存字符串
* @param key
* @param value
*/
public void setStr(String key,String value)throws Exception{
Jedis jedis = null;
try{
jedis = RedisResources.getResources();
jedis.set(key, value);
}catch(Exception e){
logger.error("Redis工具类异常",e);
throw new Exception(e);
}finally{
if (jedis != null) {
jedis.close();
}
}
}
/**
* 获取字符串值
* @param key
* @return
*/
public String getStr(String key) throws Exception{
Jedis jedis = null;
String value=null;
try{
jedis = RedisResources.getResources();
value = jedis.get(key);
}catch(Exception e){
logger.error("Redis工具类异常",e);
throw new Exception(e);
}finally{
if (jedis != null) {
jedis.close();
}
}
return value;
}
/**
* 保存List
* @param key
* @param t
*/
public <T extends Serializable > long setList(String key,String value) throws Exception{
Jedis jedis = null;
try {
jedis = RedisResources.getResources();
long lag=jedis.rpush(key, value);
return lag;
} catch (Exception e) {
logger.error("Redis工具类异常",e);
throw new Exception(e);
}finally{
if (jedis != null) {
jedis.close();
}
}
}
/**
* 获取List
*/
public <T extends Serializable> List<T> getList(String key)throws Exception{
Jedis jedis = null;
List<T> t = null;
try{
jedis = RedisResources.getResources();
int len_end = Integer.parseInt(Global.getConfig("redis_list_len"));
t=(List<T>) jedis.lrange(key,0,len_end);//返回List集合
}catch(Exception e){
logger.error("Redis工具类异常",e);
throw new Exception(e);
}finally{
if (jedis != null) {
jedis.close();
}
}
return t;
}
/**
* 清空List
*/
public <T extends Serializable> void delList(String key)throws Exception{
Jedis jedis = null;
try{
jedis = RedisResources.getResources();
jedis.del(key);
}catch(Exception e){
logger.error("Redis工具类异常",e);
throw new Exception(e);
}finally{
if (jedis != null) {
jedis.close();
}
}
}
/**
* 移除List中的元素
*/
public <T extends Serializable> void removeList(String key,Long index) throws Exception{
Jedis jedis = null;
try{
jedis = RedisResources.getResources();
//ltrim: ltrim mylist 1 -1 //保留mylist中 1到末尾的值,即删除第一个值。
jedis.ltrim(key, index, -1);
}catch(Exception e){
logger.error("Redis工具类异常",e);
throw new Exception(e);
}finally{
if (jedis != null) {
jedis.close();
}
}
}
}
以上是本人自己总结,并且在项目总实际运用操作的。新手一枚,不喜勿喷!(接下来的文章中会有 redis集群版的安装部署以及java调用工具类)