• 1 未解决
    0
    swoole2010期 第二次课课堂笔记2 redis list 应用案例

    //链接Redis

    $redis = new Redis();

    $redis->connect("127.0.0.1", 6379);

     //基础操作

    if (0) {

    //进入队列 从右边进入

    $redis->rpush("books", "php", "java", "python");

    //进入队列 从左边进入

    // $redis->lpush("books", "php", "java", "python");

    //获取长度

    // $redis->llen("books");

    //左边出

    // $redis->lpop("books");

    //右边出

    // $redis->rpop("books");

    //指定10秒内返回,假如10秒没有可返回的数据,就返回nil

    $redis->blpop("books", 10);

    //在某一个元素前/后添加一个元素

    $redis->linsert("books", "before", "java", "c++");

    //通过索引获取一个元素

    dd($redis->lindex("books", 2), 'lindex');

    //通过索引获取list区间内多个元素

    dd($redis->lrange("books", 0, -1), 'lrange');

    //保留下标索引 1-3 的元素,其他去掉

    dd($redis->ltrim("books", 1, 3), 'ltrim');

    dd($redis->lrange("books", 0, 2), 'lrange');

    }

    /*

     *  消息队列

     *  //进入队列 从右边进入 右边出

     * */

    if(1){

        //专门接收数据存入list 中

       $redis->rpush("books", "php", "java", "python");


        //专门获取数据处理

    //    $text = $redis->blpop("books", 10);

        $text = $redis->lpop("books" );

        $len = $redis->lLen("books");

        dd($len,'length');

        if($text){

            dd($text,"to do some thing");

        }

        //to do some thing

    }

    /*

     * list 应用场景

     * page 分页查询

     * */

    if(0){

        //根据一定的排序获取主键ID

        //存入list中  1,2,3,4,5,6,7,8,9

        $ids_arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

        foreach ($ids_arr as $id){

            $redis->rpush("article_page_ids", $id);

        }

        //每页三个

        $size = 3;

        //第一页: 0,2

        //第二页: 3,5

        //第三页: 6,8

        //分页计算排序 ($page-1) * size ,($page) * size -1

        $ids = [];

        $len = $redis->lLen("article_page_ids");

        dd($len,'length');

        for ( $page = 1;$page<= ceil($len/$size);$page++ ){

            //返回分页数据的ID集合

            $ids = $redis->lrange("article_page_ids", ($page-1) * $size ,($page) * $size -1);

            // 根据主键查询数据 自定义字符串/数字来实现排序

            $sql[$page] = "select * from aritcle where id in(".implode(',',$ids).") order by field(id,".implode(',',$ids).")";

        }

        dd($sql,'sql');

    }


  • 1 未解决
    0
    swoole2010期 第二次课课堂笔记1 redis string 应用案例

    //链接Redis

    $redis = new Redis();

    $redis->connect("127.0.0.1", 6379);

    //基础操作

    if(0){   

         //清空库

        $redis->flushAll(); // 删除所有数据库

        $redis->flushDB(); //删除当前数据库

        $redis->set("name", "kongling");  //保存 K-V 键值对字符串   

        dd($redis->get("name"), "get key:name");  //获取 key:name 的value值  

        // $redis->Mget('name');   //批量读取keys    

        $redis->type("name");  //判断key 的类型 

        $redis->set("name", "sixstar");    //修改 value 值 /直接覆盖

        //修改/替换 value 部分 值

        $redis->setRange("name", 3, "fire"); //把 sixstar 修改为 sixfire

        dd($redis->get("name"), '把 sixstar 修改为 sixfire');

      

        $redis->getrange("name", 0, 5);   //截取字符串长度


        //判断key 是否存在,如果存在不修改,如果不存在新增  赋值判断原值是否存在,存在不赋值,返回0;不存在才赋值,返回1;命令setnx

        $redis->setnx("name", "hello world");

        //设置key 生存时间

        $redis->set("zoon", "dog");

        $redis->expire("zoon", 20); //单位 秒

        $redis->setex("botany", 50, "flower"); //单位 秒

        $redis->psetex("botany", 50000, "fruits"); //单位 毫秒

        //获取key 的生存时间

        $redis->ttl("zoon"); //单位 秒

        $redis->pttl("botany"); //单位 毫秒

        //mset 同时设置多个kv键值对

        $arr = [

            "dog_name" => "小花",

            "cat_name" => "小毛",

            "fish_name" => "小飞",

        ];

        $redis->mset($arr);

        $redis->msetnx($arr); // msetnx 为原子性,判断如果有一个存在,全部都不设置


        //给 key 尾部追加字符串

        $redis->append("name", "is veally good");


        // 获取原有value值的同时写入新的value值

        $redis->getset("name", "veally goods");


        // redis数据加法计算命令incr,incrby,数据加法运算,incr为+1内置运算,incrby为+n自设n运算

        $redis->incr("count");

        $redis->incrby("num", 10);


        //redis数据减法计算命令decr,decrby, 数据减法运算,decr为-1内置运算,decrby为减n自设n运算

        // $redis->set("count", 10);

        dd($redis->decr("count"), 'decr("count")');

        $redis->decrby("num", 5);


        //获取string长度的命令strlen

        $redis->strlen("name");


        //删除key

        $redis->del("name");

       

    }

    /*

     * string 应用场景

     * session 分布式集群服务器 登录同步

     * 配置服务器的 PHP 的session 存储到 Redis中去

     * 具体操作 :略

     * */


    /*

     * string 应用场景

     * Inc incrBy decr decrBy 计数器

     * */

    if(0){

        $redis->incr("count"); //每次自动加一

        $redis->incrBy("num",3);//每次自动加 自定义数值


        $redis->decr("count"); //每次自动减一

        $redis->decrBy("num",3);//每次自动减 自定义数值

    }

    /*

     * 请求拦截

     * 短信发送

     * 5分钟内最多发送5次

     * */

    if(1){

    //    $redis->flushAll();

        $phone = "130****1418";

        $key = "phone:".$phone;

        $redis->exists($key) ? $redis->incr($key) : $redis->setex($key,30,1)  ;

       /* if(!$redis->exists($key)  ){

            $redis->setex($key,30,1);

            dd($redis->get($key),"count ");

        }else{

            dd("count incr ");

            $redis->incr($key);

        }*/

        $count = $redis->get($key);

        if($count>5){

            exit("对不起,您发送次数太过频繁,请稍后再发送");

        }

        //to do send Phone Msg

        dd($count,"to do send Phone Msg");

    }



  • 1 未解决
    0
    win10 Docker Desktop + laradocker 响应慢

    attachments-2020-12-zxXD3M0d5fcb1019cec71.png
    接口心跳测试,没有数据库操作,响应时间出奇的慢(3s+),是哪里没配置好吗?

  • 1 未解决
    3
    虚拟机崩了怎么办?

    虚拟机未正常关机,结果启动时崩溃了,数据库中有很多重要的数据,可以恢复吗?

  • 1 未解决
    0
    \Closure $next

    这个是什么

  • 1 未解决
    0
    匿名函数一般哪里使用
  • 1 已解决
    5
    thinkphp分页查询,后台处理怎么做?

    对于thinkphp不是很理解,在db这块的应用。

    希望大家可以解下惑,谢谢

  • 1 已解决
    0
    ubuntu 普通用户设置的crontab任务不会执行吗?

    我用普通用户的身份添加了一个crontab任务:

    0 16 * * * xxxxxxx

    过了时间没有执行,查看crontab.log也没有报错日志。

    咋回事呢?

  • 1 已解决
    0
    rabbitmq中有没有类似redis中set类型的队列?

    如果没有,该如何确保队列中数据是不重复的呢呢

  • 1 已解决
    0
    Shiro 异步报错

    web.xml 关键配置, 可以确定的是配置顺序没有问题

    <!-- 安全过滤 -->
    	<filter>
    		<filter-name>shiroFilter</filter-name>
    		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    		<async-supported>true</async-supported>
    		<init-param>
    			<param-name>targetFilterLifecycle</param-name>
    			<param-value>true</param-value>
    		</init-param>
    	</filter>
    	<filter-mapping>
    		<filter-name>shiroFilter</filter-name>
    		<url-pattern>*.do</url-pattern>
    		<url-pattern>*.json</url-pattern>
    		<url-pattern>*.xhtml</url-pattern>
    	</filter-mapping>
    	
    	<!-- SpringMVC功能 -->
    	<servlet>
    		<servlet-name>dispatcher</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>/META-INF/spring/appconf-*.xml</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    		<async-supported>true</async-supported>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>dispatcher</servlet-name>
    		<url-pattern>*.do</url-pattern>
    		<url-pattern>*.json</url-pattern>
    		<url-pattern>*.xhtml</url-pattern>
    	</servlet-mapping>

    控制器代码1, 像这样加入异步处理,正常响应,但是后台报错

    /**
    	 * 分页查询
    	 * 
    	 * @param queryVo
    	 * @return Pagination<DynamicformVo>
    	 */
    	@RequestMapping("queryPage")
    	@ResponseBody
    	public Callable<Pagination<DynamicformVo>> getGrid(@ModelAttribute("DynamicformQueryVo") final DynamicformQueryVo queryVo) {
    		return new Callable<Pagination<DynamicformVo>>() {
    			@Override
    			public Pagination<DynamicformVo> call() throws Exception {
    				return dynamicformService.queryForPage(queryVo);
    			}
    		};
    	}

     

    控制器代码2, 像这样写,正常处理没有报错,可惜不支持异步

    /**
    	 * 分页查询
    	 * 
    	 * @param queryVo
    	 * @return Pagination<DynamicformVo>
    	 */
    	@RequestMapping("queryPage")
    	@ResponseBody
    	public Pagination<DynamicformVo> getGrid(@ModelAttribute("DynamicformQueryVo") final DynamicformQueryVo queryVo) {
    		return dynamicformService.queryForPage(queryVo);
    	}

    报错如下:

    org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton.  This is an invalid application configuration.
    	at org.apache.shiro.SecurityUtils.getSecurityManager(SecurityUtils.java:123)
    	at org.apache.shiro.subject.Subject$Builder.<init>(Subject.java:627)
    	at org.apache.shiro.SecurityUtils.getSubject(SecurityUtils.java:56)
    	at org.apache.shiro.web.servlet.ShiroHttpServletRequest.getSubject(ShiroHttpServletRequest.java:88)
    	at org.apache.shiro.web.servlet.ShiroHttpServletRequest.getSubjectPrincipal(ShiroHttpServletRequest.java:93)
    	at org.apache.shiro.web.servlet.ShiroHttpServletRequest.getUserPrincipal(ShiroHttpServletRequest.java:111)
    	at org.springframework.web.servlet.FrameworkServlet.getUsernameForRequest(FrameworkServlet.java:1079)
    	at org.springframework.web.servlet.FrameworkServlet.publishRequestHandledEvent(FrameworkServlet.java:1065)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:996)
    	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
    	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
    	at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:659)
    	at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:625)
    	at org.apache.catalina.core.AsyncContextImpl$1.run(AsyncContextImpl.java:237)
    	at org.apache.catalina.core.AsyncContextImpl.doInternalDispatch(AsyncContextImpl.java:380)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:215)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    	at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:299)
    	at org.apache.coyote.http11.AbstractHttp11Processor.asyncDispatch(AbstractHttp11Processor.java:1632)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:599)
    	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2441)
    	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2430)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    	at java.lang.Thread.run(Thread.java:619)

     如上所述,Shiro 在处理Servlet3异步请求时会出现异常?要怎么处理呢?可以通过log4j配置把该错误屏蔽掉,但这不是我想要的效果!

  • 1 已解决
    0
    为啥redis的set类型存储超过一万条数据就会性能下降?

    为啥redis的set类型存储超过一万条数据就会性能下降?

  • 1 已解决
    0
    SpringBoot Get 请求如何将一个时间戳转换为Date, 最好是框架原本就有的

    attachments-2020-03-zd5WhuAK5e70421a55dec.png

    attachments-2020-03-M53cia3m5e7041f9750d9.png

  • 1 已解决
    0
    如何判断两个长json是否相同?

    RT。

    想过转化成字符串然后md5,怎奈两个json转换成字符串后,里面属性的顺序会变(比如第一个json里name在前age在后,第二个json有时就会age在前name在后),这样的话明明是两个相同的json,字符串化以后验证的结果却是不相同的……

    有没有什么方法能快速判断两个长json是否相同呢?

    PS:尤其是对于golang而言,有没有什么更好的办法?

  • 1 已解决
    0
    初始化对象放在私有方法中操作,却对原对象未初始化,为什么?

    attachments-2020-03-oM0AWeVg5e7040a3c75e5.png

    我在打印student上一步,初始化student的私有方法中对student进行了赋值,可上面主方法执行打印后student对象还是null,大佬们可知道为什么吗,感激不尽

    以下为测试代码

    attachments-2020-03-Qa9MEcYP5e70408a2dbf9.png

  • 1 已解决
    0
    redis大量key怎么存比较省空间

    7000w+简单key(key产生规则是笛卡尔积),vlaue基本就是1、2、3这种简单数字,怎么存比较省空间

  • 1 已解决
    0
    两个并发同时请求,修改数据导致数据有一次修改相同的数据

    attachments-2020-03-8xwsbGrD5e6f1f434a35e.png

    加了悲观锁,

    加了泄洪队列,

    加了限流,

    还会出现

  • 1 已解决
    0
    想法讨论:网站文章栏目分类以关键词代替可行吗

    如果发布文章时不需要分类,只需要提供关键词,当需要调用时,以关键词搜索,或者标题搜索、全文搜索方式返回即可。

    提出此想法的原因是觉得让文章按栏目分类,创建栏目繁琐,而且还伴随二级、三级栏目,甚至无限分类等功能。

    所以,我想以关键词取代栏目分类的想法不知可不可行,请大家指点哈!

  • 1 已解决
    0
    外观模式和命令模式的区别

    Java小白求救,外观模式和命令模式有什么区别,它们都是把复杂逻辑屏蔽,只对外提供一个接口。具体要怎么分辨这两个模式呀!

  • 1 已解决
    0
    mysql从5.6升级8.0后,sql查询变慢

    听说mysql8比mysql5要快很多,我们就尝试将mysql从5.6升级到8.0,然后有些sql就变慢了

    sql如下:

    SELECT
       a.id AS 'id',
       CONCAT(a.firstname,' ',a.lastname) AS 'name',
       a.name AS fullName,
       a.firstname AS 'firstname',
       a.lastname AS 'lastname',
       a.teaching_style as teachingStyle,
       a.type_of_english as typeOfEnglish,
       a.avatar AS 'avatar',
       a.avatar_url AS 'avatarurl',
       c.course_id AS courseId,
       CONCAT(
       IFNULL(a.favorable_rate, '100'),
       '%'
       ) AS rate,
       f.file_path AS path
      FROM
      busi_teacher a
      LEFT JOIN busi_tea_schedule b  ON a.id = b.tea_id
      LEFT JOIN busi_tea_course c ON (a.id = c.tea_id AND c.issys = 1)
      LEFT JOIN busi_stu_course d ON b.stu_course = d.id
      LEFT JOIN busi_file f ON f.id = a.avatar
      WHERE   b. STATUS = 1
      AND b.can_normal = 1
      AND ( (a.is_fulltime = 1 AND b.is_contracted = 1) OR a.is_fulltime != 1 )
      AND b.ex_schedule_date > DATE_ADD(NOW(), INTERVAL 24 HOUR)
      AND (b.ex_schedule_date < '2019-12-25 08:00:00' OR b.ex_schedule_date > '2019-12-27 07:59:00')
      AND (b.ex_schedule_date < '2020-01-01 08:00:00' OR b.ex_schedule_date > '2020-01-02 07:59:00')
       AND a. STATUS IN (3, 7)
      AND b.del_flag = 0
      AND a.del_flag = 0
      AND a.isuse = 1
      AND (b.stu_course IS NULL OR d.course_status = 3)
      AND  FIND_IN_SET('152',c.course_id)
        AND HOUR(b.ex_schedule_date) < 21
        GROUP BY a.id
      ORDER BY b.is_contracted DESC, a.promoted DESC,(CASE a.is_fulltime WHEN 1 THEN 1 WHEN 0 THEN 2 ELSE 3 END),a.firstname
      LIMIT  10;

    mysql版本5.6.16-log:执行0.157s,explain如下

    up-241e59b6556c3035de3c5b00420006376dd.png

    up-88b6df7fe9fd90c05c914e8763339cd2948.png

    mysql版本8.0.16:执行2.080s,explain如下

    up-06593bfbafd4c908443f2af7f60b1162a2a.png

    up-d0ef442beab9c7849e0f00b3c134489cb5b.png

    mysql8先执行a表,mysql5.6先执行b表。mysql8的Creating sort index花费了99%的时间,我将排序去掉后两个版本都执行一遍后,mysql8是要比mysql5.6要快,但是加上排序后mysql8就很慢了,感觉是在mysql8中排序并没有用到索引。有没有大神能看出来是哪儿出了问题吗,是mysql系统参数设置有问题吗?

  • 1 已解决
    0
    Xtrabackup8 对docker中容器的mysql备份

    我想对docker部署的mysql8.0.19进行备份,一开始试了一下Xtrabackup8.0.9 发现宿主机安装Xtrabackup不能连接到docker的mysql,需在docker容器里面安装。因为是微服务系统,数据库会有多个不想在每个容器中都安装Xtrabackup,请教各路大神宿主机安装Xtrabackup怎么对docker 容器的mysql备份,或者还有没有其它更好用的备份工具, mysqldump  这种方式不考虑

    一下是允许命令后的异常信息

    xtrabackup: recognized server arguments:--log_bin=mysql-bin--server-id=1--innodb_flush_log_at_trx_commit=1--innodb_log_buffer_size=1M--innodb_buffer_pool_size=64M--innodb_log_file_size=48M--innodb_autoextend_increment=64--innodb_open_files=300--innodb_file_per_table=1--innodb_checksum_algorithm=0--open_files_limit=4161xtrabackup: recognized client arguments:--user=root--password=*--host=172.17.0.2--port=8250--backup=1--parallel=4--target-dir=/home/back/db_cms_xtrabackupversion8.0.9basedonMySQLserver8.0.18Linux(x86_64)(revisionid:c5cbbe4)20031415:23:24version_checkConnectingtoMySQLserverwithDSN'dbi:mysql:;mysql_read_default_group=xtrabackup;host=172.17.0.2;port=8250'as'root'(usingpassword:YES).Failed to connect to MySQL server:DBIconnect(';mysql_read_default_group=xtrabackup;host=172.17.0.2;port=8250','root',...)failed:Can'tconnecttoMySQLserveron'172.17.0.2'(111)at-line1535.200314 15:23:24 Connecting to MySQL server host:172.17.0.2,user:root,password:set,port:8250,socket:notsetFailed to connect to MySQL server:Can'tconnecttoMySQLserveron'172.17.0.2'(111).

    脚本

    xtrabackup --defaults-file=/home/mysql/xxx/master/config/my.cnf -uroot -pXXX -Hlocalhost --port=8250 --backup --parallel=4 --target-dir=/home/back/db_xxx_ $name

     -H 一开始设置的是localhost不行,我换了mysql容器中的ip地址‘172.17.0.2’也不行。