(MySQL)主键和唯一索引的区别
主键 | 唯一索引 |
---|---|
不能为空 | 可以为null |
主键是行记录的编号,一般为自增id,auto_increment | 唯一索引,一般用来保证数据的唯一性,去重目的 |
主键是每一张表都必要,没有的话会报语法错误 | 唯一索引不是必要的 |
一张表只能有一个主键 | 可以有多个 |
主键可以被其他表引用为外键 | 无此特性 |
主键是一种约束,保证实体的完整性 | 辅助查询的索引 |
Mysql中的实现是聚簇索引 | 无此特性 |
Redis和Memcached的区别
Redis | Memcached |
---|---|
定位为NoSQL数据库 | 缓存中间件 |
可以持久化,支持追加和快照两种持久化方式 | 无此特性 |
支持五种数据类型 | 只有字符串类型 |
字符串类型可以保存二进制数据 | 二进制数据不安全的类型 |
支持主从复制 | 不支持 |
单进程单线程 | 多线程 |
可以设置密码,实现访问控制 | 不能设置密码 |
内存分配使用zmalloc/jemalloc。内存不够时将数据置换到磁盘。会造成内存碎片 | 采用slab allocation预分配大块内存 |
没有cas命令。但是可以通过事务保证一串命令的原子性 | 提供了cas命令,解决并发访问一份数据的一致性问题 |
提供了集群模式 | 只能在客户端通过哈希一致性的方式,实现分布式存储 |
TCP和UDP的区别
TCP | UDP |
---|---|
面向连接的协议 | 面向报文的协议 |
具有拥塞控制、失败重试功能保证可靠性 | 无此特性 |
只能一对一建立连接 | 支持广播 |
由于建立连接需要三次握手,断开连接需要四次挥手,速度较慢 | 速度较快 |
包体较大 | 包体较小 |
报文接收的顺序和发送的顺序一致 | 报文的发送无序 |