nosql
特点
- 基于内存储存
- 非关系型数据库
- 适用于大规模数据
常见nosql框架
HBase
- 由Java编写
- 开源
- 参考谷歌的bigtable建模
Redis
- 使用C语言编写
- 开源、支持网络、基于内存、可选持久性
- 使用键值(key value)对储存数据库
Memcached
- 用于加速动态 web 应用程序,减轻关系型数据库负载
- 工作机制是在内存中开辟一块空间,然后建立一个 Hash 表,Memcached 自管理这些 Hash 表
......
nosql和sql的区别
Redis
简介
redis是一个开源的,内存中的数据结构存储系统,可以用作数据持久化、缓存和消息中间件,由C语言编写。
特点
- 数度快,读每秒11万次,写每秒8.1万次
- 支持持久化
RDB(redis database):把内存中写入的数据按照配置策略,指定时间段内把数据保存磁盘文件上。
AOF(append of file): 把执行命令保存到磁盘上日志文件中,当数据需要恢复时,再次读取日志文件,重新生成数据。
3.支持事务(原子性操作)
4.支持多语言,几乎支持现在流行的所有语言(编程语言)
安装redis
1、下载安装包
2、创建目录
mkdir /usr/redis
tar -xzvf /root/software/redis-5.0.5.tar.gz -C /usr/redis/ #解压压缩包
3、安装配置环境
由于redis是由C语言开发的,所以必须配置C的编译器
yum -y install gcc-c++
安装好后进入解压的文件夹中
make && make install
使用此安装方式会发现在usr/local/下多了一个bin目录
进入目录运行命令
redis-server
出现这个界面即redis已经开始运行,但是此时只能前台运行,退出这个界面就会停止服务,非常不方便,所以我们要配置文件使其后台运行
配置运行文件
vi redis.conf
- 绑定的主机地址,默认只能本机访问,如果需要外网访问修改如下
-
bind 0.0.0.0
- 保护模式,该模式控制外网是否可以连接redis服务,默认我们外网是无法访问的,如需外网连接改为no。
-
protected-mode no
- 端口号,默认6379
-
port 6379
- 当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
-
timeout 0
- 守护进程,默认是no即不以守护进程方式运行,改为yes
-
daemonize yes
- 连接密码,如果配置了密码,客户端在连接时需要通过AUTH <password> 命令提供密码,默认关闭(先不设置这个密码)
-
requirepass 123456
进入数据库
redis-server redis.conif #后面带配置好的加载文件
Redis指令
基础
ping
ping
输出返回PONG
echo
echo 111
输出返回"111"
quit
关闭服务器连接(与shutdown不同,不会关闭服务)
quit
select
选择数据库
select x #x为数据库编号,默认为0-15之间
server相关
dbsize
直接返回当前数据库的键值数量
dbsize
shutdown
直接关闭服务
shutdown
flushdb
清空当前数据库
flushdb
flushall
清空全部数据库
flushall
keys相关
keys *
输出当前数据库所有键值
keys *
keys *a #搜索以a结尾的键值
keys a* #搜索以a开头的键值
keys a[bc] #搜索以a开头并且接着b或c的键值,也就是查找ac或ab两种
del
删除指定键值
del a #删除键值a
expire
设置键值的过期时间
expire a 5 #设置键值a在5秒后过期
move
移动键值到其他数据库中
move a 2 #把键值a移动到编号为2的数据库中
rename
重命名键值
rename a aa #把键值a改名为键值aa
ttl
获取键值有效时间
ttl a #获取键值a的过期时间
type
获取键值的存储类型
#创建两个不同的文件类型
set a 2
hset map k2 v2
#查询类型
type a #输出string
type map #输出hash
exists
判断一个键值是否存在
exists a #存在返回(integer) 1 不存在返回0
五种数据类型
string
命令
- set: 单个设置字符串
- get:单个获取字符串
- mset:批量设置字符串
- mget:批量获取字符串
- incr:原子自增(针对整数内容的字符串)
- decr:原子自减(针对整数内容的字符串)
- setnx:键不存在的时候设置字符串,键已经存在时不能设置
- set a 10 ex 20 nx :设置键值对a=10 过期时间 20s,当a不存在的时候可以设置成功
- set a 10 px 2000 xx: 设置键值对a=10 过期时间2000ms,当a已经存在的时候才能设置成功
hashs
也就是在key的基础上再加一层
一个map下有多个key
命令
- hset: 设置单个键值对
- hget 获取单个键对应的值
- hmset: 批量设置键值对
- hmget:批量获取键值对
- hgetall:获取某个键的所有键值对数据
- hdel:删除某个键值对数据
- hkeys:获取所有的键
- hvals:获取所有的值
- hlen:获取键值对的个数
- del 键:删除redis键数据
list
就像一个横着的队列筒,先进的在右边,可以选择左弹出或者右弹出
命令
- lpush: 从左边添加数据
- rpush:从右边添加数据
- lpop:从左边弹出数据
- rpop:从右边弹出数据
- llen:返回列表长度
- lindex:返回列表中指定索引位置的数据 list.get(3)。索引为-1,表示获取最后一个值。
sets
这是一个集合类型,不储存重复元素,没有顺序之分
命令
- sadd: 以特定键添加一组set数据
- srem:删除特定数据
- smembers:返回set中得所有元素
- sismember:测试set中是否存在某个值
- scard:返回set中值得个数
- spop:随机弹出(删除)一个值
- srandmember:随机返回set中的值
- sinter: 求两个set的交集
- sinterstore:将两个set交集的结果,存储到另外一个set中
sorted sets
也是一个集合,没有重复元素,数据有权重排序
命令
- zadd :添加一组set数据。
- zrem:删除一个数据
- zcard:统计元素个数
- zcount:统计某个范围(分数)得元素个数
- zrangebyscore:返回指定分数范围得元素内容
- zscore 返回指定键的分数