博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
<Web> 如何给web项目添加redis服务
阅读量:4496 次
发布时间:2019-06-08

本文共 3917 字,大约阅读时间需要 13 分钟。

前言

  这两天项目用到redis,而我自己也正准备看这个,所以就从头开始学习了一遍。

  既然要用,说明已经对redis是干什么的,特点是什么,对项目有什么好处,需要缓存什么东西等问题都了解过了,所以我们直接开搞:

怎么获取redis

  安装redis,linux下wget到,然后直接make就行了,比较简单。

  我是在windows下用的,所以来说下:到从redis官网连接过去的下载redis-2.8.19.zip,解压之后运行redis-server.exe即可,然后打开redis-cli.exe就可以使用了。一般这个只是用来测试连接和查看monitor用的。

java端如何使用redis

  在java项目中,redis提供了很多客户端库,我用的jedis,它封装了对redis数据库的所有操作。

  一般web应用中,我们还会用到spring,方便的地方在于spring本身也提供了对redis的支持--spring-data-redis,可以到,并有实例。

  具体步骤:

  1.引入pom依赖(如果没用maven的话,自行引入jar包吧)

org.springframework.data
spring-data-redis
1.5.0.RELEASE

  同时将jedis也依赖上,因为spring-data-redis底层就是用的jedis:

     
redis.clients
jedis
2.6.0
jar
compile

 

  2.在容器中配置RedisTemplate实例

  注意:这是官网直接复制过来的,我这样直接放在xml中,会报错,即使是引入p的命名空间。然后我就尝试将p属性写成property后,就没有报错了,但是在后面用的时候会key和value会出现类似"\xac\xed\x00\x05t\x00\tb "这样的情况,查询得知这是因为spring-data-redis需要将数据存储到jedis中,这中间需要序列化,再由jedis存储到数据库,问题就出在序列化上了,它会将key和value的类型信息也序列化后带上,这显然不是我们想要的结果。

  所以RedisTemplate提供了对key和value序列化类,于是我打算这样:

  可是中间两个序列化类还是报错,没有无参构造器,所以就准备采用构造器注入的方式,但是要求注入的参数是一个Object.class类型,我也不知道怎么注入这种类型的,搞来搞去还是干脆就不要xml了,直接写配置类:

@Configurationpublic class RedisConfig {    @Bean    JedisConnectionFactory jedisConnectionFactory() {        return new JedisConnectionFactory();    }    @Bean    RedisTemplate
redisTemplate() { final RedisTemplate
template = new RedisTemplate<>(); template.setConnectionFactory(jedisConnectionFactory()); template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new GenericToStringSerializer<>(Object.class)); template.setValueSerializer(new GenericToStringSerializer<>(Object.class)); return template; }}

  这下可算可以了(当然要注意扫描包)。

  有了RedisTemplate之后,就可以写具体的实现业务类了,RedisTemplate基本支持所有redis操作,比如:

@Componentpublic class SpringRedisClientImpl implements SpringRedisClient {    @Autowired    private RedisTemplate
template; @Autowired private JedisConnectionFactory jedisConnectionFactory; @Override public void setKey(String key, String value) { template.opsForValue().set(key, value); } @Override public Object getKey(String key) { return template.opsForValue().get(key); } @Override public void incr(String key) { template.opsForValue().increment(key, 1); } @Override public void lPush(String key, String value) { template.opsForList().leftPush(key, value); } @Override public boolean checkKey(String key) { return template.hasKey(key); } @Override public Object lIndex(String key) { return template.opsForList().index(key, 0); } @Override public Long llength(String key) { return template.opsForList().size(key); } @Override public String lpop(String key) { return (String) template.opsForList().leftPop(key); } @Override public Set
getKeys(String pattern) { return template.keys(pattern); } @Override public void flushAll() { Jedis jedis = jedisConnectionFactory.getShardInfo().createResource(); jedis.flushAll(); jedis.close(); }}

  最后,启动redis-server.exe就可以了(这里要注意要先启动这个,再启动web项目,否则启动不了,原因未知),如果对redis比较熟悉的,可以自行配置redis.windows.conf文件。其实我也不太熟悉conf文件里面的配置,尤其是持久化到磁盘那个。所以在我的项目里,我是将数据以每天为单位保存到mysql中,并清空redis。

推荐

  要使用RedisTemplate相应方法的时候,应该要对其的作用非常熟悉,这里推荐一个。

  

  

转载于:https://www.cnblogs.com/yl0822/p/4424752.html

你可能感兴趣的文章
《自己动手写docker》之namespace部门实验
查看>>
Vim学习总结
查看>>
maven也是Apache开发的,也是java开发的。maven需要你本地系统JDK的支持
查看>>
垂直同步v-sync
查看>>
const关键字祥解
查看>>
JDK提供的并发工具类
查看>>
jmx
查看>>
【JZOJ4161】于神之怒 莫比乌斯反演
查看>>
实践作业4:Web测试实践(小组作业)每日任务记录2
查看>>
kubernetes 之一些报错
查看>>
PHP isset()、empty()、is_null()的使用区别详解
查看>>
软件产品案例分析(团队)
查看>>
eclipse中svn插件的安装
查看>>
北京赛区总结
查看>>
Mysql安装后的一些设置
查看>>
4、Qt Project之串口数据传输
查看>>
Python List reverse()方法
查看>>
Jmeter 正则提取器
查看>>
lua -- 生成协议
查看>>
HLP帮助文件源文件RTF文件的编写
查看>>