一、关系型数据库与非关系型数据库
1.1 关系型数据库
- 一个结构化的数据库,创建在关系模型基础上,也叫做结构化数据库,用来存储结构化数据,可以通过二维表格形式表述这个数据
- 一般面向于记录
- 主要包括
Oracle、MySQL、SQL Server、Microsoft Access、DB2等
1.2 非关系型数据库
- 用来存储不便以二维表格形式表示的数据类型的数据的数据库,也称为非结构化数据库。
- 除了主流的关系型数据库外的数据库,都认为是非关系型
- 主要包括
Redis、MongBD、Hbase、CouhDB等 - 产生背景即优势
High performance——对数据库高并发读写需求Huge Storage——对海量数据高效存储与访问需求
High Scalability && High Availability——对数据库高可扩展性与高可用性需求
二、Redis
2.1 redis概述
- Redis基于内存运行并支持持久化
- 采用key-value(键值对)的存储形式
- 优点
具有极高的数据读写速度
支持丰富的数据类型
支持数据的持久化原子性
支持数据备份
2.2 redis与memcached的比较
Memcached | Redis | |
---|---|---|
类型 | Key-value数据库 | Key-value数据库 |
过期策略 | 支持 | 支持 |
数据类型 | 单一数据类型 | 五大数据类型 |
持久化 | 不支持 | 支持 |
主从复制 | 不支持 | 支持 |
虚拟内存 | 不支持 | 支持 |
2.3 redis支持的五大数据类型
2.3.1 string(字符串)
- string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
- string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
- string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
2.3.2 Hash(哈希)
- Redis hash 是一个键值(key=>value)对集合。
- Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
2.3.3 List(列表)
- Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
2.3.4 Set(集合)
- Redis 的 Set 是 string 类型的无序集合。
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 0和1,其中1表示成功,0表示失败。
2.3.5 zset(sorted set:有序集合)
- Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
- 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
- zset的成员是唯一的,但分数(score)却可以重复。
三、redis的配置
tar zxvf redis-5.0.4.tar.gz
cd redis-5.0.4/
make
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/bin
cd redis-5.0.4/utils/
./install_server.sh
netstat -anptu | grep redis
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
netstat -anptu | grep redis
redis-cli
若想要通过ip地址来连接的话,则需要在配置文件中修改,加上ip地址。
vi /etc/redis/6379.conf
bind 127.0.0.1 192.168.10.11
/etc/init.d/redis_6379 restart
四、五大数据类型的应用实例
4.1 redis中关于string的操作
set key value(set a 5) # 设置字符串a为5
get key (get a) # 读取字符串a
incr key (incr a) # 自增长字符串a,数值为1
decr key (decr a) # 自下降字符串a,数值为1
incrby key b(incrby a 2) # 自定义增长字符串a,增长数值为2
decrby key b(decrby a 3) # 自定义下降字符串a,下降数值为3
4.2 redis中关于hash的操作
hset hash key1 value1 # 单次存储一个字符串
hset hash key2 value2 key3 value3 # 单次存储多个字符串
hget key1 # 单次读取一个字符串
hmget key2 key3 # 单次读取多个字符串
4.3 redis中关于list的操作
-
list列表中的数据遵循着先写进然后进入最右边的情况,所以有着出入的顺序关系。
-
位置从0开始,依次递增
lpush list1 1 # 从左添加一个字符串 rpush list1 2 # 从右边添加一个字符串 lpop list1 # 从左边取出一个字符串 rpop list1 # 从右边取出一个字符串 llen list # 显示指定字符串的长度 lrange list 0 2 # 从左显示字符串的值
4.4 redis中关于set(无序集合)的操作
-
set是string的无序集合
sadd set 1 # 添加set数据中元素,成功返回1 ,失败返回0 smembers set # 查看set数据元素 srem set 1 # 删除数据set中元素1 sismember set 1 # 查看set数据中是否存在元素1,存在返回1 ,不存在返回0
4.5 redis中关于zset(有序集合)的操作
zset通过分数为集合中的成员进行从小到大的排序
zadd 数组 数值 名称 # 为数组添加指定数值的名称值
zrange 数组 0 10 # 只显示名称排序,从小到大,0为第一个
zrange 数组 0 10 withscores # 附带数组排序显示,从小到大