`

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

分享到:
评论

相关推荐

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

    Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows ...

    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-windows-7.0.11

    Redis是一种开源的内存数据结构存储系统,它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis可以用作数据库、缓存和消息中间件。Redis在性能、可扩展性和灵活性方面表现出色,因此被广泛应用于Web...

    redis-5.0.4.tar.gz下载及redis安装过程

    redis安装 1: 下载redis-5.0.4.tar.gz 2: 解压源码并进入目录 tar zxvf redis-5.0.4.tar.gz cd redis-5.0.4 3: 不用configure 4: 直接make (如果是32位机器 make 32bit) 查看linux机器是32位还是64位的方法:...

    redis-5.0.5.tar.gz

    redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-...

    windows环境下配置redis6集群

    注意:由于本人配置redis.conf中的路径使用的是绝对路径,当前redis安装目录的父目录为D:\InstallDir,可以在每个配置文件中修改为自己指定的路径位置 redis638-.conf配置文件内容 #redis服务器端口号 port 6380 #...

    Redis集群下过期key监听的实现代码

    在使用redis集群时,发现过期key始终监听不到。网上也没有现成的解决方案。于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听。以上做法可能不尽人意,目前也没找到好的解决...

    Redis-5.0.0集群配置

    本文档基于以前写的《Redis-3.0.5集群配置》和《Redis-4.0.11集群配置》。  redis-3.0.0开始支持集群,redis-4.0.0开始支持module,redis-5.0.0开始支持类似于kafka那样的消息队列。  本文参考官方文档而成:...

    redis desktop manager(redis桌面管理器)下载(0.8.3)

    redis-desktop-manager-0.8.3.3850.rar windows平台安装文件 Redis Desktop Manager(redis桌面管理器)是一款非常实用的跨平台Redis桌面管理软件。也被称作Redis可视化工具,是一款开源软件,支持通过SSH Tunnel连接...

    Redis面试题50道(含答案)_.pdf

    1、什么是 Redis? 2、Redis 相比 memcached 有哪些优势? 3、Redis 支持哪几种数据类型? 4、Redis 主要消耗什么物理资源? 5、Redis 的全称是什么? 6、Redis 有哪几种数据淘汰策略? 7、Redis 官方为什么不提供 ...

    redis获取命令字典的方法及全部的group命令.txt

    本地安装redis,通过安装目录下的redis客户端程序可以连接任意Redis服务(只要服务端是启动着的),命令 redis-cli -h ip -p port。如果服务端要求认证资格,可能还要输入用户名密码等参数。 Redis命令十分丰富,...

    redis安装离线版免编译版及离线安装需要的所有包文件

    本资源可结合我的文章《详解CentOS7下编译安装Redis5.x设置开机启动及修改端口(含redis需编译安装包和redis免编译安装包)》配合使用,同时也可单独去使用。包含redis3.0.7免编译版安装包,redis5.0.7离线安装包,...

    SpringBoot+VUE+Redis+nginx 网上拍卖平台源码.zip

    SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+...

    redis_4.0.10-1_arm64.deb 银河麒麟v4+飞腾

    1、redis_4.0.10-1_arm64.deb 银河麒麟v4+飞腾 安装包 2、自带服务启动 3、目录树 /opt/redis-4.0.10/ ├── bin │ ├── redis-benchmark │ ├── redis-check-aof │ ├── redis-check-rdb │ ├── ...

    redis视频教程百度网盘下载地址及密码

    2016122201_Redis_初探_1.mp4 2016122201_Redis_初探_2.mp4 2016122201_Redis_初探_3.mp4 2016122202_Redis_安装_字符串键_1.mp4 2016122202_Redis_安装_字符串键_2.mp4 2016122202_Redis_安装_字符串键_3.mp4 ...

    redis-x64-4.0.2.3,windows版本

    右键解压Redis压缩包,把所有文件解压到指定的redis文件夹中 1.配置redis.windows.conf文件,除了port配置为对应的端口外,其他根据需要可更改的配置项说明如下: (1)bind 127.0.0.1 (line:79) # 设置为其他机器...

    redis桌面链接工具redis-desktop

    redis桌面链接工具redis-desktop Redis Desktop Manager(简称RDM)是一款跨平台的Redis数据库管理工具,它提供了一个直观且用户友好的图形界面,允许开发者和运维人员轻松地连接到Redis服务器,并对其进行管理和...

    1.2.6版StackExchange.Redis

    1.2.6版StackExchange.Redis。 StackExchange.Redis是.net下的Redis客户端之一,目前是免费的。而用户量比较多的ServiceStack.Redis现在是收费的。把下载的三个文件(StackExchange.Redis.dll、StackExchange.Redis....

    尚硅谷_Redis.docx

    Redis是一个key-value存储系统,是当下互联网公司常用的NoSQL数据库之一,是进入互联网行业的Java开发工程师必备技术。 在本课程中,你将了解Redis是什么、能干什么、如何用,了解NoSQL的使用场景和概念,快速掌握...

Global site tag (gtag.js) - Google Analytics