NoSQL 数据库简介
技术发展
技术的分类
1、解决功能性的问题: Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN 2、解决扩展性的问题: Struts、Spring、SpringMVC、Hibernate、Mybatis 3、解决性能的问题: NoSQL、Java 线程、Hadoop、Nginx、MQ、ElasticSearch
NoSQL 数据库
NoSQL 数据库概述
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是 SQL”,泛指非关系型的数据库。 NoSQL 不依赖业务逻辑方式存储,而以简单的 key-value 模式存储。 因此大大的增加了数据库的扩展能力 不遵循 SQL 标准 不支持 ACID 远超于 SQL 的性能
NoSQL 适用场景
对数据高并发的读写 海量数据的读写 对数据高可扩展性的
NoSQL 不适用场景
需要事务支持 基于 sql 的结构化查询存储,处理复杂的关系,需要即席查询。 (用不着 sql 的和用了 sql 也不行的情况,请考虑用 NoSql)
Memcache
很早出现的 NoSql 数据库 数据都在内存中,一般不持久化 支持简单的 key-value 模式,支持类型单一 一般是作为缓存数据库辅助持久化的数据库
Redis
几乎覆盖了 Memcached 的绝大部分功能 数据都在内存中,支持持久化,主要用作备份恢复 除了支持简单的 key-value 模式,还支持多种数据结构的存储,比如 list、set、hash、zset 等。 一般是作为缓存数据库辅助持久化的数据库
MongoDB
高性能、开源、模式自由(schema free)的文档型数据库数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘 虽然是 key-value 模 式 , 但 是 对 value ( 尤 其 是 json)提供了丰富的查询功能支持二进制数据及大型对象 可以根据数据的特点替代 RDBMS ,成为独立的数据库。或者配合 RDBMS,存储特定的数据
Redis 概述安装
Redis 是一个开源的 key-value 存储系统。 和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型) 这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作, 而且这些操作都是原子性的。 在此基础上,Redis 支持各种不同方式的排序。 与 memcached 一样,为了保证效率,数据都是缓存在内存中。 区别的是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。 并且在此基础上实现了 master-slave(主从)同步
常用五大数据类型
redis 常见数据类型操作命令
Redis 键(key)
keys * 查看当前库所有 key (匹配:keys *1) exists key 判断某个 key 是否存在 type key 查看你的 key 是什么类型 del key 删除指定的 key 数据 unlink key 根据 value 选择非阻塞删除,仅将 keys 从 keyspace 元数据中删除,真正的删除会在后续异步操作。 expire key 10 10 秒钟:为给定的 key 设置过期时间 ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期 select 命令切换数据库 dbsize 查看当前数据库的 key 的数量 flushdb 清空当前库 flushall 通杀全部库
Redis 字符串(String)
简介
String 是 Redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。 String 类型是二进制安全的。意味着 Redis 的 string 可以包含任何数据。比如 jpg 图片 或者序列化的对象。 String 类型是 Redis 最基本的数据类型,一个 Redis 中字符串 value 最多可以是 512M
常用命令
set <key><value> 添加键值对 *NX: 当数据库中 key 不存在时,可以将 key-value 添加数据库 *XX: 当数据库中 key 存在时,可以将 key-value 添加数据库,与 NX 参数互斥 *EX: key 的超时秒数 *PX: key 的超时毫秒数,与 EX 互斥 get <key> 查询对应键值 append <key><value> 将给定的<value> 追加到原值的末尾 strlen <key> 获得值的长度 setnx <key><value> 只有在 key 不存在时 设置 key 的值incr <key> 将 key 中储存的数字值增 1 只能对数字值操作,如果为空,新增值为 1decr <key> 将 key 中储存的数字值减 1 只能对数字值操作,如果为空,新增值为-1 incrby / decrby <key><步长> 将 key 中储存的数字值增减。自定义步长。
|