项目开发中一些特定的数据我们不一定要关系型数据库来存储,使用非关系型数据库反而更方便读取数据,效率高,这里介绍一下在java中rides的使用

1. 导入rides所需要的相关依赖jar包(在pom文件中):

     <!-- jedis工具包 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.4.2</version></dependency><!-- gson依赖,用于把对象存在redis中转换格式--><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version></dependency>

2. 在applicationContext.xml配置文件中创建rides连接池,以及properties文件的配置:

 <!-- 读取properties配置文件的标签,因为多个文件使用的是一个IOC容器,所以只要在一个文件中读取就可以 --><context:property-placeholder location="classpath:properties/*.properties"/><!-- 配置redis的相关信息 --><!-- Redis连接池的配置 --><bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"><property name="maxTotal" value="${redis.pool.maxActive}" /><property name="maxIdle" value="${redis.pool.maxIdle}" /><property name="minIdle" value="${redis.pool.minIdle}" /><property name="maxWaitMillis" value="${redis.pool.maxWait}" /><property name="testOnBorrow" value="${redis.pool.testOnBorrow}" /><property name="testOnReturn" value="${redis.pool.testOnReturn}" /></bean><!-- 在java中需要调用redis的地方注入jedisPool这个连接池对象 --><bean id="jedisPool" class="redis.clients.jedis.JedisPool"><constructor-arg index="0" ref="jedisPoolConfig" /><constructor-arg index="1" value="${redis.hostName}" /><constructor-arg index="2" value="${redis.port}" /><constructor-arg index="3" value="${redis.timeout}" /><!--Redis密码 --><!--<constructor-arg index="4" value="${redis.password}" /> --></bean>
redis.hostName=192.168.1.238
redis.port=6379
redis.password=
redis.timeout=5000
redis.pool.maxActive=300
redis.pool.maxIdle=250
redis.pool.minIdle=200
redis.pool.maxWait=3000
redis.pool.testOnBorrow=true
redis.pool.testOnReturn=true

3. 创建一个工具类用来存放可能用到的属性等信息:

/**用来存用户的点赞信息等属性 */
public class RedisKey {//我关注的人的列表public static final String FOLLOW_USER = "follow_user";//关注我的人的列表public static final String FOLLOWED_USER = "followed_user";//我关注的话题列表public static final String FOLLOW_TOPIC = "follow_topic";//我关注的问题列表public static final String FOLLOW_QUESTION = "follow_question";//获得收藏的次数public static final String COLLECTION_COUNT = "collection_count";//获得点赞的次数public static final String ZAN_COUNT = "zan_count";
}

4. rides在java项目中的使用(rides存储对象和实现用户免登陆效果):

  1. 创建一个rides连接池对象Jedis,只用@Autowired
  2. 使用rides存放用户对象信息下面是一个新增用户功能的实现,用到了工具类:通常,点赞,关注人数,收藏数这些信息可以使用rides来存储
@Service
public class UserServiceImp extends BaseServiceImpl<User> implements UserService {//注入一个redis的连接池对象@AutowiredJedisPool jedisPool;@Overridepublic void register(User user) {//初始化redis中的个人信息数据//集合类型可以用 11231:follow_user 112 1132  233//通过连接池对象获得一个连接,相当于从连接池中拿一个连接Jedis jedis =  jedisPool.getResource();//创建一个rides连接对象//存关注的人等集合信息使用sadd()jedis.sadd(user.getId()+":"+RedisKey.FOLLOW_USER, "3","4","5");//存的集合默认null值不适合初始化//存点赞次数集合,数值类型也用string,收藏次数默认值都是“0”jedis.set(user.getId()+":"+RedisKey.ZAN_COUNT, "0");jedis.set(user.getId()+":"+RedisKey.COLLECTION_COUNT, "0");}
}
  1. 将用户对象转换成gson格式的字符串存到rides中(登录的时候把对象信息存到rides中,可以将rides的key存到cookie中):
 @Overridepublic int selectByEmailaPwdaState(User user,HttpSession httpsession,HttpServletResponse response) {//登录成功后将对象存到redis中,转换成gson字符串格式,cookie从redis中获取对象//通过连接池对象获得一个连接,相当于从连接池中拿一个连接Jedis jedis = jedisPool.getResource();Gson gson = new Gson();//创建gson对象//key用随机字符串将转化成json格式的对象存入redisString key = UUID.randomUUID().toString();jedis.setex("SESSION:"+key, 60*60*24*3, gson.toJson(user1));//登录成功后存入cookie,实现免登陆效果//token授权的意思,key随机字符用来调用redis中对象字符串Cookie cookie = new Cookie("token",key);//创建cookie,里面存redis的keycookie.setMaxAge(60*60*24*3);//设置cookie的失效时间cookie.setPath("/");//设置cookie作用域在当前项目下response.addCookie(cookie);//写入cookie}
  1. 在拦截器中通过key取出rides中的值(实现免登录效果):
     //注入一个redis的连接池对象@AutowiredJedisPool jedisPool;//通过连接池对象获得一个连接,相当于从连接池中拿一个连接Jedis jedis = jedisPool.getResource();//根据cookie来判断是否登录//得到所有的cookieCookie[] cookies = req.getCookies();for(Cookie cookie : cookies){//查看cookie中有没有叫token的授权码key,指向的是redis中登录时存的user对象if(cookie.getName().equals("token")){//如果有取出token中的key授权码value去核对String token = cookie.getValue();//在redis中看该授权码对应的信息是否正确String result = jedis.get("SESSION:"+token);if(result==null){//如果在redis中没有对应的信息跳转到登录页面resp.sendRedirect("/login.jsp");return false;}else{//不等于空说明已登录,通过//因为是免登陆效果当退出的时候session已经被清空,需要在这里重新把对象存到sessionGson gson = new Gson();User user = gson.fromJson(result, User.class);req.getSession().setAttribute("user", user);return true;}}}
  1. 删除rides中的某个值,通过key删除某个值:
     //清除redis,删除掉某个keyJedis jedis = jedisPool.getResource();jedis.del("SESSION:"+value);

java项目中rides的使用相关推荐

  1. Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决...

    问题描述: mac笔记本本身会自带几个python版本,比如python2.7版本,我没有改动mac默认的python版本,只是安装了python3.7版本. 使用Pycharm开发Python项目没 ...

  2. java聊天室小程序论文_在Java项目中利用continue与break制作一个聊天室小程序

    在Java项目中利用continue与break制作一个聊天室小程序 发布时间:2020-12-08 16:03:27 来源:亿速云 阅读:98 作者:Leah 在Java项目中利用continue与 ...

  3. java项目怎么定义异常_在Java项目中如何实现自定义异常

    在Java项目中如何实现自定义异常 发布时间:2020-11-11 15:41:32 来源:亿速云 阅读:77 作者:Leah 这篇文章将为大家详细讲解有关在Java项目中如何实现自定义异常,文章内容 ...

  4. XML在JAVA项目中的作用

    java项目中,xml文件一般都是用来存储一些配置信息 一般的编程, 多数用来存储配置信息 . 拿JDBC来说,可以把数据库连接字符串写到xml,如果要修改数据源,只需要改xml就可以了,没必要再去重 ...

  5. Redis学习笔记之二 :在Java项目中使用Redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

  6. redis java驱动_Redis学习笔记之二 :在Java项目中使用Redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

  7. Ant在Java项目中的使用(一眼就看会)

    参考:http://www.cnblogs.com/zhengqiang/p/5557155.html Ant是跨平台的构建工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将A ...

  8. 在Java项目中整合Scala

    Scala是一个运行在Java JVM上的面向对象的语言.它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程.具有这些优势,使得我最近很想在 ...

  9. java项目中的classpath

    在java项目中,你一定碰到过classpath,通常情况下,我们是用它来指定配置/资源文件的路径.在刚开始学习的时候,自己也糊里糊涂,但是现在,是时候弄清楚它到底是指什么了. 顾名思义,classp ...

最新文章

  1. 以太坊搭建,不能使用puppeth 创建初始块,报错Fatal: Failed to write genesis block: unsupported fork ordering: eip15
  2. CSS之创建等高列布局之三
  3. 字符数组和strcpy
  4. Java设计模式学习总结(9)——结构型模式之过滤器模式(标准模式)
  5. Python3安装cx_Oracle连接oracle数据库实操总结
  6. oa处理会签流程图_OA协同流程管理解决方案
  7. 南阳理工ACM 28大数阶乘
  8. Archlinux下firefox无法使用支付宝控件(aliedit)输入密码/进行支付的解决办法
  9. Mybatis(狂神老师上课笔记)
  10. K.function的用法
  11. TextView添加中划线、下划线等
  12. 彼泽清陂nbsp;菡萏悠悠
  13. 【解决方法】Win10还原默认打开方式图标
  14. 2023年新自采集壁纸网页源码+简约大气
  15. [EXCEL] 用excel做动态仪表盘,so easy~
  16. 马毅与来自高维度的恩赐
  17. 淘宝/天猫API:img2text-图片识别商品接口
  18. 华为NQA与默认路由
  19. 怎么去水印不破坏原图?这4个方法,无痕去除图片水印
  20. 本科3-4万、硕士6万、博士8万!杭州这个区发力引人

热门文章

  1. R044---如何用UiPath抓取数据(DataScraping)?
  2. python三维图如何标注曲面_(python)使用colormap作为第4维,x,y,z函数绘制3d曲面 - python...
  3. 简易版的商品sku表格
  4. TSN、TRN、ECO、 S3D、I3D-GCN、SlowFastNet、LFB
  5. linux生成动态链接库返回字符串,Linux动态链接库的生成和使用
  6. iterable类型
  7. XR中台的未来发展方向
  8. Domain's DNS record could not be retrieved问题解决
  9. RPA技巧-禁止远程电脑共用剪贴板方法
  10. linux temp文件夹在哪_手机文件夹为什么都是英文?到底哪些可以删除?看完涨知识了...