Redis-Java 交互的应用

一、首先介绍一下 Redis

      Redis 是目前业界使用最广泛的内存数据存储。相比 memcached,Redis 支持更丰富的数据结构,例如 hashes, lists, sets 等,同时支持数据持久化。除此之外,Redis 还提供一些类数据库的特性,比如事务,HA,主从库。可以说 Redis 兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。本文介绍 Redis 在 Spring Boot 中典型的应用场景。

       Redis 缓存数据类型有 5 种,分别是 String(字符串)、List(列表)、Hash(哈希)、Set(无序,不重复集合)、ZSet(sorted set:有序,不重复集合)。

二、先下载 redis  我这里使用的是 window64 版本

  这是教程链接: http://blog.csdn.net/jinwufeiyang/article/details/52156817

  Redis 下载链接 :https://github.com/MicrosoftArchive/redis/releases

 

 

 

     双击图上的标记的 ,如成功便如图下

 

 

 三、下面介绍 java 如何配置

    这是我的项目结构

        

 

        首先 pom 中引入 jar 包

   

  <!-- 共享 Session-spring-session-data-redis 分布式系统中,
         sessiong 共享有很多的解决方案,其中托管到缓存中应该是最常用的方案之一-->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

    

       application.properties 配置

    

# default-store in spring session. it will be set in redis only outside.
spring.session.store-type=none
# REDIS (RedisProperties)
# Redis 数据库索引(默认为 0)
spring.redis.database=0  
# Redis 服务器地址
spring.redis.host=127.0.0.1
# 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  

  

     RedisController 配置

@RestController
public class RedisController {
@Autowired
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> RedisServiceImpl service;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">添加</span>
@RequestMapping(value = "/add", method =<span style="color: rgba(0, 0, 0, 1)"> RequestMethod.GET)
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> test() {
    System.out.println(</span>"start....."<span style="color: rgba(0, 0, 0, 1)">);
    RedisModel m </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> RedisModel();
    m.setName(</span>"张三"<span style="color: rgba(0, 0, 0, 1)">);
    m.setTel(</span>"1111"<span style="color: rgba(0, 0, 0, 1)">);
    m.setAddress(</span>"深圳1"<span style="color: rgba(0, 0, 0, 1)">);
    m.setRedisKey(</span>"zhangsanKey01"<span style="color: rgba(0, 0, 0, 1)">);
    service.put(m.getRedisKey(), m, </span>-1<span style="color: rgba(0, 0, 0, 1)">);

    RedisModel m2 </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> RedisModel();
    m2.setName(</span>"张三2"<span style="color: rgba(0, 0, 0, 1)">);
    m2.setTel(</span>"2222"<span style="color: rgba(0, 0, 0, 1)">);
    m2.setAddress(</span>"深圳2"<span style="color: rgba(0, 0, 0, 1)">);
    m2.setRedisKey(</span>"zhangsanKey02"<span style="color: rgba(0, 0, 0, 1)">);
    service.put(m2.getRedisKey(), m2, </span>-1<span style="color: rgba(0, 0, 0, 1)">);

    RedisModel m3 </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> RedisModel();
    m3.setName(</span>"张三3"<span style="color: rgba(0, 0, 0, 1)">);
    m3.setTel(</span>"2222"<span style="color: rgba(0, 0, 0, 1)">);
    m3.setAddress(</span>"深圳2"<span style="color: rgba(0, 0, 0, 1)">);
    m3.setRedisKey(</span>"zhangsanKey03"<span style="color: rgba(0, 0, 0, 1)">);
    service.put(m3.getRedisKey(), m3, </span>-1<span style="color: rgba(0, 0, 0, 1)">);

    System.out.println(</span>"add success end..."<span style="color: rgba(0, 0, 0, 1)">);
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询所有对象</span>
@RequestMapping(value = "/getAll", method =<span style="color: rgba(0, 0, 0, 1)"> RequestMethod.GET)
@ResponseBody
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Object getAll() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> service.getAll();
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询所有key</span>
@RequestMapping(value = "/getKeys", method =<span style="color: rgba(0, 0, 0, 1)"> RequestMethod.GET)
@ResponseBody
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Object getKeys() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> service.getKeys();
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">根据key查询</span>
@RequestMapping(value = "/get", method =<span style="color: rgba(0, 0, 0, 1)"> RequestMethod.GET)
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Object get(String key) {
    RedisModel m </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> RedisModel();
    m.setRedisKey(key);
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> service.get(m.getRedisKey());
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">删除</span>
@RequestMapping(value = "/remove", method =<span style="color: rgba(0, 0, 0, 1)"> RequestMethod.GET)
@ResponseBody
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> remove() {
    RedisModel m </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> RedisModel();
    m.setRedisKey(</span>"zhangsanKey01"<span style="color: rgba(0, 0, 0, 1)">);
    service.remove(m.getRedisKey());
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">判断key是否存在</span>
@RequestMapping(value = "/isKeyExists", method =<span style="color: rgba(0, 0, 0, 1)"> RequestMethod.GET)
@ResponseBody
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> isKeyExists() {
    RedisModel m </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> RedisModel();
    m.setRedisKey(</span>"zhangsanKey01"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">boolean</span> flag =<span style="color: rgba(0, 0, 0, 1)"> service.isKeyExists(m.getRedisKey());
    System.out.println(</span>"zhangsanKey01 是否存在: "+<span style="color: rgba(0, 0, 0, 1)">flag);
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询当前缓存的数量</span>
@RequestMapping(value = "/count", method =<span style="color: rgba(0, 0, 0, 1)"> RequestMethod.GET)
@ResponseBody
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Object count() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> service.count();
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清空所有key</span>
@RequestMapping(value = "/empty", method =<span style="color: rgba(0, 0, 0, 1)"> RequestMethod.GET)
@ResponseBody
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> empty() {
    service.empty();
}</span></pre>
IRedisService 配置
public abstract class IRedisService<T> {
@Autowired
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> RedisTemplate&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)"> redisTemplate;
@Resource
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> HashOperations&lt;String, String, T&gt;<span style="color: rgba(0, 0, 0, 1)"> hashOperations;

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 存入redis中的key
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">abstract</span><span style="color: rgba(0, 0, 0, 1)"> String getRedisKey();


</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 添加
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key    key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> doamin 对象
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> expire 过期时间(单位:秒),传入 -1 时表示不设置过期时间
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> put(String key, T doamin, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> expire) {
    hashOperations.put(getRedisKey(), key, doamin);
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (expire != -1<span style="color: rgba(0, 0, 0, 1)">) {
        redisTemplate.expire(getRedisKey(), expire, TimeUnit.SECONDS);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 删除
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key 传入key的名称
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> remove(String key) {
    hashOperations.delete(getRedisKey(), key);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 查询
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key 查询的key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> T get(String key) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> hashOperations.get(getRedisKey(), key);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 获取当前redis库下所有对象
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> getAll() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> hashOperations.values(getRedisKey());
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 查询查询当前redis库下所有key
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Set&lt;String&gt;<span style="color: rgba(0, 0, 0, 1)"> getKeys() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> hashOperations.keys(getRedisKey());
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 判断key是否存在redis中
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key 传入key的名称
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> isKeyExists(String key) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> hashOperations.hasKey(getRedisKey(), key);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 查询当前key下缓存数量
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> count() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> hashOperations.size(getRedisKey());
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 清空redis
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> empty() {
    Set</span>&lt;String&gt; set =<span style="color: rgba(0, 0, 0, 1)"> hashOperations.keys(getRedisKey());
    set.stream().forEach(key </span>-&gt;<span style="color: rgba(0, 0, 0, 1)"> hashOperations.delete(getRedisKey(),key));
}</span></pre>

  RedisServiceImpl 配置

@Service
public class RedisServiceImpl extends IRedisService<RedisModel> {
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">final</span> String REDIS_KEY = "TEST_REDIS_KEY"<span style="color: rgba(0, 0, 0, 1)">;

@Override
</span><span style="color: rgba(0, 0, 255, 1)">protected</span><span style="color: rgba(0, 0, 0, 1)"> String getRedisKey() {


    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.REDIS_KEY;
}

}

 

RedisModel 配置

public class RedisModel implements Serializable {
</span><span style="color: rgba(0, 0, 255, 1)">private</span> String redisKey;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">redis中的key</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> String name;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">姓名</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> String tel;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">电话</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> String address;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">住址</span>

<span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String getRedisKey() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> redisKey;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setRedisKey(String redisKey) {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.redisKey =<span style="color: rgba(0, 0, 0, 1)"> redisKey;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String getName() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> name;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setName(String name) {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.name =<span style="color: rgba(0, 0, 0, 1)"> name;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String getTel() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> tel;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setTel(String tel) {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.tel =<span style="color: rgba(0, 0, 0, 1)"> tel;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String getAddress() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> address;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setAddress(String address) {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.address =<span style="color: rgba(0, 0, 0, 1)"> address;
}</span></pre>

   

  RedisConfig配置

  

@Configuration
public class RedisConfig  {
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 注入 RedisConnectionFactory
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@Autowired
RedisConnectionFactory redisConnectionFactory;

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 实例化 RedisTemplate 对象
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@Bean
</span><span style="color: rgba(0, 0, 255, 1)">public</span> RedisTemplate&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)"> functionDomainRedisTemplate() {
    RedisTemplate</span>&lt;String, Object&gt; redisTemplate = <span style="color: rgba(0, 0, 255, 1)">new</span> RedisTemplate&lt;&gt;<span style="color: rgba(0, 0, 0, 1)">();
    initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> redisTemplate;
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 设置数据存入 redis 的序列化方式
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> redisTemplate
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> factory
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> initDomainRedisTemplate(RedisTemplate&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)"> redisTemplate, RedisConnectionFactory factory) {
    redisTemplate.setKeySerializer(</span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StringRedisSerializer());
    redisTemplate.setHashKeySerializer(</span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StringRedisSerializer());
    redisTemplate.setHashValueSerializer(</span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JdkSerializationRedisSerializer());
    redisTemplate.setValueSerializer(</span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JdkSerializationRedisSerializer());
    redisTemplate.setConnectionFactory(factory);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 实例化 HashOperations 对象,可以使用 Hash 类型操作
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> redisTemplate
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@Bean
</span><span style="color: rgba(0, 0, 255, 1)">public</span> HashOperations&lt;String, String, Object&gt; hashOperations(RedisTemplate&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)"> redisTemplate) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> redisTemplate.opsForHash();
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 实例化 ValueOperations 对象,可以使用 String 操作
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> redisTemplate
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@Bean
</span><span style="color: rgba(0, 0, 255, 1)">public</span> ValueOperations&lt;String, Object&gt; valueOperations(RedisTemplate&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)"> redisTemplate) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> redisTemplate.opsForValue();
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 实例化 ListOperations 对象,可以使用 List 操作
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> redisTemplate
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@Bean
</span><span style="color: rgba(0, 0, 255, 1)">public</span> ListOperations&lt;String, Object&gt; listOperations(RedisTemplate&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)"> redisTemplate) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> redisTemplate.opsForList();
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 实例化 SetOperations 对象,可以使用 Set 操作
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> redisTemplate
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@Bean
</span><span style="color: rgba(0, 0, 255, 1)">public</span> SetOperations&lt;String, Object&gt; setOperations(RedisTemplate&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)"> redisTemplate) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> redisTemplate.opsForSet();
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 实例化 ZSetOperations 对象,可以使用 ZSet 操作
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> redisTemplate
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@Bean
</span><span style="color: rgba(0, 0, 255, 1)">public</span> ZSetOperations&lt;String, Object&gt; zSetOperations(RedisTemplate&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)"> redisTemplate) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> redisTemplate.opsForZSet();
}</span></pre>

   

     Redis  实现 session 共享  sessionConfig 配置

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
public class SessionConfig {
}

 

     调用方法

HttpSession session
session.setAttribute("data", "Session 共享 9966"); String name = "端口号:9966========="+ session.getAttribute("data");

 

   分别运行两个一样的配置 session 就共享了

     源码  良心制作 :https://gitee.com/xdymemory00/FuZaiJunHeng_Redis_session-GongXiang

     nginx +Redis window64 版本工具:https://gitee.com/xdymemory00/Redis_Nginx-GongJu.git

 

 

运行之后收工!!!!!!!!!!