Centos7 安装 Redis5
网络上详细安装过程很多,这里不详细介绍。这里简要列出安装Redis核心内容
下载官方包并安装,命令汇总如下:
wget http://download.redis.io/releases/redis-5.0.4.tar.gz
tar xzf redis-5.0.4.tar.gz
cd redis-5.0.4
make
make install
安装完成可执行文件所在目录:
cd /usr/local/bin
直接启动Redis(关闭窗口也可以使用):
redis-server
停止Redis:
redis-cli SHUTDOWN
复制Redis默认配置文件(redis解压目录/utils/)到/etc/init.d中:
cp redis_init_script /etc/init.d/redis_6379
然后修改脚本第14行的REDISPORT变量的值为同样的端口号:
vim redis_6379
然后修改脚本加入如下所示的红色授权信息(密码停止服务):
vim redis_6379
$CLIEXEC -a "你的密码" -p $REDISPORT shutdown
建立文件夹存放Redis的配置文件:
/etc/redis
建立文件夹存放Redis持久化文件:
/var/redis/6379
复制模板(redis-5.0.4/redis.conf)到/etc/redis目录中,以端口号命名(如“6379.conf”):
cp redis.conf /etc/redis/6379.conf
修改/etc/redis/6379.conf配置文件的值:
daemonize=yes 说明:使Redis以守护进程模式运行
pidfile=/var/run/redis_6379.pid 说明:设置Redis的PID文件位置
port=6379 说明:设置Redis监听的端口号
dir=/var/redis/6379 说明:设置持久化文件存放位置
requirepass password 说明:连接Redis的密码,在使用redis desktop工具连接redis时需要这个密码
现在也可以使用下面的命令来启动和关闭Redis了
/etc/init.d/redis_6379 start
/etc/init.d/redis_6379 stop
Centos本地连接Redis测试:
/usr/local/bin/redis-cli
auth yun19830206
set name chengyun22
get name
Windows环境安装redis-desktop-manager,连接Redis查看Redis缓存中的数据
SpringBoot2集成Redis并做缓存存取
首先引用Pom依赖(注意spring-boot-starter-redis是SpringBoot1使用的,别乱了)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
在SpringBoot配置文件增加如下配置内容
############Redis相关配置###########
# Redis数据库索引(默认为0)
# spring.redis.database=0
# Redis服务器地址
spring.redis.host=101.200.139.133
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=password
# 连接超时时间(毫秒)
spring.redis.timeout=1000
创建RedisCacheImpl类,用于与Redis做缓存取出存入动作
public class RedisCacheImpl implements ICacheInterface {
@Autowired
private StringRedisTemplate redisTemplate ;
/**
* 将Key、Value放入缓存
* @param key 缓存的key,规范为:域:资源:业务
* @param value 缓存的对象
* @param timeOutSeconds 缓存多少秒
* @param <T> 泛型
*/
@Override
public <T> void setValue(String key, T value, long timeOutSeconds) {
if(null == key || key.length()<1 || null == value ){
return ;
}
String valueJson = JSONObject.toJSONString(value);
redisTemplate.opsForValue().set(key,valueJson,timeOutSeconds, TimeUnit.SECONDS);
log.debug("Redis Cache Log: set <{},{}> into cache in {} seconds success.",key,value.getClass(),timeOutSeconds);
}
/**
* 根据Key来获得缓存值
* @param key 缓存的key,规范为:域:资源:业务
* @param clazz 返回数据类型
* @param <T> 泛型
* @return 返回值
*/
@Override
public <T> T getValue(String key, Class<T> clazz) {
if(null == key || key.length()<1 ){
return null ;
}
String stringValue = redisTemplate.opsForValue().get(key);
if(null == stringValue || stringValue.length()<1){
return null ;
}
T returnValue = JSONObject.parseObject(stringValue,clazz);
log.debug("Redis Cache Log: get {} from cache success, return{}.",key, returnValue.getClass());
return returnValue;
}
}
直接在需要使用缓存的类中Autowried RedisCacheImpl类,使用方法即可,示例如下
//1:缓存操作对象String:放入缓存,取缓存,成功
log.debug("###############");
String robotName = "Chat Robot Instance 1." ;
log.debug("放入缓存对象为:{}",robotName);
redisCache.setValue(CACHE_STRING_KEY,robotName,60*5);
robotName = redisCache.getValue(CACHE_STRING_KEY,String.class);
log.debug("取得缓存对象为:{}",robotName);
//2:缓存操作对象User:放入缓存,取缓存,成功
log.debug("###############");
User user = new User("张三",36) ;
log.debug("放入缓存对象为:{}",user);
redisCache.setValue(CACHE_OBJECT_KEY,user,60*5);
user = redisCache.getValue(CACHE_OBJECT_KEY,User.class);
log.debug("取得缓存对象为:{}",user);
//3:缓存操作对象User的List:放入缓存,取缓存,成功
log.debug("###############");
List<User> userList = new LinkedList<>();
userList.add(new User("张三",36));
userList.add(new User("李四",37));
userList.add(new User("王五",26));
log.debug("放入缓存对象为:{}",userList);
redisCache.setValue(CACHE_LIST_KEY,userList,60*5);
userList = redisCache.getValue(CACHE_LIST_KEY,List.class);
log.debug("取得缓存对象为:{}",userList);
//4:缓存操作对象User的Map:放入缓存,取缓存,成功
log.debug("###############");
Map<String,User> userMap = new HashMap<>();
userMap.put("张三",new User("张三",36));
userMap.put("李四",new User("李四",37));
userMap.put("王五",new User("王五",26));
log.debug("放入缓存对象为:{}",userMap);
redisCache.setValue(CACHE_MAP_KEY,userMap,60*5);
userMap = redisCache.getValue(CACHE_MAP_KEY,Map.class);
log.debug("取得缓存对象为:{}",userMap);
//5:两层对象封装:放入缓存,取缓存,成功(AjaxResponse为带泛型对象,里面有泛型属性 T data)
log.debug("###############");
User userAjax = new User("张三",36);
AjaxResponse<User> successUserAjax = AjaxResponse.success(userAjax, "创建成功");
log.debug("放入缓存对象为:{}",successUserAjax);
redisCache.setValue(CACHE_PACKAGE_OBJECT_KEY,successUserAjax,60*5);
successUserAjax = redisCache.getValue(CACHE_PACKAGE_OBJECT_KEY,AjaxResponse.class);
log.debug("取得缓存对象为:{}",successUserAjax);
这样就可以让业务方非常方便的使用Redis做缓存了。
留下待思考的问题
- SpringBoot2集成Redis有两种(jedis,lettuce),默认lettuce,扩充配置lettuce的连接池大小等属性;
- opsForZSet:对应ZSet有序集合;
opsForHash:对应Hash哈希
opsForList:对应List列表
opsForSet:对应Set集合
需要支持如上类型的数据缓存,又需要如何扩展配置。