createtable tmp_table asselectdistinct * from t_table; truncatetable t_table; insertinto t_table select * from tmp_table;
-
2 .第二种方法:适用于有大量重复记录的情况
-
1 2 3 4 5 6
delete t_table where (id,name) in (selectid,name from t_table groupbyid,namehavingcount(*)>1) and rowidnotin (selectmin(rowid) from t_table groupbyid,namehavingcount(*)>1);
-
3 .第三种方法:适用于有少量重复记录的情况
-
1 2
deletefrom t_table a where a.rowid!=(selectmax(b.rowid) from t_table b where a.id=b.id and a.name=b.name);
@echo off net start OracleServiceORACLE net start OracleDBConsoleoracle net start OracleOraDb10g_home1iSQL*Plus net start OracleOraDb10g_home1TNSListener pause
-
-
同样我们可以建立关闭文件(dbstop.cmd)
-
-
1 2 3 4 5 6
@echo off net stop OracleServiceORACLE net stop OracleDBConsoleoracle net stop OracleOraDb10g_home1iSQL*Plus net stop OracleOraDb10g_home1TNSListener pause
publicclassAutoConversion{ publicstaticvoidmain(String[] args){ int a = 6; float f = a;//int可以自动转为float byte b = 9; char c = b;//出错,byte不能转为char型 double d = b;//byte 可以转为double } }
publicclassConversion{ publicstaticvoidmain(String[] args){ boolean b = true; String str = b + ""; System.out.print(str);//这里输出true } }
-
2.强制类型转化
上面的自动类型只能把表数范围小的数值转化为大的,如果没有显性表示把大的转为小的,会发生编译错误。
-
1 2 3 4 5 6 7 8 9 10 11 12 13 14
publicclassConversion{ publicstaticvoidmain(String[] args){ int b = 233; byte c = (byte)b;//强制把一个int转为byte类型 System.out.println(c);//输出-23 float a = 5.6;//错误,因为5.6默认是double类型 float a = (float)5.6;//正确,要进行强制转化 double d = 3.98; int e = (int)d;//强制把一个double转为int类型 System.out.println(e);//输出3 } }
-
像上面一样,要执行表数大的范围转为小的,需要显性声明,若强制转化后数值过大,会造成精度丢失。
-
3.字符串(String)转换为基本类型
-
通常情况下,字符串不能直接转换为基本类型,但通过基本类型对应的包装类可以实现。
-
每个包装类都会有提供一个parseXxx(String str)静态方法来用于字符串转换为基本类型
-
-
1 2 3 4 5
Sting a = "45"; //使用Integer的方法将一个字符串转换为int类型 int iValue = Interger.parseInt(a); //boolean比较特殊,仅在字符串为true的情况下为true,其他为false boolean b = Boolean.valueOf(a);
alter table E2USER_STATE allocate extent; alter table ENTERPRISE_E2USER allocate extent; alter table ENTERPRISE_INFO_TYPE allocate extent; alter table ENTERPRISE_MAPMARK allocate extent; alter table ENTERPRISE_NEEDTASK allocate extent; alter table ENTERPRISE_PICTURE allocate extent; alter table ENTERPRISE_REPORT allocate extent; alter table ENTERPRISE_REPORT_TYPE allocate extent; alter table ENTERPRISE_TEAM allocate extent; alter table FROMUSER_ADJUNCT_TARGET allocate extent; alter table FROMUSER_OFFER allocate extent; alter table NEEDTASK_TYPE allocate extent; alter table SYS_PRIVILEGE allocate extent; alter table SYS_RELEVANCE_RESOURCE allocate extent; alter table SYS_RELEVANCE_TARGET allocate extent; alter table SYS_RESOURCE_TYPE allocate extent; alter table TASK_FEEDBACK allocate extent; alter table TASK_MYTASKTYPE allocate extent; alter table TOUSER_MESSAGE allocate extent; alter table ABOUTUSER_POINT allocate extent; alter table ABOUTUSER_POINT_MARK allocate extent; alter table ABOUTUSER_QUERYKEY allocate extent; alter table ABOUTUSER_REPORT_HISTORY allocate extent; alter table DICT_COMMENT_TYPE allocate extent; alter table DICT_INDUSTRY_TYPE allocate extent; alter table DICT_POST allocate extent; alter table DICT_REGION allocate extent; alter table ENTERPRISE_COMMENT allocate extent; alter table ENTERPRISE_COMMENT_C allocate extent; alter table ENTERPRISE_INFO allocate extent; alter table ENTERPRISE_INFO_C allocate extent; alter table ENTERPRISE_INFO_STATE allocate extent; alter table CALENDAR_CREATETYPE allocate extent; alter table CALENDAR_MY allocate extent; alter table CALENDAR_TYPE allocate extent;
L : 表示最后,只能出现在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。
-
-
W : 表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一 到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。可以有效防止运营商劫持和保护用户输入内容。
Output: IMPORTANT NOTES: - If you lose your account credentials, you can recover through e-mails sent to xxx@gmail.com - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/www.example.com/fullchain.pem. Your cert will expire on 2017-02-02. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - Your account credentials have been saved in your Let's Encrypt configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Let's Encrypt so making regular backups of this folder is ideal. - If like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
及建立一个索引(A,B), 那么你查找where B = XX , 由于B在右边, 就不会被匹配到;
-
-
索引下推
在mysql5.6之后启用, 默认开启;
1 2 3 4
// 若建立(A,B,C)索引 select * from test where A = 'xxx' and B like '%xx%' // 若没有索引下推, mysql会在索引进行查找到A之后, 回表查到数据, 再进行匹配B // 若有索引下推, mysql会直接在索引上, 直接匹配B, 去掉不符合的, 然后在回表查找那些有的, 大大减少了回表的次数
1.所有key都应该由 KEYS 数组来传递,redis.call/pcall 里面调用的redis命令,key的位置,必须是KEYS array, 否则直接返回error,"-ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS arrayrn"
2.所有key,必须在1个slot上,否则直接返回error, "-ERR eval/evalsha command keys must in same slotrn"
-
-
必要情况下使用monitor命令时, 要注意不要长时间使用;
-
-
三.客户端使用
-
尽量避免多个应用使用同一个Redis实例;
-
-
1
因为redis是单线程的, 如果使用同一个, 极易让两个应用互相影响;
-
-
使用连接池控制连接; 提供效率;
-
-
1
spring boot1.x是自带Jedis连接池, 2.x以上使用lettuce连接池
-
-
高并发最好增加熔断功能(如 netflix hystrix)
-
设置合理密码, 提高安全性, 内网访问, ssl加密
-
选择好内存淘汰策略
-
-
1 2 3 4 5 6
volatile-lru(默认): 优点是不会淘汰掉不过期的key,但缺点可能会OOM; allkeys-lru:根据LRU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。 allkeys-random:随机删除所有键,直到腾出足够空间为止。 volatile-random:随机删除过期键,直到腾出足够空间为止。 volatile-ttl:根据键值对象的ttl属性,删除最近将要过期数据。如果没有,回退到noeviction策略。 noeviction:不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息"(error) OOM command not allowed when used memory",此时Redis只响应读操作。
使用Redis实现分布式锁最简单的方案是使用命令SETNX。SETNX(SET if Not eXist)的使用方式为:SETNX key value,只在键key不存在的情况下,将键key的值设置为value,若键key存在,则SETNX不做任何动作。SETNX在设置成功时返回,设置失败时返回0。当要获取锁时,直接使用SETNX获取锁,当要释放锁时,使用DEL命令删除掉对应的键key即可。
* EX seconds:将键的过期时间设置为 seconds 秒。执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。 * PX milliseconds:将键的过期时间设置为 milliseconds 毫秒。执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。 * NX:只在键不存在时,才对键进行设置操作。执行 SET key value NX 的效果等同于执行 SETNX key value. * XX:只在键已经存在时,才对键进行设置操作。
-
创建一个锁, 设置过期为10s:
-
1 2 3
SET lockKey lockValue EX 10 NX 或者 SET lockKey lockValue PX 10000 NX
// Lua脚本的原子性,在Redis执行该脚本的过程中,其他客户端的命令都需要等待该Lua脚本执行完才能执行。 if redis.call("get",KEYS[1]) == ARGV[1] then return redis.call("del",KEYS[1]) else return 0 end
使用Redis实现分布式锁最简单的方案是使用命令SETNX。SETNX(SET if Not eXist)的使用方式为:SETNX key value,只在键key不存在的情况下,将键key的值设置为value,若键key存在,则SETNX不做任何动作。SETNX在设置成功时返回,设置失败时返回0。当要获取锁时,直接使用SETNX获取锁,当要释放锁时,使用DEL命令删除掉对应的键key即可。
* EX seconds:将键的过期时间设置为 seconds 秒。执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。 * PX milliseconds:将键的过期时间设置为 milliseconds 毫秒。执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。 * NX:只在键不存在时,才对键进行设置操作。执行 SET key value NX 的效果等同于执行 SETNX key value. * XX:只在键已经存在时,才对键进行设置操作。
-
创建一个锁, 设置过期为10s:
-
1 2 3
SET lockKey lockValue EX 10 NX 或者 SET lockKey lockValue PX 10000 NX