RedisRedishttps://redis.io/download#download
Redis
安装步骤按照下面命令一行一行的输入
1 下载
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
2 解压
tar xzf redis-5.0.5.tar.gz
3 进入文件夹
cd redis-5.0.5
4 初始化
make
5 安装
make install
6启动服务
src/redis-server
7 重新开一个窗口 连接服务器
src/redis-cli
8测试 添加数据库
Redis127.0.0.1> set foo bar
OK
9 测试取出数据库
Redis127.0.0.1> get foo
"bar"
通过面板打开6379 端口
修改redis.conf
注释掉bind 127.0.0.1可以使所有的ip访问redis
若是想指定多个ip访问,但并不是全部的ip访问,可以bind
修改:protected-mode no
守护进程打开
daemonize yes
requirepass 密码设置
停止服务
./redis-cli shutdown
设置服务
# ./utils/install_server.sh
Redis服务查看、开启、关闭
查看redis进程
# ps aux | grep -v grep | grep redis-server
启动服务
# service redis_6379 start
停止服务
# service redis_6379 stop
连接redis服务
# redis-cli -h 192.... -p 6379
查看redis相关信息
打开防火墙端口号哦
##Add firewall-cmd --permanent --zone=public --add-port=6379/tcp ##Reload firewall-cmd --reload ##检查是否生效 firewall-cmd --zone=public --query-port=6379/tcp |
springboot 使用教程
1 复制下面的序列化 设置类
@Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class); @Bean public RedisCacheConfiguration redisCacheConfiguration() { ObjectMapper om=new ObjectMapper(); //序列化的时候序列对象的所有属性 // om.setSerializationInclusion(Include.ALWAYS); //反序列化的时候如果多了其他属性,不抛出异常 om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //如果是空对象的时候,不抛异常 om.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
//取消时间的转化格式,默认是时间戳,可以取消,同时需要设置要表现的时间格式 om.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
//设置时间序列化 om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")); //设置 反序列化为对象 而不是 linkedList om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(om );
return RedisCacheConfiguration .defaultCacheConfig() .serializeKeysWith( RedisSerializationContext .SerializationPair .fromSerializer(new StringRedisSerializer())) .serializeValuesWith( RedisSerializationContext .SerializationPair .fromSerializer(genericJackson2JsonRedisSerializer));
}
@Override @Bean public CacheErrorHandler errorHandler() { // 异常处理,当Redis发生异常时,打印日志,但是程序正常走 logger.info("初始化 -> [{}]", "Redis CacheErrorHandler"); CacheErrorHandler cacheErrorHandler = new CacheErrorHandler() { @Override public void handleCacheGetError(RuntimeException e, Cache cache, Object key) { logger.error("Redis occur handleCacheGetError:key -> [{}]", key, e); }
@Override public void handleCachePutError(RuntimeException e, Cache cache, Object key, Object value) { logger.error("Redis occur handleCachePutError:key -> [{}];value -> [{}]", key, value, e); }
@Override public void handleCacheEvictError(RuntimeException e, Cache cache, Object key) { logger.error("Redis occur handleCacheEvictError:key -> [{}]", key, e); }
@Override public void handleCacheClearError(RuntimeException e, Cache cache) { logger.error("Redis occur handleCacheClearError:", e); } }; return cacheErrorHandler; } } |
2 修改pom 添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> <scope>compile</scope> </dependency> |
3 service 上添加注解
@Cacheable(value ="salChance" ,key = "#id") //最后的key为salchance::1 1是id public SalChance findOne(Integer id) {
SalChance result = salChanceDao.selectSalChanceById(id);
return result; } |
4 记得要在主配置 application.properties加上连接字符串
logging.level.com.situ=DEBUG
# Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=192.168.128.133 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) spring.redis.jedis.pool.max-active=200 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.jedis.pool.max-wait=-1ms # 连接池中的最大空闲连接 spring.redis.jedis.pool.max-idle=10 # 连接池中的最小空闲连接 spring.redis.jedis.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.timeout=2000ms |
注解的具体使用
@Cacheable(value="users", key="#user.id") public User find(User user) { returnnull; } @Cacheable(value="users", key="#id") public User find(Integer id) { Key还可以这样写!
属性名称 | 描述 | 示例 | methodName | 当前方法名 | #root.methodName | method | 当前方法 | #root.method.name | target | 当前被调用的对象 | #root.target | targetClass | 当前被调用的对象的class | #root.targetClass | args | 当前方法参数组成的数组 | #root.args[0] | caches | 当前被调用的方法使用的Cache | #root.caches[0].name |
可以将“#root”省略 |
condition属性指定发生的条件
@Cacheable(value={"users"}, key="#user.id", condition="#user.id%2==0") public User find(User user) { |
@CachePut 不管有没有缓存都写入缓存
@CacheEvict 删除指定的缓存
@CacheEvict(value ="SalChance" ,key = "#value.chcId") @Caching(evict = {@CacheEvict(value ="SalChance" ,key = "#value.chcId"), @CacheEvict(value ="SalChance",key = "'find'")}) public int updateNotNullById(SalChance value) { |
最后的例子
@CacheConfig(cacheNames="Food") public class 类名上{ @Cacheable(key = "#pageNum+'_'+#pageSize") 查询方法上(){} @CacheEvict(allEntries=true) 增删改方法上(){} } |
|