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集合
需要支持如上類型的數據緩存,又需要如何擴展配置。