关系数据库与非关系型数据库
关系数据库
关系数据库是一种基于关系模型的数据库,它使用结构化查询语言(SQL)进行数据操作和管理。其主要特点包括:
1.数据结构化:数据按照严格的模式进行组织,表之间存在明确的关系。
例如,在一个员工信息数据库中,可能有“员工表”、“部门表”,通过“部门编号”等字段建立关联。
2.数据一致性:通过约束和规则保证数据的准确性和完整性。
比如设置主键保证每条记录的唯一性,设置外键保证数据之间的关联一致性。
3.支持复杂查询:可以使用 SQL 进行复杂的连接、聚合、排序等操作。
例如,要查询某个部门所有员工的平均工资,通过合适的 SQL 语句可以轻松实现。
常见的关系数据库有 MySQL、Oracle、SQL Server 等。
非关系型数据库
非关系型数据库也称为 NoSQL 数据库,它不遵循传统的关系模型,具有更灵活的数据模型和存储方式。其优势在于:
1.灵活性:能够轻松应对数据模式的频繁变化。
比如在处理文档型数据时,无需事先定义严格的模式。
2.高扩展性:易于水平扩展,通过增加节点来提高性能和存储能力。
像分布式的 MongoDB 集群,可以方便地添加新的服务器节点。
3.高性能:适用于处理大规模的高并发读写操作。
例如在处理海量的实时日志数据时,表现出色。
常见的非关系型数据库有 MongoDB、Redis、Cassandra 等。
总的来说,关系数据库适用于数据结构明确、对一致性和复杂查询有较高要求的场景;而非关系型数据库则更适合数据结构灵活多变、高并发、大数据量的应用场景。在实际应用中,往往会根据具体的需求和业务特点来选择合适的数据库类型。
Redis基础
Redis 是一个开源的(BSD 许可)、内存中的数据结构存储系统,可用作数据库、缓存和消息中间件。
一、数据结构
Redis 支持多种数据结构,包括:
- 字符串(String):可以存储字符串、整数或浮点数。例如,存储用户的积分
INCR user_score
。 - 哈希(Hash):适合存储对象。比如存储用户信息
HSET user:1 name "John" age 25
。 - 列表(List):按照插入顺序存储元素。如实现消息队列
LPUSH queue message
。 - 集合(Set):无序且不重复的元素集合。例如找出共同关注的用户
SINTER set1 set2
。 - 有序集合(Sorted Set):每个元素都关联一个分数,按分数排序。比如排行榜
ZADD rank 100 user1
。
二、持久化
Redis 提供了两种持久化方式:
- RDB(Redis Database):以快照的形式将数据保存到磁盘。
- AOF(Append Only File):将执行的写命令追加到文件中。
三、事务
Redis 事务可以一次执行多个命令,要么全部成功,要么全部失败。使用 MULTI
开始事务,EXEC
执行事务。
四、发布/订阅
Redis 支持发布/订阅模式,发布者发送消息,订阅者接收消息。
五、应用场景
- 缓存:加速数据读取,减轻数据库压力。
- 会话存储:存储用户会话信息。
- 排行榜:利用有序集合实现。
Redis安装部署
安装
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install gcc* zlib-devel
[root@localhost ~]# tar xvzf redis-4.0.9.tar.gz
[root@localhost ~]# cd redis-4.0.9/
[root@localhost redis-4.0.9]# make
[root@localhost redis-4.0.9]# make PREFIX=/usr/local/redis install
[root@localhost ~]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@localhost redis-4.0.9]# cd /root/redis-4.0.9/utils/
[root@localhost utils]# ./install_server.sh
Config file : /etc/redis/6379.conf //配置文件路径
Log file : /var/log/redis_6379.log //日志文件路径
Data dir : /var/lib/redis/6379 //数据文件路径
Executable : /usr/local/redis/bin/redis-server //可执行文件路径
Cli Executable : /usr/local/redis/bin/redis-cli //客户端命令行工具
查看进程
[root@localhost utils]# netstat -anpt | grep redis
服务控制
[root@localhost ~]#/etc/init.d/redis_6379 stop
[root@localhost ~]#/etc/init.d/redis_6379 start
[root@localhost ~]#/etc/init.d/redis_6379 restart
[root@localhost ~]#/etc/init.d/redis_6379 status
配置参数的修改
[root@localhost ~]#vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.10.101 //监听的主机地址
port 6379 //端口
daemonize yes //启用守护进程
pidfile /var/run/redis_6379.pid //指定 PID 文件
loglevel notice //日志级别
logfile /var/log/redis_6379.log //指定日志文件
[root@localhost~]#/etc/init.d/redis_6379 restart
[root@localhost utils]# netstat -anpt | grep redis
Redis 命令工具
1:redis-cli 命令行工具
(1)连接本机redis
[root@localhost ~]# redis-cli
127.0.0.1:6379>
(2)测试redis服务是否启动
127.0.0.1:6379> ping
PONG
(3)远程连接
[root@localhost ~]#redis-cli -h 192.168.10.101 -p 6379
redis-benchmark 测试工具
(1)测试请求性能
[root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -c 100 -n 100000
(2)测试存取性能
[root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -q -d 100
1.key 相关命令
使用 keys 命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。
127.0.0.1:6379>set k1 1
OK
127.0.0.1:6379>set k2 2
OK
127.0.0.1:6379>set k3 3
OK
127.0.0.1:6379>set v1 4
OK
127.0.0.1:6379>set v5 5
OK
(2)查看当前数据库中所有键
127.0.0.1:6379>KEYS *
1) "teacher"
2) "k1"
3) "k2"
4) "k3"
5) "v1"
6) "v5"
127.0.0.1:6379>set v22 5
OK
exists
exists 命令可以判断键值是否存在
127.0.0.1:6379>exists teacher
(integer) 1 //结果为1,表示 teacher 键是存在 ,结果为0,表示 tea 键不存在
del
del 命令可以删除当前数据库的指定 key
del v5
(integer) 1
type
使用 type 命令可以获取 key 对应的 value 值类型
127.0.0.1:6379>type k1
string
rename
rename 命令是对已有 key 进行重命名
在实际使用过程中,建议先用 exists 命令查看目标 key 是否存在,然后再决定是否执行 rename 命令,以避免覆盖重要数据
renamenx
renamenx 命令的作用是对已有 key 进行重命名,并检测新名是否存在。
使用renamenx 命令进行重命名时,如果目标 key 存在则不进行重命名。
dbsize
dbsize 命令的作用是查看当前数据库中 key 的数目。
127.0.0.1:6379> dbsize
(integer) 5