`

Redis

    博客分类:
  • Java
阅读更多

高并并发架构:

nginx+tomcat集群+Redis+ActiveMQ

redis缓存案例如下:

test代码:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring/applicationContext.xml"})
public class UserDaoRedisTest {
   
        @Autowired
        private UserServiceRedis userServiceRedis;
       
        @Test 
        public void testCrud() { 
            // -------------- Create --------------- 
           
           
            String uid = "u123456"; 
            String address1 = "上海"; 
            User_Redis user = new User_Redis(); 
            user.setAddress(address1); 
            user.setUid(uid); 
            userServiceRedis.save(user);
           
            System.out.println("执行save....");
     
            // ---------------Read --------------- 
            user = userServiceRedis.read(uid); 
               
            assertEquals(address1, user.getAddress());
            System.out.println("执行read...."+user.getAddress()+user.getUid());
     
            // --------------Update ------------ 
            String address2 = "北京"; 
            user.setAddress(address2); 
            userServiceRedis.save(user); 
     
            user = userServiceRedis.read(uid); 
     
            assertEquals(address2, user.getAddress()); 
     
            // --------------Delete ------------ 
            userServiceRedis.delete(uid); 
            System.out.println("执行delete....");
            user = userServiceRedis.read(uid); 
            assertNull(user); 
        } 
}

 

RedisDao:

@Repository
public class UserDaoImplRedis implements UserDaoRedis {

    @Autowired 
    private RedisTemplate<Serializable, Serializable> redisTemplate;
   
    @Override
    public void save(final User_Redis user) {
        redisTemplate.execute(new RedisCallback<Object>() { 
            @Override 
            public Object doInRedis(RedisConnection connection) 
                    throws DataAccessException { 
                connection.set( 
                        redisTemplate.getStringSerializer().serialize( 
                                "user.uid." + user.getUid()), 
                        redisTemplate.getStringSerializer().serialize( 
                                user.getAddress())); 

                return null;
            } 
        }); 
    }
   
    public void saveObject(final User_Redis user) {
        redisTemplate.execute(new RedisCallback<Object>() { 
            @Override 
            public Object doInRedis(RedisConnection connection) 
                    throws DataAccessException { 
                connection.set( 
                        redisTemplate.getStringSerializer().serialize( 
                                "user.uid." + user.getUid()), 
                        redisTemplate.getStringSerializer().serialize( 
                                user.getAddress())
                                );
                connection.keys(redisTemplate.getStringSerializer().serialize("*"));
                return null;
            } 
        }); 
    }

    @Override
    public User_Redis read(final String uid) {
         return redisTemplate.execute(new RedisCallback<User_Redis>() { 
                @Override 
                public User_Redis doInRedis(RedisConnection connection) 
                        throws DataAccessException { 
                    byte[] key = redisTemplate.getStringSerializer().serialize( 
                            "user.uid." + uid); 
                    if (connection.exists(key)) { 
                        byte[] value = connection.get(key); 
                        String address = redisTemplate.getStringSerializer() 
                                .deserialize(value); 
                        User_Redis user = new User_Redis(); 
                        user.setAddress(address); 
                        user.setUid(uid); 
                        return user; 
                    } 
                    return null; 
                } 
            }); 
    }

    @Override
    public void delete(final String uid) {
        redisTemplate.execute(new RedisCallback<Object>() { 
            public Object doInRedis(RedisConnection connection) { 
                connection.del(redisTemplate.getStringSerializer().serialize( 
                        "user.uid." + uid)); 
                return null; 
            } 
        }); 
    }
}

 

Spring 配置:

 <!-- 自动扫描(自动注入) --> 
    <bean 
           id="jedisPoolConfig" 
           class="redis.clients.jedis.JedisPoolConfig" 
       > 
           <property 
               name="maxActive" 
               value="${redis.pool.maxActive}" /> 
           <property 
               name="maxIdle" 
               value="${redis.pool.maxIdle}" /> 
           <property 
               name="maxWait" 
               value="${redis.pool.maxWait}" /> 
           <property 
               name="testOnBorrow" 
               value="${redis.pool.testOnBorrow}" /> 
       </bean> 
      
         <bean 
        id="jedisConnectionFactory" 
        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" 
    > 
        <property 
            name="hostName" 
            value="${redis.ip}" /> 
        <property 
            name="port" 
            value="${redis.port}" /> 
        <property 
            name="poolConfig" 
            ref="jedisPoolConfig" /> 
    </bean> 
   
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" 
        p:connection-factory-ref="jedisConnectionFactory" />

 

引用的参数:

#最大分配的对象数 
redis.pool.maxActive=1024 
#最大能够保持idel状态的对象数 
redis.pool.maxIdle=200 
#当池内没有返回对象时,最大等待时间 
redis.pool.maxWait=1000 
#当调用borrow Object方法时,是否进行有效性检查 
redis.pool.testOnBorrow=true 
#IP 
redis.ip=127.0.0.1
#Port 
redis.port=6379 

pom.xml引用的包

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

 

Redis服务端测试命令windows:
启动服务端:
cmd找到redis的跟目录下执行redis-server.exe redis.conf
测试客户端:
新开一个窗口cmd找到redis的跟目录下执行redis-cli.exe -h 127.0.0.1 -p 6379
127.0.0.1是我本机IP地址,端口6379就是上面配置文件中指定的监听端口
执行一条保存key value操作
set mystock 300156
再查询一下
get mystock

 

Redis session共享配置:

session 共享配置:
1、准备两个tomcat,端口区分开,例如8001,8002,注意一点是,tomcat server.xml其它端口也要修改为不同的,例如shutdown端口,否则无法同时启动两个tomcat
2、把同一个应用分别放置在两个tomcat中,然后测试是否正常访问两个应用。
3、停止tomcat,修改conf/文件夹下的context.xml文件,文件的context节点内添加如下配置,一定要注意h、p要和redis服务端配置的保持一致。
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
 host="127.0.0.1"
 port="6379"
 database="0"
 maxInactiveInterval="60" />
4、OK,配置完毕,来测试应用,启动tomcat1,直接登录应用,拷贝tomcat登陆后的URL,打开新的网页选项卡,粘贴tomcat1的地址,然后修改端口号为8002,然后访问
你会发现直接登录进去了。然后退出tomcat2的应用,刷新tomcat1的界面,你会发现tomcat1自动退出了,OK,证明session共享功能正确。

注意:配置session共享,在tomcat 的lib中要需要三个jar包,Commons-Pool   Jedis   tomcat-redis-session-manager
redis相关文章:http://blog.nosqlfan.com/html/3537.html

分享到:
评论

相关推荐

    REDIS_redis的工具包_redisinlabview_labviewredis_labview调用redis_redis

    **Redis与LabVIEW的整合:RedisinLabVIEW和LabVIEWRedis工具包** Redis是一个高性能的键值数据库,常用于数据缓存和消息队列。它支持丰富的数据类型,包括字符串、哈希表、列表、集合和有序集合。在LabVIEW...

    Windows版 Redis 5.0.14

    Redis 是一个开源的内存数据结构存储系统,常被用作数据库、缓存和消息代理。在Windows环境下,Redis 的安装和使用与在Linux系统中有所不同。这里我们将详细讨论Windows版Redis 5.0.14的相关知识点。 1. **Redis ...

    StackExchange.Redis Redis客户端

    最近需要在C#中使用Redis,在Redis的官网找到了ServiceStack.Redis,最后在测试的时候发现这是个坑,4.0已上已经收费,后面只好找到3系列的最终版本,最后测试发现还是有BUG或者是我不会用。没有办法,最好找到了...

    Linux 系统 安装redis redis-5.0.1.tar.gz 安装包

    在Linux系统中安装Redis是一个常见的任务,特别是在搭建服务器或开发基于Redis的数据缓存应用时。Redis是一个开源的、高性能的键值对存储系统,适用于数据缓存、消息队列等多种场景。本文将详细介绍如何在Linux上...

    redis-windows-Redis7.0.0.zip

    Redis,全称Remote Dictionary Server,是一款开源的、高性能的键值存储系统,广泛应用于缓存、消息队列、数据持久化等多种场景。它以其高效、轻量级的特性,在IT行业中备受青睐,尤其是在互联网领域。在Windows环境...

    redis-windows-redis7.0.5.zip

    Redis,全称Remote Dictionary Server,是一款开源的、高性能的键值对存储系统,常被用作数据缓存、消息队列以及数据库等角色。它的设计目标是速度和数据持久化,支持多种数据结构,如字符串、哈希表、列表、集合、...

    redis部署6.2.6最新稳定版文档和程序 redis部署6.2.6最新稳定版文档和程序

    redis部署6.2.6最新稳定版文档和程序redis部署6.2.6最新稳定版文档和程序redis部署6.2.6最新稳定版文档和程序redis部署6.2.6最新稳定版文档和程序redis部署6.2.6最新稳定版文档和程序redis部署6.2.6最新稳定版文档和...

    redis在win上的运行脚本redis.bat

    Redis是一款高性能的键值对数据库,常用于缓存、消息队列等场景。在Windows操作系统上运行Redis,通常需要借助一些额外的工具。标题提到的"redis在win上的运行脚本redis.bat"就是一个帮助用户在Windows环境下启动...

    redis win x64位 及 安装卸载RedisServer服务

    Redis是世界上最受欢迎的开源内存数据结构存储系统,它可以用作数据库、缓存和消息代理。在Windows 64位环境下,Redis的安装和卸载过程是很多开发者和系统管理员需要了解的重要技能。以下是对这些知识点的详细说明:...

    Redis Desktop Manager redis的可视化工具压缩包,解压即用

    Redis Desktop Manager是一款强大的开源图形化界面工具,专为管理和操作Redis键值存储系统而设计。它为用户提供了直观且高效的界面,使得在处理Redis数据库时能够更加便捷。这个压缩包包含的就是这款工具的安装文件...

    Redis-7.0.5-x64 for Windows 64位版 Redis 7.0.5

    Redis是一款高性能的键值对内存数据库,被广泛应用于缓存、数据存储等领域。在这个Windows 64位版本的Redis 7.0.5中,我们能够看到一系列关键组件和配置文件,这使得它能够在Windows环境下运行。以下是关于Redis ...

    Redis 7.0.4 x64位 windows 系统 安装包 Redis7.0.4.zip

    Redis7.0.4.zip,解压缩到D盘根目录后,安装后启动为Windows服务 注意是windows 64位系统才可使用,不支持windows 32位系统使用 已经在Win10,Win11,Windows server 2012系统测试运行可用 使用步骤注意事项: ...

    若依前后端分离版去redis版/无redis版本

    基于前后端分离的应用,无论是否使用Redis,都需要考虑如何进行数据的存储和缓存。下面我将分别介绍基于Redis和无Redis的两种版本的特点。 基于Redis的版本 特点 缓存处理:Redis作为内存数据库可以用来缓存频繁访问...

    redis 免安装 redis客户端 redis-desktop-manager-0.8.8.384

    Redis 是一个高性能的键值数据库,它以键值对的形式存储数据,广泛应用于缓存、消息中间件、实时分析等领域。在 Windows 环境下,通常需要通过安装过程来设置 Redis 服务,但这里提供的资源是“redis 免安装”,意味...

    Windows 上安装 Redis安装,redis7.2安装到windows上面

    在Windows上安装Redis的过程涉及到多个步骤,包括启用必要的Windows功能、安装WSL2(Windows Subsystem for Linux 2)、设置默认WSL版本以及在Linux环境中安装Redis。以下是对这些步骤的详细说明: 1. **启用...

    redis 可视化工具以及免安装redis 绿色版

    Redis,全称Remote Dictionary Server,是一款高性能的键值存储数据库,常用于缓存、消息队列等场景。本文将深入探讨Redis的可视化工具及其免安装绿色版的使用,帮助你更好地管理和操作Redis服务器。 首先,了解...

    Redis使用教程,详解

    Redis 使用教程详解 Redis 是一个高性能的 NoSQL 键值存储数据库,广泛应用于缓存、任务列表、网站访问统计数据、过期处理、应用排行榜、分布式集群架构中的 session 分离等领域。下面是 Redis 的详细使用教程。 ...

    redis3.0安装包 window 64位

    (1)支持Lua脚本:Redis 3.0支持Lua脚本,可以在Redis中执行脚本,大大提高了Redis的灵活性和可扩展性; (2)可插拔模块化:Redis 3.0提供了可插拔的模块化功能,可以根据用户的需求,自定义模块,实现不同的功能...

    redis 6.0 windows 版本

    Redis是一款高性能的键值存储系统,常用于数据库、缓存和消息代理等场景。它支持丰富的数据类型,如字符串、哈希、列表、集合和有序集合。在Windows平台上使用Redis,通常需要通过编译源码或者寻找预编译的二进制...

    redis++使用说明,windows下编译redis-plus-plus

    "Redis++使用说明,windows下编译Redis-Plus-Plus" 在这篇文章中,我们将详细介绍如何在Windows平台下编译Redis++,包括编译hiredis.lib和Win32_Interop.lib静态库文件的过程,然后安装Cmake并编译Redis++,最后...

Global site tag (gtag.js) - Google Analytics