文章目录
- 一、存储数据类型分类
- 二、关系数据库与非关系型数据库
- 三、非关系型数据库产生背景
- 四、Redis简介
- 五、Redis的数据类型
- 5.1 String(字符串)
- 5.2 Hash(哈希)
- 5.3 list(列表)
- 5.4 set(集合)
- 5.5 zset(sorted set:有序集合)
- 5.6 各个数据类型应用场景
- 六、Redis部署
一、存储数据类型分类
- 结构化数据:可以通过二维表格形式表述这个数据。
- 非结构化数据:不方便以二维表格的形式表述的这种类型的数据
- 根据不同种存储数据类型分类分成两种不同类型的数据库:
- sql结构化数据库:里面存储的数据类型是结构化数据。别称:关系型数据库
- nosql非结构化数据库:里面存储的数据类型是非结构化数据。别称:非关系型数据库
二、关系数据库与非关系型数据库
- 关系数据库
- 一个结构化的数据库,创建在关系模型基础之上
- 一般面向于记录
- 包括:Oracle、MySQL、SQL Server、Microsoft Access、DB2等
- 非关系型数据库
- 除了主流的关系型数据库外的数据库,都认为是非关系型
- 包括:Redis、MongoDB、HBASE、CouhDB等
三、非关系型数据库产生背景
- High performance——对数据库高并发读写需求
- Huge Storage——对海量数据高效存储于访问需求
- High Scalability && High Availability——对数据库高可扩展性与高可用性需求
四、Redis简介
- Redis基于内存运行并支持持久化
- 采用key-value(键值对)的存储形式
- 优点:
- 具有极高的数据读写速度
- 支持丰富的数据类型
- 支持数据的持久化
- 原子性
- 支持数据备份
五、Redis的数据类型
Redis支持物种数据类型:string(字符串),hash(哈希)、list(列表)、set(集合)、以及zset(sortedset:有序集合)
5.1 String(字符串)
- string是redis最基本的类型,可以理解成与Memcached一模一样的类型,一个key对应一个value
- string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象
- string类型是redis最基本的额数据类型,string类型的值最大能存储512MB
- 实例:set键值设置键值对get键获取键的值
Set string1 8
get string1
8
Incr string1(自增1)
9
Decr string1(自减1)
8
Decrby string1 2(减少2)
6
Incrby string1 5 (在基础上增加5)
11
5.2 Hash(哈希)
- Redis hash 是一个键值(key=>value)对集合
- Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象
- 实例:Hset:添加hash数据 hget:获取hash数据 hmget:获取多个hash数据
5.3 list(列表)
- Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
- 实例:lput:从左边推入值(lpop):从左边弹出值(rpush):从右边推入值(rpop):从右边弹出值 len:查看某个list数值类型的长度
5.4 set(集合)
- Redis的set是string类型的无序集合
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是o(1)。
- sadd命令 ,添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中返回0
- sadd key member
- scard:查看set数据中存在的元素个数
- sismember:判断set数据中是否存在某个元素
- srem:删除某个set数据中的元素
5.5 zset(sorted set:有序集合)
Redis zset 和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset 的成员是唯一的,但是分数(score)却可以重复。
5.6 各个数据类型应用场景
String(字符串) | 二进制安全 | 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M | |
Hash(字典) | 键值对集合,即编程语言中的Map类型 | 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去) | 存储、读取、修改用户属性 |
List(列表) | 链表(双向链表) | 增删快,提供了操作某一段元素的API | 1、最新消息排行等功能 2、消息队列 |
Set(集合) | 哈希表实现,元素不重复 | 1、添加、删除,查找的复杂度都是0 2、为集合提供了求集合、并集、差集等操作 | 1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐 |
Sorted | 将sed中的元素增加 | 数据插入集合时,已经进行天然排序 | 1、排行榜 2、带权重的消息队列 |
六、Redis部署
##编译安装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/local/bin/
cd utils/
./install_server.sh
##修改配置文件,添加本机地址
vi /etc/redis/6379.conf
bind 192.168.40.10 127.0.0.1
## 重启
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
## 远程连接数据库
redis-cli -h 192.168.40.10 -p 6379