Java 从 0 到架构师目录:【Java从0到架构师】学习记录
关系型数据库:Oracel、MySQL、SqlServer,DB2
NoSql 数据库:NoSQL 数据库是为了解决大规模数据集合和多重数据种类带来的挑战
500 万条数据就会对 MySQL 性能有影响,但对列式存储数据库几乎没有影响
非关系型数据库的特点:
资料参考:
- Redis 在线入门:http://try.redis.io/
- Redis 中文资料站: http://www.redis.cn/
- Github:https://github.com/antirez/redis
- Redis 官网:https://redis.io/
- Redis 命令参考:http://redisdoc.com/
Redis 是一个简单的、高效的、分布式的,基于内存缓存工具,架设好服务器后,通过网络链接(类似数据库),提供 Key - Value 式缓存服务。
拓展类型:
高可用:
数据可靠性:在服务器断电之后重新启动,数据还能恢复(数据持久化)
Reids 的特点 :
安装 gcc:Redis 是 C 语言编写的
yum -y install gcc automake autoconf libtool make
安装 Redis:
tar -zxvf redis-5.0.8.tar.gz -C /usr/local
make
make PREFIX=/usr/local/redis-5.0.8 install
bin 目录下可执行文件说明:
redis-server # 启动redis服务命令 redis-cli # redis的客户端连接命令 redis-check-aof # 检查aof命令 redis-check-rdb # 检查rdb备份命令 redis-benchmark # redis性能测试命令 redis-sentinel # redis的哨兵机制启动命令
启动命令:进入目录 cd /usr/local/redis-5.0.8/bin
,启动服务 ./redis-server
./redis-server
./redis-server --port=6380
# 启动时指定配置文件的路径 ./redis-server ../conf/redis_6300.conf
客户端访问:./redis-cli
redis-cli -h <IP地址> -p <端口>
退出客户端 Ctrl + C
以下配置都是在 redis.conf 文件中修改:
daemonize yes
bind 0.0.0.0
netstat -ntlp
查看绑定的网卡信息port: 6379
dir /usr/local/redis-5.0.8/data
logfile "6379.log"
requirepass pwd1234
,配置密码为 pwd1234./redis-cli -a pwd1234 shutdown
后台启动状态下关闭 Redis:
# 查询PID ps -ef |grep redis-server # 通过PID强制关闭 kill -9 <PID>
bin/redis-cli.sh shutdown # 不指定 -p, -h 默认情况连接的是本机的6379端口 bin/redis-cli.sh -p <port> -h <host>
KEYS:查看所有的键;会扫描所有的数据,阻塞其他操作,不建议使用
DBSIZE:查看 key 的数量;性能很快,时间复杂度 O(1)
EXISTS [key]:判断是否存在对应的 key;存在返回 1, 不存在返回 0
EXPIRE [key] [seconds]:给对应的 key 设置过期时间,单位是秒
TTL [key]:获取 key 的有效时间;-1 代表永久有效,-2 代表无效的键
PERSIST [key]:把一个有过期时间的 key 设置为永久有效
DEL [key1] [key2] […]:根据指定 key 删除记录,可以一次删除多个
TYPE [key]:获取 key 对应的数据类型
FLUSHDB:清空数据库记录(不进行持久化操作,rdb 文件不变)
如果想恢复数据库,可以直接 kill 掉 redis-server 进程,然后重新启动服务,这样 Redis 重新读取 rdb 文件,数据恢复到 flushdb 操作之前的状态
注意:如果通过 shutdown 关闭服务会触发持久化操作,无法恢复数据,必须 kill 关闭服务
FLUSHALL:清空数据库记录(进行持久化操作,rdb 文件变化)
rdb 文件变成76个字节大小(初始状态下为76字节),数据库真正意义上清空
INFO:查看服务器信息
命令 | 说明 |
---|---|
set | 设置一个 key/value |
get | 根据 key 获得对应的 value |
mset | 一次设置多个 key value |
mget | 一次获得多个 key 的 value |
getset | 获得原始 key 的值,同时设置新值 |
strlen | 获得对应 key 存储 value 的长度 |
append | 为对应 key 的 value 追加内容 |
getrange 索引0开始 | 截取 value 的内容 |
setex | 设置一个 key 存活的有效期(秒) |
psetex | 设置一个 key 存活的有效期(毫秒) |
setnx | 存在不做任何操作,不存在添加 |
msetnx 原子操作(只要有一个存在不做任何操作) | 可以同时设置多个 key,只要有一个存在都不保存 |
decr | 进行数值类型的 -1 操作 |
decrby | 根据提供的数据进行减法操作 |
incr | 进行数值类型的 +1 操作 |
incrby | 根据提供的数据进行加法操作 |
incrbyfloat | 根据提供的数据加入浮点数 |
应用场景:
命令 | 说明 |
---|---|
hset | 设置一个 key/value 对 |
hget | 获得一个 key 对应的 value |
hgetall | 获得所有的 key/value 对 |
hdel | 删除某一个 key/value 对 |
hexists | 判断一个 key 是否存在 |
hkeys | 获得所有的 key |
hvals | 获得所有的 value |
hmset | 设置多个 key/value |
hmget | 获得多个 key 的 value |
hsetnx | 设置一个不存在的 key 的值 |
hincrby | 为 value 进行加法运算 |
hincrbyfloat | 为 value 加入浮点值 |
应用场景
命令 | 说明 |
---|---|
lpush | 将某个值加入到一个 key 列表头部 |
lpushx | 同 lpush,但是必须要保证这个 key 存在 |
rpush | 将某个值加入到一个 key 列表末尾 |
rpushx | 同 rpush,但是必须要保证这个 key 存在 |
lpop | 返回和移除列表左边的第一个元素 |
rpop | 返回和移除列表右边的第一个元素 |
lrange | 获取某一个下标区间内的元素 |
llen | 获取列表元素个数 |
lset | 设置某一个指定索引的值(索引必须存在) |
lindex | 获取某一个指定索引位置的元素 |
lrem | 删除重复元素 |
ltrim | 保留列表中特定区间内的元素 |
linsert | 在某一个元素之前,之后插入新元素 |
应用场景:
命令 | 说明 |
---|---|
sadd | 为集合添加元素 |
smembers | 显示集合中所有元素(无序) |
scard | 返回集合中元素的个数 |
spop | 随机返回一个元素 并将元素在集合中删除 |
smove | 从一个集合中向另一个集合移动元素(必须是同一种类型) |
srem | 从集合中删除一个元素 |
sismember | 判断一个集合中是否含有这个元素 |
srandmember | 随机返回元素 |
sdiff | 去掉第一个集合中其它集合含有的相同元素,求第一个集合与第二个集合的差集 |
sinter | 求交集 |
sunion | 求和集 |
应用场景:
命令 | 说明 |
---|---|
zadd | 添加一个有序集合元素 |
zcard | 返回集合的元素个数 |
zrange 升序 zrevrange 降序 | 返回一个范围内的元素 |
zrangebyscore | 按照分数查找一个范围内的元素 |
zrank | 返回排名 |
zrevrank | 倒序排名 |
zscore | 显示某一个元素的分数 |
zrem | 移除某一个元素 |
zincrby | 给某个特定元素加分 |
应用场景: