博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis-Java 交互的应用
阅读量:6319 次
发布时间:2019-06-22

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

一、首先介绍一下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包

   

org.springframework.session
spring-session-data-redis

    

       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 配置

@RestControllerpublic class RedisController {    @Autowired    private RedisServiceImpl service;    //添加    @RequestMapping(value = "/add", method = RequestMethod.GET)    public void test() {        System.out.println("start.....");        RedisModel m = new RedisModel();        m.setName("张三");        m.setTel("1111");        m.setAddress("深圳1");        m.setRedisKey("zhangsanKey01");        service.put(m.getRedisKey(), m, -1);        RedisModel m2 = new RedisModel();        m2.setName("张三2");        m2.setTel("2222");        m2.setAddress("深圳2");        m2.setRedisKey("zhangsanKey02");        service.put(m2.getRedisKey(), m2, -1);        RedisModel m3 = new RedisModel();        m3.setName("张三3");        m3.setTel("2222");        m3.setAddress("深圳2");        m3.setRedisKey("zhangsanKey03");        service.put(m3.getRedisKey(), m3, -1);        System.out.println("add success end...");    }    //查询所有对象    @RequestMapping(value = "/getAll", method = RequestMethod.GET)    @ResponseBody    public Object getAll() {        return service.getAll();    }    //查询所有key    @RequestMapping(value = "/getKeys", method = RequestMethod.GET)    @ResponseBody    public Object getKeys() {        return service.getKeys();    }    //根据key查询    @RequestMapping(value = "/get", method = RequestMethod.GET)    public Object get(String key) {        RedisModel m = new RedisModel();        m.setRedisKey(key);        return service.get(m.getRedisKey());    }    //删除    @RequestMapping(value = "/remove", method = RequestMethod.GET)    @ResponseBody    public void remove() {        RedisModel m = new RedisModel();        m.setRedisKey("zhangsanKey01");        service.remove(m.getRedisKey());    }    //判断key是否存在    @RequestMapping(value = "/isKeyExists", method = RequestMethod.GET)    @ResponseBody    public void isKeyExists() {        RedisModel m = new RedisModel();        m.setRedisKey("zhangsanKey01");        boolean flag = service.isKeyExists(m.getRedisKey());        System.out.println("zhangsanKey01 是否存在: "+flag);    }    //查询当前缓存的数量    @RequestMapping(value = "/count", method = RequestMethod.GET)    @ResponseBody    public Object count() {        return service.count();    }    //清空所有key    @RequestMapping(value = "/empty", method = RequestMethod.GET)    @ResponseBody    public void empty() {        service.empty();    }
IRedisService 配置
public abstract class IRedisService
{ @Autowired protected RedisTemplate
redisTemplate; @Resource protected HashOperations
hashOperations; /** * 存入redis中的key * * @return */ protected abstract String getRedisKey(); /** * 添加 * * @param key key * @param doamin 对象 * @param expire 过期时间(单位:秒),传入 -1 时表示不设置过期时间 */ public void put(String key, T doamin, long expire) { hashOperations.put(getRedisKey(), key, doamin); if (expire != -1) { redisTemplate.expire(getRedisKey(), expire, TimeUnit.SECONDS); } } /** * 删除 * * @param key 传入key的名称 */ public void remove(String key) { hashOperations.delete(getRedisKey(), key); } /** * 查询 * * @param key 查询的key * @return */ public T get(String key) { return hashOperations.get(getRedisKey(), key); } /** * 获取当前redis库下所有对象 * * @return */ public List
getAll() { return hashOperations.values(getRedisKey()); } /** * 查询查询当前redis库下所有key * * @return */ public Set
getKeys() { return hashOperations.keys(getRedisKey()); } /** * 判断key是否存在redis中 * * @param key 传入key的名称 * @return */ public boolean isKeyExists(String key) { return hashOperations.hasKey(getRedisKey(), key); } /** * 查询当前key下缓存数量 * * @return */ public long count() { return hashOperations.size(getRedisKey()); } /** * 清空redis */ public void empty() { Set
set = hashOperations.keys(getRedisKey()); set.stream().forEach(key -> hashOperations.delete(getRedisKey(),key)); }

  RedisServiceImpl 配置

@Servicepublic class RedisServiceImpl extends IRedisService
{ private static final String REDIS_KEY = "TEST_REDIS_KEY"; @Override protected String getRedisKey() { return this.REDIS_KEY; }}

 

RedisModel 配置

public class RedisModel implements Serializable {    private String redisKey;//redis中的key    private String name;//姓名    private String tel;//电话    private String address;//住址    public String getRedisKey() {        return redisKey;    }    public void setRedisKey(String redisKey) {        this.redisKey = redisKey;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getTel() {        return tel;    }    public void setTel(String tel) {        this.tel = tel;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }

   

  RedisConfig配置

  

@Configurationpublic class RedisConfig  {    /**     * 注入 RedisConnectionFactory     */    @Autowired    RedisConnectionFactory redisConnectionFactory;    /**     * 实例化 RedisTemplate 对象     *     * @return     */    @Bean    public RedisTemplate
functionDomainRedisTemplate() { RedisTemplate
redisTemplate = new RedisTemplate<>(); initDomainRedisTemplate(redisTemplate, redisConnectionFactory); return redisTemplate; } /** * 设置数据存入 redis 的序列化方式 * * @param redisTemplate * @param factory */ private void initDomainRedisTemplate(RedisTemplate
redisTemplate, RedisConnectionFactory factory) { redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer()); redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); redisTemplate.setConnectionFactory(factory); } /** * 实例化 HashOperations 对象,可以使用 Hash 类型操作 * * @param redisTemplate * @return */ @Bean public HashOperations
hashOperations(RedisTemplate
redisTemplate) { return redisTemplate.opsForHash(); } /** * 实例化 ValueOperations 对象,可以使用 String 操作 * * @param redisTemplate * @return */ @Bean public ValueOperations
valueOperations(RedisTemplate
redisTemplate) { return redisTemplate.opsForValue(); } /** * 实例化 ListOperations 对象,可以使用 List 操作 * * @param redisTemplate * @return */ @Bean public ListOperations
listOperations(RedisTemplate
redisTemplate) { return redisTemplate.opsForList(); } /** * 实例化 SetOperations 对象,可以使用 Set 操作 * * @param redisTemplate * @return */ @Bean public SetOperations
setOperations(RedisTemplate
redisTemplate) { return redisTemplate.opsForSet(); } /** * 实例化 ZSetOperations 对象,可以使用 ZSet 操作 * * @param redisTemplate * @return */ @Bean public ZSetOperations
zSetOperations(RedisTemplate
redisTemplate) { return redisTemplate.opsForZSet(); }

   

     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

 

 

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

 

转载于:https://www.cnblogs.com/memoryXudy/p/7799704.html

你可能感兴趣的文章
.net core 2.0 HTTPS request fails using HttpClient 安全错误
查看>>
关于DataGridViewComboBoxColumn的二三事
查看>>
Oracle truncate、 delete、 drop区别
查看>>
[转] GMT、UTC与24时区 等时间概念
查看>>
重建二叉树
查看>>
支付宝开发
查看>>
正则小结
查看>>
overflow与min-width
查看>>
弹出窗
查看>>
记一次网站部署遇到的问题
查看>>
每天几条java题(2)
查看>>
【Flutter学习】组件学习之目录
查看>>
ios cordova报gap://ready 弹出框,一直弹
查看>>
mysql开启skip-name-resolve 导致root@127.0.0.1(localhost)访问引发的ERROR 1045 (28000)错误解决方案...
查看>>
JS与JQ的对比与提高
查看>>
Linux 高可用开源方案 Keepalived VS Heartbeat对比
查看>>
谈谈垃圾回收机制方式及内存管理
查看>>
yarn 切换 设置 镜像 源
查看>>
幸福人生讲座(八):行胜于言
查看>>
SQL触发器实例(上)
查看>>