寒假的第一个技术栈:redis
redis是nosql类型数据库,与传统关系型数据库不同。redis以bson格式储存数据,灵活性很强。并且在内存中读写,速度非常快,常用于作为缓存,保存高频查询的字段,减轻其他数据库的压力
RDB错误解决方案(临时)
config set stop-writes-on-bgsave-error no
传统关系型数据库ACID
A:atomicity:原子性:事务要么同时完成,要么同时失败,不能分割。
C:Consistency:一致性,执行操作前后数据库约束应该一致。
I:Isolation,并发时,别人的操作不应该影响我的操作。
D:Duration,持久性,数据应该永久保存在数据库中,宕机了也不应该消失
CAP定理
CAP只能三选二:
C:Consistency:强一致性 在某个写操作完成之后的任何读操作都必须返回该写操作写入的值,即数据修改完后应该立即能被查询到
A:Availability 可用性,任何一个在线的结点收到请求都必须做出响应,无论成功或者失败
P:Partition tolerance 分区容错性 不同结点数据可能不一致,但要保证系统能正常运行(分布式系统必选)
分布式BASE定理
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。
BASE理论是eBay架构师提出的。
BASE定理来源:是CAP中一致性和可用性的权衡结果,它来自大规模互联网分布式系统的总结,是基于CAP定理逐步演化而来的。
BASE定理的核心思想:即使无法做到强一致性,但是每个应用可以根据自身的业务特定,采用合适的方式来达到最终一致性。
————————————————
版权声明:本文为优快云博主「盛难晨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_42332821/article/details/104283428
BASE是指服务保证基本可用(Basically Available
),可以存在软状态(Soft State
),最终能够达到一致性(Eventual Consistency
)
Basically Available 基本可用
出现系统故障时,允许服务部分不可用。
比如在某网站点了个赞,但是5秒之后才出现反馈,而且是“服务异常请重试”。这表示服务确实有异常,但并非完全不可用——至少还有反馈。
Soft State 软状态
允许系统存在可用的中间状态。
即允许在数据同步期间,用户的同一请求得到的数据不同(但服务整体还可用),因为处理请求的服务的数据同步状态可能不同。
Eventual Consistency 最终一致
强调系统数据最终能够达到一致状态,相对强一致性的系统,这是一种弱一致性。
也就是说虽不要求实时一致的数据同步,但最终应当进入一致状态。
作者:XHLeee
链接:https://www.jianshu.com/p/66e8449c36d8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Redis的安装
Redis安装在Linux上,记录一些Linux命令:
ll:查看当前目录下的所有文件
mkdir 文件夹名:创建一个新的文件夹
cp 文件名 移动目标文件夹 :复制一个文件到一个文件夹中
cd xx :进到xx目录中
cd … :回到上一级目录
tar -zxvf 文件名 :解压tar文件
Redis杂项基础知识
Redis是单进程的,安装的时候默认安装16个库,使用select 下标 选择不同的库
keys *查看所有的key
flushdb清除当前库flushall清除所有库
dbsize查看key的数量
Redis的五大基本数据类型
String 字符串型,理论最大不超过512M
Hash 哈希,类似Java中的HashMap
List 列表
Set 集合
Zset 有序集合
再加一个
Key
Key关键字的操作
keys * :查看当前库中所有的key
exists key : 查看当前库中是否存在名为key的键
move key 2 :把key移动到下标为2的库中
expire key : 给key设定过期时间
ttl key : 查看还有多少秒钟过期(-1代表永不过期,-2代表已过期)
type key : 查看你的key是什么类型
String的操作
get/set 存取
append/del/strlen 在value后加/删除key/查看value长度
incr/decr/incrby/decrby 只有数字能进行,incr一次加1,incrby自定义增值
getrange/setrange : getrange 起始下标 结束下标(-1全部)获得范围内下标的值,setrange 起始下标 替换的值 从起始下标开始替换值
setex(set with expire)/setnx(set if not exist) :带过期的设置和如果不存在再设置
mset/mget/msetnx(multiple set) :多个操作。注意:msetnx只要有一个不符合,全部不执行
List的操作
lpush/rpush/lrange : left push,从左往右压入列表,right push,从右往左压入列表。lpush读取出来的时候顺序和输入时相反,right push读取出来的顺序与输入时相同
lpop/rpop : left pop弹出栈顶,rpop弹出栈底
lindex : 按从上到下的下标获取元素
llen : 查看list的长度
lrem : 从上到下删除n个元素
ltrim :截取某个范围的值再赋值给key
rpoplpush 源列表 目标列表 : 把源列表底部元素弹出压到目标列表的表头
lset :从上往下设置下标为N的元素
linsert key before/after : 把key在某个元素后/前插入
List性能分析:List是一个双向链表,在列表的头或者尾插入效率都很高,但是往中间插入效率就比较低。(链表特性)
Set的操作
sadd/smembers/sismember :分别是:新增集合,查询某个集合里面的所有元素,查询某个元素是否存在于集合中。
scard : 查询集合中元素的个数
srem : 移除集合中的某个元素
srandmember key n : 随机在一个集合中抽取n个数字(用于抽奖随机选取用户)
spop key n: 随机弹出key中的n个元素
smove key1 key2 n : 把元素n从key1移动到key2
数学集合类:
差集:sdiff set1 set2 set… : 在第一个set中存在,在后面的set中都不存在
交集:sinter : 所有set的交集
并集:sunion : 所有set的并集
Hash的操作
KV模式不变,但是V是一个键值对
hset key field value : key相当于pojo类,field和value对应的是类里的字段和字段值。
hset/hget/hmset/hmget/hgetall/hdel : 常用命令
hlen : 查看hash的长度
hexists key : 查看hash中是否存在key
hkeys/hvals : 查看所有的key和所有的value
hincrby/hincrbyfloat : 数字增长
hsetnx : set if not exist 如果不存在则加入
Zset(sorted set)有序集合的操作
zadd/zrange : 添加和查看有序集合,注意,zadd参数:zadd key score member [score member…]
zrange可带参数:withscores
zrangebyscore : 按照分数段来查询
zrem key score : 移除key中的某个score对应的member值
zrem可带参数:withscores , (不包含 , limit offset count 限制查询个数,从offset下标开始,查询count个参数
zcard : 查看元素个数,注意score member键值对算一个
zcount key min max : 统计score在min和max之间的元素个数
zrank key member : 获得key中member的下标
zscore key member : 获得key中member对应的score值
zrevrank : z reverse rank把member的排名反过来
zrevrange : 把zrange获得的结果反过来
zrevrangebyscore max min : 按照分数段查询,但是这里的分数段是从max到min