赞
踩
数据模型
Redis的外围由一个键、值映射的字典构成。与其他非关系型数据库主要不同在于:Redis中值的类型 [1] 不仅限于字符串,还支持如下抽象数据类型:
值的类型决定了值本身支持的操作。Redis支持不同无序、有序的列表,无序、有序的集合间的交集、并集等高级服务器端原子操作。
redis支持的数据类型:
keys:
给存储在redis内存中的数据起的变量名字
Values:
Strings (Binary-safe strings)
Lists (Lists of binary-safe strings)
Sets (Sets of binary-safe strings)
Sorted sets (Sorted sets of binary-safe strings)
Hash
结构类型 | 结构存储的值 | 结构的读写能力 |
---|---|---|
String | 可以是字符串、整数或者浮点数 | 对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement) |
List | 一个链表,链表上的每个节点都包含了一个字符串 | 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素 |
Set | 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同 | 添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素 |
Hash | 包含键值对的无序散列表 | 添加、获取、移除单个键值对;获取所有键值对 |
Zset | 字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定 | 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素 |
在redis里边,除了==\n,空格==,不能作为名字的组成内容外,其他内容都可以作为key的名字部分。名字长度不做要求。
不同redis数据库切换:
最多有16个数据库供操作:
String是redis最基本的类型
Redis的string可以包含任何数据。包括jpg图片或者序列化的对象。
单个value值最大上限是1G字节。
如果只用string类型,redis就可以被看作加上持久化特性的memcache
Incr: increament 增长
该指令可以对key进行累加操作,默认是累加1操作,类似i++操作
该指令可以针对新key或已有key进行操作
新key:创建该key并累加1,其值为1
已有key:key的信息值类型要求必须为整型的
(已有key的信息值类型要求必须为整型的)
Decr 的操作模式与incr一致,不过其实减1操作
Substr 对内容进行截取,包括start和end标记位置内容
List类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list即可以用作栈,也可以用作队列。
上进下出:队列
上进上出:栈
该list链表类型应用场合:
获得最新的10个登录用户信息:select * from user order by logintime desc limit 10;
以上SQL语句可以实现用户需求,但是数据多的时候,全部数据都要受到影响,对数据库的负载比较高。必要情况还需要给关键字段(id或者logintime)设置索引,索引页比较耗费系统资源
如果通过list链表实现以上功能,可以在list链表中只保留最新的10个数据,每进来一个新的数据进来就删除一个旧数据。每次就可以从链表中直接或得需要的数据。极大节省各方面资源消耗
通过list链表保存登录系统的最新5个用户信息:、
Jim xiaoli jack xiaoming linken mary tom
设置一个list链表key newlogin,内部有5个元素:
该链表每添加一个新元素:
通过范围查找链表内部的全部元素信息:
Redis的set是string类型的无序集合,
Set元素最大可以包含(2的32次方-1)个元素。
关于set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union)、交集(intersection)、差集(difference)。通过这些操作可以很容易的实现SNS中好友推荐功能。
注意:每个集合中的各个元素不能重复。
该类型应用场合:qq好友推荐。
Tom朋友圈(与某某是好友):Mary Jack 小明wang5 wang6
Linkken朋友圈(与某某是好友):yuejan daxiong luce wang5 wang6
创建tomFri的set集合类型数据,内部有5个元素:
再创建一个linkenFri的set集合key:
集合取交集、并集:
两个集合互取差集:
查看集合中是否含有这个元素:
计算元素个数、移动元素、查看元素、删除指定元素:
和set一样,sorted set也是string类型元素的集合,
不同的是每个元素都会关联一个权。
通过权值可以有序的获取集合中的元素
该Sort set类型适合场合:
获得热门帖子(回复量)信息:select * from message order by backnum desc limit 5;
(以上需求可以通过简单SQL语句实现,但是SQL语句比较耗费mysql数据库资源)
案例:利用sort set实现获取最热门的前5贴的信息
排序集合中的每个元素都是值、权的组合
(之前的set集合类型每个元素就知识一个值)
我们只做一个sort set排序集合,里边值保留5个元素信息,该5个元素是回复量最高的
每个帖子被回复的时候,都有机会进入该集合里边,但是只有回复量最高的前5个帖子会存在于集合,回复量最低的就被删除。
关于重复元素:
Set类型:没有
List链表类型:有
Sort set类型:没有
创建一个sort set排序集合hotmessage的key,内部有五个元素:
按照权值由高到低的顺序或得具体元素值的信息:
增加一个新元素,就删除一个旧元素(回复量最低的)
Hash数据类型存储的数据与mysql数据库中存储的一条记录极为相似。
Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。
数据保存到硬盘的过程就称为“持久化”效果。
该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不适合频繁进行该持久化操作。
快照持久化在本地硬盘保留的数据备份文件:
快照持久化的备份频率(配置文件redis.conf):
快照持久化文件的名字和存储位置:
(配置文件 redis.conf)
手动发起快照持久化:
本质:把用户执行的每个写指令(添加、修改、删除)都备份到文件中,还原数据的时候就是执行具体写指令而已。
开启AOF持久化(会清空redis内部的数据):
(配置文件 redis.conf)
(同时可以修改备份文件的名字,默认就是appendonly.aof)
配置文件被修改,需要删除旧进程,再根据新的配置文件启动新进程:
新进程启动好后会看到对应的aof持久化备份文件appendonlf.conf:
Aof追加持久化的备份频率:
Aof持久化:
appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
Appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
Appendfsync no //完全依赖os,性能最好,持久化没保证
对sppendonly.conf文件做优化压缩处理:
(例如多个incr指令变为一个set指令)
3、redis持久化相关操作指令:
bysave 异步保存数据到磁盘(快照保存)
lastsave 返回上次成功保存到磁盘的Unix时间戳
shutdown 同步保存到服务器并关闭redis服务器
bgrewriteaof 当日志文件过长时优化AOF日志文件存储
./redis-cli bgrewriteaof
./redis-cli bgsave
./redis-cli -h 127.0.0.1 -p 6379 bgsave #手动发起快照
为了降低每个日的收服务器的堵在,可以多设置几个,并做主从模式
一个服务器负载“写”(添加、修改、删除)数据,其他服务器负载“读”数据
主服务器数据会“自动”同步给从服务器
配置redis.conf文件,称为192.168.39.159的从服务器:
之后文件保存退出,杀死旧的redis进程,启动新的redis进程
从服务器默认禁止写入操作;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。