数据类型分类
存储数据类型分类:
结构化数据:可以用过二位表格形式表述这个数据
非结构化数据:不方便以二维表格形式表述的这种类型的数据
根据不同种存储数据类型分类分成两种不同类型的数据库:
sql结构化数据库:
里面存储的数据类型是结构化数据。(别称关系型数据库)
一个结构化数据库,创建在关系模型基础上
一般面向于记录
包括Orcale、MySQL、SQL Server、 Microsoft Access、DB2等
nosql非结构化数据库:
里面存储的数据类型是非结构化数据。(别称非关系型数据库)
除了主流的关系型数据库外的数据库,都是非关系型数据库
包括Redis、MongBD、Hbase、CouhDB
非关系新数据库产生背景
High performance 对数据库高并发读写需求
Huge Storage对海量数据高效存储与访问需求
High Scalability对数据库高可扩展性与高可用性需求
Redis简介
Redis基于内存运行并支持持久化
采用key-value(键值对)的存储形式
优点
具有极高的数据读写速度
支持丰富的数据类型
支持数据的持久化
原子性
支持数据备份
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
类型 | 简介 | 特性 | 场景 |
---|---|---|---|
String(字符串) | 二进制安全 | 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M | – |
Hash(字典) | 键值对集合,即编程语言中的Map类型 | 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去) | 存储、读取、修改用户属性 |
List(列表) | 链表(双向链表) | 增删快,提供了操作某一段元素的API | 1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列 |
Set(集合) | 哈希表实现,元素不重复 | 1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作 | 1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐 |
Sorted Set(有序集合) | 将Set中的元素增加一个权重参数score,元素按score有序排列 | 数据插入集合时,已经进行天然排序 | 1、排行榜 2、带权重的消息队列 |
Redis安装
1.上传文件、解压
tar xf redis-5.0.4.tar.gz
2.编译安装
cd redis-5.0.4/
make
make PREFIX=/usr/local/redis install
3.建立软链接
ln -s /usr/local/redis/bin/* /usr/bin/
4.执行脚本
cd redis-5.0.4/utils/
./install_server.sh
/usr/local/redis/bin/redis-server
Port : 6379
Config file : /etc/redis/6379.conf 配 置 文 件 路 径 \color{red}{配置文件路径} 配置文件路径
Log file : /var/log/redis_6379.log 日 志 文 件 路 径 \color{red}{日志文件路径} 日志文件路径
Data dir : /var/lib/redis/6379 数 据 文 件 路 径 \color{red}{数据文件路径} 数据文件路径
Executable : /usr/local/redis/bin/redis-server 可 执 行 文 件 路 径 \color{red}{可执行文件路径} 可执行文件路径
Cli Executable : /usr/local/bin/redis-cli 客 户 端 命 令 工 具 \color{red}{客户端命令工具} 客户端命令工具
netstat -anput | grep redis
5.Redis命令
[root@server6 ~]# /etc/init.d/redis_6379 stop 关 闭 \color{red}{关闭} 关闭
Stopping …
Waiting for Redis to shutdown …
Redis stopped
[root@server6 ~]# /etc/init.d/redis_6379 start 开 启 \color{red}{开启} 开启
Starting Redis server…
[root@server6 ~]# /etc/init.d/redis_6379 restart 重 启 \color{red}{重启} 重启
Stopping …
Waiting for Redis to shutdown …
Redis stopped
Starting Redis server…
[root@server6 ~]# /etc/init.d/redis_6379 status 查 看 状 态 \color{red}{查看状态} 查看状态
Redis is running (62607)
vi /etc/redis/6379.conf
redis-cli -h 20.0.0.16 -p 6379
数据类型
1.String(字符串)
string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
实例:set 键 值 设置键值对 get 键 获取键的值
20.0.0.16:6379> Set string1 6
ok
20.0.0.16:6379>Get string1
“6”
20.0.0.16:6379>Incr string1
(integer) 7
20.0.0.16:6379> Decr string1
(integer) 6
20.0.0.16:6379> Decrby string1 3
(integer) 3
20.0.0.16:6379>Incrby string1 5
(integer) 8
20.0.0.16:6379>
2.Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
实例:Hset:添加hash数据 hget:获取hash数据 hmget:获取多个hash数据
20.0.0.16:6379> Hset hash1 key1 a
(integer) 1
20.0.0.16:6379> Hset hash1 key2 b
(integer) 1
20.0.0.16:6379> Hset hash1 key3 c
(integer) 1
20.0.0.16:6379> Hmget hash1 key1 key2 key3
1) “a”
2) “b”
3) “c”
20.0.0.16:6379> Hset hash1 field1 a1 field2 b2
(integer) 2
20.0.0.16:6379> Hmget hash1 field1 field2
1) “a1”
2) “b2”
20.0.0.16:6379>
3.List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
实例:lpush:从左边推入值 lpop:从左边弹出值 rpush:从右边推入值 rpop:从右边弹出值 llen:查看某个list数据类型的长度
20.0.0.16:6379> Lpush list1 4
(integer) 1
20.0.0.16:6379> Lpush list1 5
(integer) 2
20.0.0.16:6379>Lpush list1 6
(integer) 3
20.0.0.16:6379>Llen list1
(integer) 3
20.0.0.16:6379>Rpop list1
“4”
20.0.0.16:6379> Llen list1
(integer) 2
20.0.0.16:6379> Lpush list2 4
(integer) 1
20.0.0.16:6379> Lpush list2 5
(integer) 2
20.0.0.16:6379>Lpush list2 6
(integer) 3
20.0.0.16:6379>Lpop list2
“6”
20.0.0.16:6379>Lpop list2
“5”
20.0.0.16:6379> Llen list2
(integer) 1
20.0.0.16:6379>
4.Set(集合)
Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
sadd 命令
添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
sadd key member
scard:查看set数据中存在的元素个数
sismember:判断set数据中是否存在某个元素
srem:删除某个set数据中的元素
实例:
20.0.0.16:6379> sadd set1 12
(integer) 1
20.0.0.16:6379> sadd set1 13
(integer) 1
20.0.0.16:6379> sadd set1 12
(integer) 0
20.0.0.16:6379> Scard set1
(integer) 2
20.0.0.16:6379> Sismember set1 11
(integer) 0
20.0.0.16:6379> Sismember set1 13
(integer) 1
20.0.0.16:6379>Srem set1 13
(integer) 1
20.0.0.16:6379>Sismember set1 13
(integer) 0
20.0.0.16:6379> Smembers set1
1) “12”
20.0.0.16:6379>
5.zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
使用方法:zadd key score member
zcard:查询
zrang:数据排序
实例:
20.0.0.16:6379>Zadd zset1 1.1 val1
(integer) 1
20.0.0.16:6379> Zadd zset1 2.2 val2
(integer) 1
20.0.0.16:6379> Zadd zset1 3.3 val3
(integer) 1
20.0.0.16:6379>Zadd zset1 3.3 val10
(integer) 1
20.0.0.16:6379> Zcard zset1
(integer) 4
20.0.0.16:6379>Zrangebyscore zset1 0 10
1) “val1”
2) “val2”
3) “val10”
4) “val3”
20.0.0.16:6379> Zrange zset1 0 10 withscores
1) “val1”
2) “1.1000000000000001”
3) “val2”
4) “2.2000000000000002”
5) “val10”
6) “3.2999999999999998”
7) “val3”
8) “3.2999999999999998”
20.0.0.16:6379>