大家好,本篇文章是redis系列开篇第一章节,主要是介绍redis的基本功能和我们项目中如何以正确姿势使用redis。
1.什么是redis,redis有何作用?
下面是来自百度百科的解释:redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
下面推荐一篇博客里面讲的很详细,怎样下载与安装redis可视化界面,请点击
redis下载、安装可视化界面操作步骤
2.redis的优点
- redis速度够快,因为是基于内存操作,时间复杂度都是O(1)
- 正如上面说的,redis支持丰富的5种数据类型
- redis所有的操作都是原子性的,只有成功和失败,不会出现部分失败和成功的说法
- 轻量、简单拿来即用,对于各种语言的支持度也很好
3.spring boot中简单使用redis
- 引入jar包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
- 核心配置文件
spring: redis: host: 127.0.0.1 port: 6379 database: 0 jedis: pool: max-active: 30 #连接池最大连接数(使用负值表示没有限制) max-wait: 1000 #连接池最大阻塞等待时间(使用负值表示没有限制) max-idle: 8 #连接池中的最大空闲连接 min-idle: 3 #连接池中的最小空闲连接 timeout: 10000ms #连接超时时间(毫秒)
- Redis操作工具类(我这是从网上搜刮来的,嘿嘿)
package com.sheng.redischapter1.config; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; /** * @author Mr sheng.z */ @Component public final class RedisUtil { @Resource private RedisTemplate<String, Object> redisTemplate; public Set<String> keys(String keys){ try { return redisTemplate.keys(keys); }catch (Exception e){ e.printStackTrace(); return null; } } /** * 指定缓存失效时间 * @param key 键 * @param time 时间(秒) * @return */ public boolean expire(String key, long time) { try { if (time > 0) { redisTemplate.expire(key, time, TimeUnit.SECONDS); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 根据key 获取过期时间 * @param key 键 不能为null * @return 时间(秒) 返回0代表为永久有效 */ public long getExpire(String key) { return redisTemplate.getExpire(key, TimeUnit.SECONDS); } /** * 判断key是否存在 * @param key 键 * @return true 存在 false不存在 */ public boolean hasKey(String key) { try { return redisTemplate.hasKey(key); } catch (Exception e) { e.printStackTrace(); return false; } } /** * 删除缓存 * @param key 可以传一个值 或多个 */ @SuppressWarnings("unchecked") public void del(String... key) { if (key != null && key.length > 0) { if (key.length == 1) { redisTemplate.delete(key[0]); } else { redisTemplate.delete(CollectionUtils.arrayToList(key)); } } } /** * 普通缓存获取 * @param key 键 * @return 值 */ public Object get(String key) { return key == null ? null : redisTemplate.opsForValue().get(key); } /** * 普通缓存放入 * @param key 键 * @param value 值 * @return true成功 false失败 */ public boolean set(String key, Object value) { try { redisTemplate.opsForValue().set(key, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 普通缓存放入, 不存在放入,存在返回 * @para