参考:
https://www.cnblogs.com/ityouknow/p/5748830.html
http://blog.csdn.net/i_vic/article/details/53081241
https://www.cnblogs.com/gdpuzxs/p/7222309.html
http://www.runoob.com/redis/redis-keys.html #redis命令

springboot和redis结合,这里只是单机版的配置,如果需要配置集群,可以在上面几个博客中看一下。附录中是一些redis常用命令,也可以在参考[3]中看。

springboot的应用,包路径一定要合格(所有的代码,都在启动类所在得包的下级目录中),避免不必要的麻烦。

开始:

1. pom中添加
     <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.  启动类
添加  @EnableCaching
3. 配置

配置文件:

# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=192.168.72.133
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0

配置类:

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport{ @Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${redis.cacheExpirationTime}")
private long cacheExpirationTime; //自定义缓存key生成策略
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator(){
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuffer sb = new StringBuffer();
sb.append(target.getClass().getName());
sb.append(method.getName());
for(Object obj:params){
sb.append(obj.toString());
}
return sb.toString();
}
};
} //缓存管理器
@Bean
public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
//设置缓存过期时间
cacheManager.setDefaultExpiration(10);
return cacheManager;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory){
StringRedisTemplate template = new StringRedisTemplate(factory);
setSerializer(template);//设置序列化工具
template.afterPropertiesSet();
return template;
} private void setSerializer(StringRedisTemplate template){
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
}
}

其中的使用的是com.fasterxml.jackson。

4. redis操作接口和实现类(使用接口实现类的形式,可以使你在单机和集群形式快速切换,而且在其它地方使用的使用可以自动注入)

interface:

public interface JedisServer {

    public boolean set(String key, String value);  

    public String get(String key);  

    public boolean expire(String key,long expire);  

    public <T> boolean setList(String key ,List<T> list);  

    public <T> List<T> getList(String key,Class<T> clz);  

    public long lpush(String key,Object obj);  

    public long rpush(String key,Object obj);  

    public String lpop(String key);  

}

implements single:

@Service
public class JedisServerImpl implements JedisServer { @Resource
private RedisTemplate<String, ?> redisTemplate; @Override
public boolean set(final String key, final String value) {
boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
@Override
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
connection.set(serializer.serialize(key), serializer.serialize(value));
return true;
}
});
return result;
} public String get(final String key){
String result = redisTemplate.execute(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
byte[] value = connection.get(serializer.serialize(key));
return serializer.deserialize(value);
}
});
return result;
} /**
* 设置缓存剩余时间(s)
*/
@Override
public boolean expire(final String key, long expire) {
return redisTemplate.expire(key, expire, TimeUnit.SECONDS);
} @Override
public <T> boolean setList(String key, List<T> list) {
String value = JsonUtilFood.object2Json(list);
return set(key,value);
} @Override
public <T> List<T> getList(String key,Class<T> clz) {
String json = get(key);
if(json!=null){
@SuppressWarnings("unchecked")
List<T> list = (List<T>) JsonUtilFood.json2Object(json, clz);
return list;
}
return null;
} @Override
public long lpush(final String key, Object obj) {
final String value = JsonUtilFood.object2Json(obj);
long result = redisTemplate.execute(new RedisCallback<Long>() {
@Override
public Long doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
long count = connection.lPush(serializer.serialize(key), serializer.serialize(value));
return count;
}
});
return result;
} @Override
public long rpush(final String key, Object obj) {
final String value = JsonUtilFood.object2Json(obj);
long result = redisTemplate.execute(new RedisCallback<Long>() {
@Override
public Long doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
long count = connection.rPush(serializer.serialize(key), serializer.serialize(value));
return count;
}
});
return result;
} @Override
public String lpop(final String key) {
String result = redisTemplate.execute(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
byte[] res = connection.lPop(serializer.serialize(key));
return serializer.deserialize(res);
}
});
return result;
} }

记得添加@Service注释

implements cluster: 没写,百度挺多的。

可以在电脑安装虚拟机,安装linux,然后安装redis,在上面参考博客中有,然后关闭防火墙,启动redis服务端,之后启动客户端测试,可以的时候再使用代码测试。

配置中的缓存存在时间配置暂时测试,不知道为什么没用,所以先在代码中设置了,以后找到了再更新吧。。

再贴一份调用的代码:

    @Resource
private JedisServer jedisServer; @Override
public String noodlesList() {
//其中的key暂时先写的是固定的,之后可以根据表名+主键保存,防止重复,记得再次查询的时候,重新设置超时时间,修改和删除的时候删除/更新redis中的缓存
try{
String string = jedisServer.get("foodcom");
if(null != string) {
return string;
}else{
jedisServer.expire("foodcom", 10);
}
}catch(Exception e) {
log.info("查询缓存异常(key=foodcom).");
} FoodInfo food = foodInfoMapper.selectByPrimaryKey(1);
jedisServer.set("foodcom", JsonUtilFood.object2Json(food));
jedisServer.expire("foodcom", 10);
return JsonUtilFood.object2Json(food);
}

希望可以帮到你,如果是业余测试,或许有问题我可以帮到你,如果是...,我也。。不会,以后或许就会了,哈哈哈

附:

redis常用:

防火墙,需要用root用户。

从配置菜单关闭防火墙是不起作用的,索性在安装的时候就不要装防火墙
查看防火墙状态:
/etc/init.d/iptables status
暂时关闭防火墙:
/etc/init.d/iptables stop
禁止防火墙在系统启动时启动
/sbin/chkconfig --level 2345 iptables off
重启iptables:
/etc/init.d/iptables restart
题外话:
BT或者骡子速度慢用不着关防火墙,只要把相应端口开放就可以了
在文件
/etc/sysconfig/iptables
在系统原始配置的:RH-Firewall-1-INPUT规则链增加类似这样的行:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 39764 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 39764 -j ACCEPT
如果发现原有-j REJECT一类的语句,上面两句要放在它的前面 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off 或者 /sbin/chkconfig --level 2345 iptables off 2) 即时生效,重启后失效
service 方式
开启: service iptables start
关闭: service iptables stop
iptables方式
查看防火墙状态:
/etc/init.d/iptables status
暂时关闭防火墙:
/etc/init.d/iptables stop
重启iptables:
/etc/init.d/iptables restart
1.    SET key value  设置指定 key 的值
2 GET key 获取指定 key 的值。
3 GETRANGE key start end 返回 key 中字符串值的子字符
4 GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
5 GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
6 MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值。
7 SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
8 SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
9 SETNX key value 只有在 key 不存在时设置 key 的值。
10 SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
11 STRLEN key 返回 key 所储存的字符串值的长度。
12 MSET key value [key value ...] 同时设置一个或多个 key-value 对。
13 MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
14 PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
15 INCR key 将 key 中储存的数字值增一。
16 INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。
17 INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。
18 DECR key 将 key 中储存的数字值减一。
19 DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。
20 APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。 1. DEL key 该命令用于在 key 存在时删除 key。
2 DUMP key 序列化给定 key ,并返回被序列化的值。
3 EXISTS key 检查给定 key 是否存在。
4 EXPIRE key seconds 为给定 key 设置过期时间。
5 EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
6 PEXPIRE key milliseconds 设置 key 的过期时间以毫秒计。
7 PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
8 KEYS pattern 查找所有符合给定模式( pattern)的 key 。
9 MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。
10 PERSIST key 移除 key 的过期时间,key 将持久保持。
11 PTTL key 以毫秒为单位返回 key 的剩余的过期时间。
12 TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
13 RANDOMKEY 从当前数据库中随机返回一个 key 。
14 RENAME key newkey 修改 key 的名称
15 RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。
16 TYPE key 返回 key 所储存的值的类型。

最新文章

  1. Hawk 3.1 动态页面,ajax,瀑布流
  2. Poj(1273),最大流,EK
  3. java里的静态变量是放在了堆内存还是栈内存?
  4. mongodb集成spring
  5. Android-Socket传输 GPRS网络
  6. 【转】window.scroll 浏览器滚动条的参数总结
  7. java-两个jre目录和三个lib目录-转
  8. Android 事件统计
  9. linux 记录用户操作日志
  10. windows上安装zip版mongodb
  11. SignalR在Asp.NetCore中的使用
  12. credential for git
  13. [Day15]常用API(Object类、String类)
  14. Zabbix3.4.7监控windows进程
  15. gulp 使用案例
  16. tabindex属性用法
  17. 一个经典的PHP加密解密算法
  18. Okhttp3上传多张图片同时传递参数
  19. scrapy之定制命令
  20. mysql explain extended 查看 执行计划

热门文章

  1. Mac Item2 SSH免密登录Linux 服务器的两种方式
  2. Mac OS X 下部分Android手机无法连接adb问题之解决方案
  3. Mysql 分组聚合实现 over partition by 功能
  4. Hibernate -- 对象关系映射基础
  5. SQL使用事务
  6. TCP粘包问题及解决方案
  7. jenkins 环境搭建与入门示例
  8. App如何推广秘籍之”渠道为王”
  9. SpringMVC4整合CXF发布WebService
  10. Django 使用 内置 content-type