当数据量太大的时候,一个机器放不下了,就需要 "主从同步,读写分离"
像下面这个图一样:我们的mysql2只负责写,mysql1和mysql3只负责读。并且1和3会同步2里的数据。
数据库的本质就是读和写
那缓存解决了读的压力,分库分表就是解决了写的压力
什么是nosql(不要像我一样傻不拉几,以为是不写sql了,真正意思not only sql)
我们以前学的mysql,oracle。都是基于表的,用表的行/列存储数据。
当然了nosql就更牛了,还有别的存储方式,比方说键值存储。
在这打个伏笔,懂得都懂。MongoDB(名字听起来就好听)得整起来。先学redis,工作需要。
redis(远程字典服务),有多牛逼呢???
redis是单线程的,那单线程为什么那么快?一秒钟写8万次,读11万次。
首先,就速度来说,cpu>内存>硬盘。
但是吧,要是多线程会有一个弊端,就是cpu的上下文切换,很耗时。redis是将所有数据放在内存中,那么这时候使用单线程效率就是最高的。
redis 命令,不区分大小写。redis默认有16个数据库,删库啥的慎用。
清空当前数据库 flushdb
清空全部数据库 flushall
查看数据库中所有的key keys *
如下,get name,获取到了name这个key(name是一个key)对应的value。
用expire设置了过期时间;
可以通过ttl来查看还有多久过期,ttl为负数是就是过期了;
我们也可以用type name,来查看key的类型。
redis对字符串的操作
1.字符串的追加和获取字符串长度。
2. 自增,自减。可以指定步长的增减incr 、decr。在遇到数值操作时,redis会将字符串类型转换成数值。
3.字符串的截取与替换getRange和setRange
通杀命令
1.设置过期时间和不存在设置setex和setnx
2.批量设置多个值,批量获取多个值mset和mget
3.设置一个对象
注意key的样子可以是user:{id}:{filed}
set user:1 {name:zhangsan,age:3}
Ⅱ redis列表list操作,所有list命令都是l开头的
列表中,在俩边插入或者改动值,效率最高!中间元素,效率会相对低一些(redis中列表底层不是数组,而是链表)
学了这一块,你会发现队列和栈的奥秘:
lpush,rpush,lragnge(不是i)
lpop,rpop分别从列表的左边和右边移除元素
获取列表的长度 Llen
通过下标获取list某一个下标的值 lindex
移除列表指定个数的value lrem
通过下标截取list指定的长度 ltrim
组合命令rpoplpush,移除列表最后一个元素,把它放到一个新的列表
更新列表中指定下标的值 lset
在某个元素之前或之后传入值 linsert