强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan

【前言】

唯妍最近在研究Redis并且想把Redis加在选课这块儿,正好自己最近在项目中应用了Redis并且之前在家的时候接触过选课这块儿的内容;所以我们针对这块儿的实现进行了几次探讨,以下是唯妍在实现过程中遇到问题我们根据问题进行探讨一些精彩地方的整理。

【愉快的交流】

一、几点简单说明:

1、选课功能简介:选课的指定在某一段时间内有很多学生集中进行选,类似于12306抢票以及淘宝或京东上的抢东西;

2、选课特点:单位时间内并发量大,操作频繁(不断的抢课退课等);

3、选课上一半版本已经完成的工作:选课功能已经实现,实现过程中未用缓存,出现问题操作慢服务器的压力大;

4、现在需要做的工作:加入缓存,提高性能。

  二、针对实现遇到问题的探讨:

1、为什么要用Redis?

探讨结果:所有技术的选用根据本身业务而定,适合业务的技术才是最好的技!上一版本没有采用缓存导致所有的操作都与数据库打交道,大家都知道频繁与数据库建立连接和关闭连接是十分耗时的,而选课是对数据的操作十分频繁;导致了服务器的压力特别大,为了解决这个问题采用Redis!

2、Redis用在哪块儿?

探讨结果:选课大致流程:教师配置相关课程—学生登录—根据自己学号查询到自己可以选择的相关课程—进行课程选取操作—退出系统;之前是所有的数据及操作都是在数据库中,现在教师配置完相应的课程后将相关信息存到数据库一份相应的往Redis中放一份,这样当学生在选课的时候会从Redis中读到选课的相关信息,选和退选等等操作不再和数据库打交道而直接和Redis打交道,最终选完后将Redis中的数据写到数据库中即可。(注:学生相关的校验等等细节略去)

3、学生登录后进入选课的界面,自己属于哪个年级和班级以及一些基本信息不变,而需要进行选课以及退选时课程时课程的容量有变化;这些显示都在一个页面上之前实现是每次课程改变要刷新整个页面,如何做到只让课程的余量改变?

探讨结果:前台每次Ajax获取改变的整个页面的Model从而为页面所有信息赋值,现在可以在调用Ajax的时候做个判断,界面不变的文本框中是否有内容,如果有内容说明不是第一次加载,这时只需要调用另外一个Ajax去把课程容量取出即可,如果无内容则说明是第一次登录,这时将所有信息都获取到;这样一来大大的减少了对没必要的信息读取。

4、选课中存在高并发问题,如何避免那?(最典型是课程容量问题,一个时间段大家都来抢课程,课程容量的更新过程便存在这个问题)

探讨结果:用Redis的事物来防止高并发,当很多人都来操作容量的时候,大家都排着队一个执行完后另外一个才能再执行;这相比在数据库中上锁还是要快的,毕竟直接访问内存要比访问数据库少走了硬盘这个过程呗。这个过程测试目前还未做,需要进一步的测试来验证。

【总结】

1、关于交流:和对一个事物认识相差不太多的人交流,效率和收获比较大;相反很大一部分交流是无效交流;要尽可能大的提高交流的效率则建立在双方对这个事物的有了一定的了解基础上。

2、想法很重要,遇到问题有解决的想法比具体的实现其实更重要,当然具体的实现来验证自己的想法也是必不可少滴。

选课中应用Redis一些思考相关推荐

  1. python使用redis_python应用中使用redis的几个思考

    使用pipeline来提高性能 应该使用pipeline来将多个请求组合在一起,一次性在发送给服务器,并返回结果. import redis from redis.client import Pipe ...

  2. Redis面试 - 生产环境中的 redis 是怎么部署的?

    面试题 生产环境中的 redis 是怎么部署的? 面试官心理分析 看看你了解不了解你们公司的 redis 生产集群的部署架构,如果你不了解,那么确实你就很失职了,你的 redis 是主从架构?集群架构 ...

  3. c#获取对象的唯一标识_在 Java 中利用 redis 实现分布式全局唯一标识服务

    作者: 杨高超 juejin.im/post/5a4984265188252b145b643e 获取全局唯一标识的方法介绍 在一个IT系统中,获取一个对象的唯一标识符是一个普遍的需求.在以前的单体应用 ...

  4. 在java中使用redis

    在java中使用redis很简单,只需要添加jedist.jar,通过它的api就可以了.而且,api和redis的语法几乎完全相同.以下简单的测试: 参考:http://www.runoob.com ...

  5. django 框架中应用 redis 集群

    1. 在 setting.py 中添加 : CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION' ...

  6. 在 Java 中利用 redis 实现 LBS 服务

    前言 LBS(基于位置的服务) 服务是现在移动互联网中比较常用的功能.例如外卖服务中常用的我附近的店铺的功能,通常是以用户当前的位置坐标为基础,查询一定距离范围类的店铺,按照距离远近进行倒序排序. 自 ...

  7. PHP中使用redis执行lua脚本示例

    一.引言 redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入到大多数语言当中,来扩展其功 ...

  8. windos中加入redis

    windos中加入redis sc create redis binPath= D:\redis\redis-server.exe start= auto 最近用php开发了一个redis程序,当要部 ...

  9. springboot中使用redis详解

    一.redis简介 redis是一款高性能key-value(键值对)内存型数据库,是非关系型数据库的一种,它采用单线程的架构方式,避免了多线程存在的锁处理造成的资源耗费,读取速度非常快,非常适合变化 ...

最新文章

  1. NeurIPS 2019公布获奖论文!新增杰出新方向奖项,微软华裔研究员斩获经典论文...
  2. android String的replace和replaceAll的使用
  3. [LeetCode] 21. Merge Two Sorted Lists ☆
  4. IntelliJ IDEA Maven jar包冲突解决,快速发现jar包冲突
  5. ffmpeg 为取经而来_伊力特的英雄情结从何而来?
  6. 2011年华科计算机考研复试笔试算法、数据库(回忆版)
  7. java swing双缓冲_java中的双缓冲技术
  8. 大数据_MapperReduce_Hbase的优化和Hbase相关面试题_以及hbase的javaapi的一部分源码---Hbase工作笔记0029
  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(67)-MVC与ECharts
  10. 真正勇猛的程序员,敢于让鲁迅崩溃!
  11. MySQL获取数据库连接对象_利用JDBC连接mysql数据库,获取连接对象的通用格式
  12. tar命令压缩和解压缩
  13. 拓端tecdat|二手闲置物品交易数据快照
  14. JavaScript如何调用摄像头
  15. MC 2017数控车床编程基础到精通详细视频教程
  16. linux如何查看路由器ip地址,如何查找路由器IP地址?
  17. 招聘数据采集+Hive数据分析+数据可视化
  18. windows 7 自带计算器详解
  19. 攀藤 5003粉尘激光传感器arduino使用
  20. EntityFramWork DbContext 自定义connectionString

热门文章

  1. 黑客少年手机编 10 万行代码,恶意篡改 App 只为了 “炫技”?
  2. 苹果春季发布会:绝不玩别人玩剩下的!
  3. 程序员如何用编程套路追到女朋友的?
  4. python实现邮件客户端_python socket实现web服务器,邮件客户端
  5. ubuntu合并终端_技术|初级:如何在终端及图形界面中更新 Ubuntu
  6. laravel yii thinkphp 框架对比_thinkPHP--项目
  7. java计算两个数组的交集_回顾面试题:计算两个数组交集
  8. linux打印jvm内存堆栈_jvm内存堆栈监控之jmap篇
  9. 接收大文件流_一文搞定 Node.js 流 (Stream)
  10. 计算机安全的重要性 小论文,网络安全的重要性初中议论文