NoSQL简介
- NoSQL,全名为Not Only SQL,指的是非关系型的数据库
- 随着访问量的上升,网站的数据库性能出现了问题,于是nosql被设计出来
优点/缺点
- 优点:
-
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系
- 缺点:
-
- 没有标准化
- 有限的查询功能
- 最终一致是不直观的程序
分类
类型 | 部分代表 | 特点 |
列存储 | Hbase Cassandra Hypertable | 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 |
文档存储 | MongoDB CouchDB | 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。 |
key-value存储 | Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis | 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) |
图存储 | Neo4J FlockDB | 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 |
对象存储 | db4o Versant | 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 |
xml数据库 | Berkeley DB XML BaseX | 高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。 |
安装
- 下载:打开redis官方网站,下载稳定版本(stable)
- 解压
tar zxvf redis-x.x.x.tar.gz
- 复制:推荐放到usr/local目录下
sudo mv -r redis-x.x.x/* /usr/local/redis/ 进入redis目录 cd /usr/local/redis/
- 生成
sudo make
- 测试
sudo make test 这段运行时间会较长
- 安装:将redis的命令安装到/usr/bin/目录
sudo make install
运行
- 启动服务器:在桌面目录
redis-server 按ctrl+c停止
- 启动客户端:在新终端中运行如下代码
基本配置
- 在源文件/usr/local/redis目录下,文件redis.conf为配置文件
- 绑定地址:如果需要远程访问,可将此行注释
bind 127.0.0.1
- 端口,默认为6379
port 6379
- 是否以守护进程运行
-
- 如果以守护进程运行,则不会在命令行阻塞,类似于服务
- 如果以非守护进程运行,则当前终端被阻塞,无法使用
- 推荐改为yes,以守护进程运行
daemonize no|yes
- 数据文件
dbfilename dump.rdb
- 数据文件存储路径
dir的默认值为./,表示当前目录 推荐改为:dir /var/lib/redis
使用配置文件方式启动
- 直接运行redis-server会直接运行,阻塞当前终端
- 一般配置文件都放在/etc/目录下
sudo cp /usr/local/redis/redis.conf /etc/redis/
- 推荐指定配置文件启动
sudo redis-server /etc/redis/redis.conf
- 停止redis服务
ps ajx|grep redis sudo kill -9 redis的进程id
redis-cli
- 运行命令
ping set 'a' '123'
- 当添加键值后,发现在当前运行的目录下,创建了一个文件:dump.rdb,这个文件用于将数据持久化存储
数据操作
- redis是key-value的数据,所以每个数据都是一个键值对
- 键的类型是字符串
- 值的类型分为五种:
-
- 字符串string
- 哈希hash
- 列表list
- 集合set
- 有序集合zset
redis数据库的常用操作
- delete(*names):删除redis中的任意数据类型
- exists(name):检测redis的name是否存在
- keys(pattern='*'):根据模型获取redis的name
# 扩展:
-
- KEYS * 匹配数据库中所有 key 。
- KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
- KEYS h*llo 匹配 hllo 和 heeeeello 等。
- KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo
- expire(name,time):为某个redis的某个name设置超时时间
- rename(src,dst):对redis的name重命名
- move(name,db):将redis的某个值移动到指定的db下
- randomkey():随机获取一个redis的name(不删除)
- type(name):获取name对应值的类型
- scan(cursor=0, match=None, count=None)
- scan_iter(match=None, count=None) :同字符串操作,用于增量迭代获取key
- flushall 删除所有的keys
- select 5 选择哪个库