Redis简单介绍
1. 何为NoSQL
nosql是Not Only Sql的缩写,指不仅仅是sql,是一种全新的数据库理念。泛指非关系型数据库。
关系型数据库
- 关系型数据库基于数据表,各数据表之间有外键相关联
- 关系型数据库是要持久化到磁盘上
非关系型数据库
- 非关系型数据库没有表结构,数据在文档中以键值对(K-V)存储
- 非关系型数据库是在内存中存储,存取数据较快
- 灵活性高,容易扩展。没有关系束缚,扩展容易。
Redis
Redis是c语言开发的非关系型数据库。它的存储性能很高,50个请求执行100000次,读的速度是110000次/s,写的速度是81000次/s。
Redis安装
- 安装redis编译的c环境,yum install gcc-c++
- 将redis-5.0.8.tar.gz上传到Linux系统中
- 解压到/usr/local下 tar -xvf redis-2.6.16.tar.gz -C /usr/local
- 进入redis-2.6.16目录 使用make命令编译redis
在redis-2.6.16目录中 使用make PREFIX=/usr/local/redis install命令安装 redis到/usr/local/redis中 - 拷贝redis-2.6.16中的redis.conf到安装目录redis中
- 启动redis 在bin下执行命令redis-server redis.conf
- 如需远程连接redis,需配置redis端口6379在linux防火墙中开发
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
/etc/rc.d/init.d/iptables save
value数据类型
value常用的数据类型是5种:字符串类型、散列类型(hash)、列表类型(list)、集合类型(set)、有序集合类型(sortSet)
字符串类型(String)
1
set key value #存值
get key #取值
还可以存储json类型数据
2
mset key value [key value] #一次设置多个K-V
mget key [key] #一次去多个值
3
incr key #j将原来的值加一
incrby key incrValue #将原来的值加incrValue
incrbyfloat key float #将原来的值加float(可为小数)
可以应用在热度,点赞,粉丝数等场景
4
setex key second value #设置key在second秒后失效
可以应用在抽奖倒计时场景
散列类型(hash)
新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
需要的存储结构:一个存储空间保存多个键值对数据
底层使用hash表实现数据结构
hash结构优化:
field数量较少时,底层是类数组结构
field数量较多时,底层是hashmap结构
hset key field value #添加数据
hget key field #提取数据
hmset key field value [field value] # 一次添加多条数据
hmget key field [field] # 一次去多条数据
hgetall key # 取出全部数据
hlen key # 存储的数据条数
hexists key field # key中是否存在field字段
hkeys key # 返回key的所有field字段名
hvals key # 返回key的所有field字段值
hincrby key field incrment
hincrbyfloat key field incrmentFloat
hash注意事项
- hash的value只允许存储字符串,不可以是其他数据类型,不允许嵌套(禁止套娃)
- 每个hash可以存2^31-1条
- hash类型十分贴近对象类型,但hash并不是为了存储对象而设计的,不可滥用
- hgetall key 中的field过多时,查取的速度比较慢,有可能会成为数据访问的瓶颈
hash应用场景
可以应用于购物车场景