共计 2556 个字符,预计需要花费 7 分钟才能阅读完成。
历史倒退
MySQL 单机演变
单机读写压力,次要是读压力,所以须要多台服务器。
当今企业架构
数据服务也是以集群模式存在
NoSQL
键值
文档
图
社交、搜寻
列数据
阿里巴巴的架构演进
Redis 简介
key-value 存储系统,非关系型数据库,由 ANSI C (动静 C 语言)编写。
特点
装置 Redis
ubuntu18.04 装置
间接参照菜鸟教程即可
Redis 下的配置文件 redis.conf
在启动时须要应用命令 redis-server xxx.conf
xxx.conf 就是咱们的配置文件,前面尝试主从复制时须要复制一份 原文件 (单机伪集群)
我将这个文件放在了 /usr/local/bin 目录下
通过 nstat -ntlp|grep 6379 来查看端口号
通过 ps -f|grep redis
性能测试 redis-benchmark
redis-benchmark -n 10000 -q
近程连贯
redis-cli -h host -p port -a password
Redis 数据类型
键
抉择数据库
默认有 16 个数据库,select index
查看以后数据库大小
dbsize
分明以后数据库
清空以后数据库 flushdb| 清空所有数据库 flushall
查看是否存在
EXIST key
查看所有键
key *
删除 key
del key1
设置生效工夫
expire key 10
查看以后 key 的剩余时间
ttl key
查看指定 key 的类型
type key
String
应用场景
- 计数器
- 统计多单位的数量
- 粉丝数
对象缓存存储
设置值
set k1 v1
取得值
get k1
追加字符串
append k1 hello 如果不存在就相当于 set
获取字符串长度
strlen k1
自增和自减
incr views|decr views
设置步长自增自减
incrby views 10| decrby views 10
截取字符串
getrang k1 0 3(获取字符串 [0,3] 的元素)
替换指定地位开始的字符串
setrange k1 1 xxx(下标从 0 开始,同时前面的字符不会被替换)
设置过期工夫(set with expire)
setex k3 30 hello
不存在在设置(set if not exist), 分布式锁常常会用到
setnx mykey mongodb
批量设置多个值(mulit set)
mset k1 v1 k2 v2
批量获取多个值
mget k1 k2
批量设置原子操作(并发中的状况)
msetnx k1 v1 k4 v4
设置对象
set user:1{name: 张三,age:13}
采纳的是 user:{id}:{field}getset 先获取再存储
如果存在则返回原来的值并且设置新的值
List
能够将 List 用作栈、队列、阻塞队列
lpush 增加一个或者多个值
lpush list one
lpush list tworpush 从左边插入
lrange 获取区间的值
lrange 0 -1 获取所有的值
lrange 0 3 指定区间
lpop 移出 list 的第一个元素
lpop list
rpop 从左边移出 list 的最初一个元素
lindex list 依据下标获取元素
lindex list 0
llen list 获取长度
lrem 删除指定个数的 value
lrem list 1 one
ltrim 截取指定长度的元素
ltrim list 1 2 通过下标截取指定的长度, 只剩下截取的元素
rpoplpush list1 list2 移除列表的最初一个元素,将他挪动到新的列表中
lset 更新 list 当中存在的元素
list list 0 item 依据下标来更新
insert list before b xxx 指定地位插入
Set
增加元素
sadd myset …
查看汇合中元素 smembers
查看是否存在某个元素 smember myset hello
查看个数
scard myset
随机获取汇合中的元素
sranmember myset 1
随机删除汇合中的元素
spop myset 1
挪动指定元素
smove myset myset1 a
差集 / 交加 / 并集 SDIFF/SINTER/SUNION
zset(sorted set)
增加元素
zadd myset 1 one 2 two 3 three
获取所有元素
zrange myset 0 -1
排序
zrevrangebyscore key max in withscores limit offset count
从大到小
zrevrangebyscore salary +inf -inf # zrevrangebyscore
显示全副用户并且附带问题
zrevrangebyscore salary +inf -inf withscores
升 / 降序
zrange myzset 0 -1/zrevrange myset 0 -1
获取指定区间元素个数
zcount myzset 1 4
哈希(Hash)
设置字段值
hset myhash field2 value2
设置多个字段值
hmset myhash field2 value2 field3 value3
获取多个指定的字段值
hmget myhash field1 field2
获取全副的值
hgetall myhash
删除指定的键
hdel myhash field1
获取键值对的个数
hlen myhash
判断 hash 中指定字段是否存在
hexists myhash field1
获取所有的 key/value
hkeys/hvals
3 种非凡的数据结构
geospatial 地理位置
Hyperloger 基数统计
基数在有穷集中就是个数,来源于无穷集 (知乎)。
用处: 网站的 UVBitmaps 位存储
用处: 统计用户信息,沉闷 / 不沉闷等。实质上就是以二进制 0 和 1 来进行判断。
事务
Redis 没有事务的隔离级别这个概念。Redis 单条命令是原子性的然而事务并不是原子性的。
开启与执行
multi 开启
set …
exec 执行开启与勾销
multi 开启
set …
discard 勾销
编译型异样 (代码自身有问题) 事务不会执行
运行时异样 异样的这一行不会执行,其余的照常执行Redis 实现乐观锁
乐观锁
- 认为什么时候都不会有问题, 更新数据的时候去判断一下, 在此期间是否有人批改过这个数据
- 获取 version
更新的时候比拟 version
乐观锁
redis.conf 配置
根本配置
快照配置
主从配置
长久化操作
RDB(Redis Database)
触发机制
save 时触发 rdb 规定
flushall 触发 rdb 规定
退出 redis 触发 rdb 规定
备份的快照 dump.rdb
复原时只须要将备份放在 redis 的启动目录下就能够