1.Redis非关系数据库
关系型数据库和非关系型数据库区别?
数据库的安全性?
关系型数据库数据都是持久化到硬盘中.
性能问题:
1.关系型数据库的性能比非关系型的差一些. 高并发 读写速度
12306:
最早时候抗压方式: 控制在线人数. 10000人
数据太复杂,
Redis+ rabbitMQ + 算法+ 黑名单限流
性能问题: 20000并发 Redis集群 16304
常见的非关系数据库:
Redis, MongoDB, ElasticSearch, Memcached,
Redis数据简介
1.安装
1.通过Docker安装redis 2.通过在Linux里也可以安装. 安装 c语言环境 3.windows里的,直接解压.
解压资料里的redis
双击redis-server启动
操作工具
2.数据库
增 删 改 查
key value
五种数据类型:
String
"zhangsan" 127.0.0.1:6379> set name zhangsaan OK 127.0.0.1:6379> get name "zhangsaan" 127.0.0.1:6379> set name lisi OK 127.0.0.1:6379> get name "lisi" 127.0.0.1:6379> del name (integer) 1 127.0.0.1:6379> get name (nil) 127.0.0.1:6379>
Hash数据类型
127.0.0.1:6379> hset myhash name zhangsan (integer) 1 127.0.0.1:6379> hset myhash age 18 (integer) 1 127.0.0.1:6379> hget myhash name "zhangsan" 127.0.0.1:6379> hget myhash age "18" 127.0.0.1:6379> hgetall myhash 1) "name" 2) "zhangsan" 3) "age" 4) "18" 127.0.0.1:6379> hgetvalus myhash (error) ERR unknown command 'hgetvalus' 127.0.0.1:6379> hdel myhash name (integer) 1 127.0.0.1:6379> hgetall myhash 1) "age" 2) "18" 127.0.0.1:6379>
List数据类型(可以存重复的数据,而且是有序的,和Java里的list集合类似)
127.0.0.1:6379> lpush mylist a (integer) 1 127.0.0.1:6379> lpush mylist b (integer) 2 127.0.0.1:6379> lpush mylist c (integer) 3 127.0.0.1:6379> lpop mylist "c" 127.0.0.1:6379> lrange mylist 0 -1 1) "b" 2) "a" 127.0.0.1:6379> rpush mylist d (integer) 3 127.0.0.1:6379> lrange mylist 0 -1 1) "b" 2) "a" 3) "d" 127.0.0.1:6379> rpop mylist "d" 127.0.0.1:6379> lrange mylist 0 -1 1) "b" 2) "a" 127.0.0.1:6379> rpush mylist b (integer) 3 127.0.0.1:6379> lrange mylist 0 -1 1) "b" 2) "a" 3) "b" 127.0.0.1:6379>
Set数据类型
127.0.0.1:6379> sadd myset a (integer) 1 127.0.0.1:6379> sadd myset b (integer) 1 127.0.0.1:6379> smembers myset 1) "b" 2) "a" 127.0.0.1:6379> sadd myset b (integer) 0 127.0.0.1:6379> smembers myset 1) "b" 2) "a" 127.0.0.1:6379> srem myset b (integer) 1 127.0.0.1:6379> smembers myset 1) "a"
SoredSet数据类型(排序时候用的)
127.0.0.1:6379> zadd mysort 60 zhangsan (integer) 1 127.0.0.1:6379> zadd mysort 50 li (integer) 1 127.0.0.1:6379> zadd mysort 80 wangwu (integer) 1 127.0.0.1:6379> zrange mysort 0 -1 1) "li" 2) "zhangsan" 3) "wangwu"
其他命令
127.0.0.1:6379> keys * 1) "myset" 2) "mylist" 3) "myhash" 4) "mysort" 127.0.0.1:6379> 127.0.0.1:6379> type myset set 127.0.0.1:6379> del myset (integer) 1 127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> get name "zhangsan" 127.0.0.1:6379> exipire name 5 (error) ERR unknown command 'exipire' 127.0.0.1:6379> expire name 5
Redis数据持久化
1.rdb: 默认的是这种方式, 每隔一段时间(可以配置的),把数据持久到硬盘中 性能好 数据完整性差 2.AOF: 日志方式记录,只要数据发生变化,就会往硬盘中存储一次 性能差, 数据完整性高 rdb持久方式: # after 900 sec (15 min) if at least 1 key changed # after 300 sec (5 min) if at least 10 keys changed # after 60 sec if at least 10000 keys changed save 900 1 save 300 10 save 60 10000 AOP持久化方式: # appendfsync always 每一次操作就持久化 appendfsync everysec 每隔一秒中进行一次持久化 # appendfsync no 不进行持久化