<Web> 如何给web项目添加redis服务

前言

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

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

怎么获取redis

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

  我是在windows下用的,所以来说下:到从redis官网连接过去的redisServer下载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包吧)

<dependencies>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>1.5.0.RELEASE</version>
    </dependency>
</dependencies>

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

     <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.6.0</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

  2.在容器中配置RedisTemplate实例

<bean id="jedisConnFactory"
    class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
    p:use-pool="true"/>

<!-- redis template definition -->
<bean id="redisTemplate"
    class="org.springframework.data.redis.core.RedisTemplate"
    p:connection-factory-ref="jedisConnFactory"/>

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

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

<bean id="redisTemplate"
          class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnFactory"/>
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.GenericToStringSerializer"/>
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.GenericToStringSerializer"/>
        </property>
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
    </bean>

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

@Configuration
public class RedisConfig {
    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        return new JedisConnectionFactory();
    }

    @Bean
    RedisTemplate<String, Object> redisTemplate() {
        final RedisTemplate<String, Object> 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操作,比如:

@Component
public class SpringRedisClientImpl implements SpringRedisClient {
    @Autowired
    private RedisTemplate<String, Object> 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<String> 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相应方法的时候,应该要对其的作用非常熟悉,这里推荐一个redis命令参考

  

  

时间: 2024-10-13 19:08:20

<Web> 如何给web项目添加redis服务的相关文章

centos6.5配置redis服务 很好用谢谢

1.下载Redis3.2.5安装包 wget http://download.redis.io/releases/redis-3.2.5.tar.gz 2.解压.编译.安装redis-3.2.5: tar -zxvf redis-3.2.5.tar.gz -C /usr/src/ cd /usr/src/redis-3.2.5/ make && make install 3.创建redis相关目录: mkdir -p /home/redis/bin mkdir -p /home/redis

Spring Boot构建的Web项目如何在服务端校验表单输入

本文首发于个人网站:Spring Boot构建的Web项目如何在服务端校验表单输入 这个例子用于演示在Spring Boot应用中如何验证Web 应用的输入,我们将会建立一个简单的Spring MVC应用,来读取用户输入并使用validation注解来检查,并且当用户输入错误时,应用需要再屏幕上显示错误信息提示用户重新输入. 首先构建Maven项目,该项目的pom文件内容如下: <?xml version="1.0" encoding="UTF-8"?>

当重装eclipse后,给现有web项目添加tomcat的构建路径

在eclipse"首选项"-"service environment"中配置好tomcat后,给现有web项目添加构建路径: 1.选中一个web项目右键选中"构建路径"-"配置构建路径" 2.选中右边"add library" 3.选择"service runtime"然后点击"下一步" 4.选择正确版本点击"完成"就可以了.

maven 如何给web项目添加jar包依赖

maven 如何给web项目添加jar包依赖 CreateTime--2018年4月19日19:06:21 Author:Marydon 开发工具:eclipse 1.打开pom.xml文件-->切换到pom.xml视图--> 2.在build标签上,创建dependencies标签,jar包的引入都放到该标签内: 3.查看项目都引用了哪些jar包:src/main/webapp/WEB-INF/lib,然后将下面的jar包一个一个的从maven资源库中http://mvnrepository

web项目添加easyui组件报错

创建web项目添加easyui组件到webRoot下后整个easyui组件报错 出现x的原因是eclipse检查了压缩版的jquery.min.js,而压缩版的语法格式很紧凑,eclipse反应不过来报错 可以右键easyui---->myeclipse---->exclude from validation  忽略报错就可以了,不影响组件的使用 原文地址:https://www.cnblogs.com/naidi/p/10477801.html

Windows Server 2008R2安装WEB服务器详细过程+安装完成后添加角色服务

一.Windows Server 2008R2安装WEB服务器详细过程1.进入系统 打开服务器管理器:在角色选项卡下点击添加角色2.弹出 添加角色向导 点击下一步3.勾上WEB服务器(IIS) 点击下一步4.根据自己所需要的服务勾选 点击安装安装进度条5.安装完成二.安装完成后添加角色服务1.点击角色,找到角色服务 点击添加角色服务2.选择角色服务弹出安装此角色.还需安装几个默认的配套服务 点击添加所需的角色服务安装的进度条安装完成 原文地址:https://blog.51cto.com/144

C# web项目添加*.ashx文件后报错处理

说明:我是菜鸟,博文水平有限,仅作学习过程中的备忘笔记 1.截图信息: ————————————————————————————————————————————————————————————————— 2.处理: 添加后的代码结构为 这里看Upload1.ashx文件,默认添加后,会有Upload1.ashx.cs文件,应为这个导致了页面错误:我们需要修改Upload.ashx页面,但此时,只能打开 Upload1.ashx.cs文件.解决的方法是,先复制Upload1.ashx.cs里的内容

web集群综合项目keepalived+lvs+lamp+nfs+mysql

web集群综合项目 实验描述: 在此项目中,为了使公司内部的web站点提供更稳定的服务,搭建负载均衡群集以及故障转移群集,具体拓扑环境如下: 实验环境: 主机 Ip地址 软件 主调度器 192.168.100.150 kernel-devel openssl-devel popt-devel  ipvsadm keepalived-1.2.13.tar.gz 从调度器 192.168.100.151 kernel-devel openssl-devel popt-devel  ipvsadm k

在Linux安装配置Tomcat 并部署web应用 (环境搭建+项目部署)(转载)

一.准备工作 1.java -version 检查是否有java环境,没有则需要去安装并配置到环境变量中. 2.下载tomcat包,下载地址:http://tomcat.apache.org/download-70.cgi 可以本地下载后上传到服务器上,也可以直接在服务器上使用wget命令下载,本案例直接使用wget命令下载 : [[email protected] ~]# wget http://apache.fayea.com/tomcat/tomcat-7/v7.0.77/bin/apac