Redis简单介绍与使⽤NOSQL
什么是NOSQL
NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”
是⼀项全新的数据库理念,泛指⾮关系型的数据库。
NOSQL解决什么问题
web程序不再仅仅专注在功能上,同时也在追求性能
High performance
对数据库⾼并发读写的需求
现在数据库并发负载⾮常⾼,往往要达到每秒上万次读写请求
关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经⽆法承受了Huge Storage
对海量数据的⾼效率存储和访问的需求
对于关系数据库来说,在⼀张2.5亿条记录的表⾥⾯进⾏SQL查询,效率是极其低下乃⾄不可忍受的
High Scalability && High Availability-
对数据库的⾼可扩展性和⾼可⽤性的需求
对于很多需要提供24⼩时不间断服务的⽹站来说,
对数据库系统进⾏升级和扩展是⾮常痛苦的事情,往往需要停机维护和数据迁移
主流的NOSQL产品
主流产品
键值(Key-Value)存储数据库-redis
主要使⽤内存, 有两种持久化⽅案, 速度⾮常快,
⼀般做分布式缓存使⽤
⽂档型数据库-MongoDB
主要使⽤硬盘存储, 所以不会担⼼数据丢失, 速度介于redis和传统数据库之间.
但是mongodb更擅长存储⼤⽂本数据, 以及⼀些⾮结构化数据,
mongodb⽐redis的数据类型更加丰富.
例如: 存储⼩说⽹站的⼩说, 存储电商⽹站的评论等这些数据
redis概述
Redis是⽤C语⾔开发的⼀个开源的⾼性能键值对(key-value)数据库
官⽅提供测试数据
50个并发执⾏100000个请求
读的速度是110000次/s
写的速度是81000次/s
redis的应⽤场景
缓存(数据查询、短连接、新闻内容、商品内容等等)
聊天室的在线好友列表
任务队列。(秒杀、抢购、12306等等)
应⽤排⾏榜
⽹站访问统计
数据过期处理(可以精确到毫秒
分布式集架构中的session分离
业务流程
获取数据的时候先从redis中获取, 如果获取到数据则直接返回, 就不⽤访问数据库了
如果获取不到数据, 可以从数据库中查询, 查询到后放⼊redis中⼀份, 下回就可以直接从redis中查询到
这样⼤⼤降低了数据库的⾼并发访问压⼒.
持久化⽅案
RDB(默认) 分时持久化
可以在配置⽂件中设定, 多长时间持久化⼀次, 持久化次数少也就是操作硬盘的次数少,
速度快. 但是如果在没有完成持久化前, 如果服务器断电, 则内存中没有持久化的数据会丢失.
AOF 实时持久化
每次向redis中做增删改操作, 都会将数据持久化到硬盘上, 数据可靠性⾼, 不会丢失,但是速度慢
redis安装
windows
window版的安装及其简单,
解压Redis压缩包完成即安装完毕
双击Redis⽬录中可以启动redis服务,Redis服务占⽤的端⼝是6379
关闭Redis的控制台窗⼝就可以关闭Redis服务
linux
1. 将redis在Linux的安装包上传到/usr/local当中
2. 解压
tar -xvf redis-4.0.
3. 编译安装
进⼊到redis⽬录
执⾏命令:
1. make
2. make install PREFIX='/usr/local/redis-4.0.9/6379'
4. 启动
进⼊到/usr/local/redis-4.0.9/6379/bin⽬录当中
执⾏命令: ./redis-server
5. 修改配置⽂件
把/usr/local/redis-4.0.9/⽬录下的配置⽂件复制⼀份到6379⽬录下
命令:cp /usr/local/redis-4.0.f /usr/local/redis-4.0.9/6379/bin/
修改配置⽂件
f
bind 127.0.0.1 # 将这⾏代码注释,监听所有的ip地址,外⽹可以访问
protected-mode no # 把yes改成no,允许外⽹访问
daemonize yes # 把no改成yes,后台运⾏
6. 重新启动
.
/f
ps -ef|grep redis
Redis的数据类型
redis是⼀种⾼级的key-value的存储系统,其中value⽀持五种数据类型
Redis的5种数据类型
1. 字符串(String)
2. 哈希(hash)
3. 字符串列表(list)
4. 字符串集合(set)
5. 序字符串集合(sorted set)
key的定义注意点:
key不要太长,最好不要操作1024个字节,这不仅会消耗内存还会降低查效率
key不要太短,如果太短会降低key的可读性
在项⽬中,key最好有⼀个统⼀的命名规范
基本操作
在redis-4.0.9/6379/bin⽬录下输⼊命令
./redis-cli
字符串类型string
概述
设定key持有指定的字符串value,如果该key存在则进⾏覆盖操作。总是返回”OK”
操作
1. set key value 设置key值
2. get key 获取key值
获取key的value。如果与该key关联的value不是String类型,redis将返回错误信息,3. del key 删除key值
哈希类型hash
概述
Redis中的Hash类型可以看成具有String Key和String Value的map容器
所以该类型⾮常适合于存储值对象的信息
redis支持的五种数据类型操作
1. hset key field value 为指定的key设定field/value对(键值对)
hset myhash username joker
存⼊hash类型值 myhast 存的值为 username:joker
2. hget key field 返回指定的key中的field的值
hget myhash username
3. hdel key field [field … ]
可以删除⼀个或多个字段,多个之间空格隔开,返回值是被删除的字段个数
4. hgetall key 可以获取该键的所有数据
列表类型list
概述
在Redis中,List类型是按照插⼊顺序排序的字符串链表。
和数据结构中的普通链表⼀样,我们可以在其头部(left)和尾部(right)添加新的元素在插⼊时,如果该键并不存在,Redis将为该键创建⼀个新的链表
与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除
List中可以包含的最⼤元素数量是4294967295
操作
1. lpush key values[value1 value2…]
在指定的key所关联的list的头部插⼊所有的values,
如果该key不存在,该命令在插⼊的之前创建⼀个与该key关联的空链表,之后再向该链表的头部插⼊数据。
插⼊成功,返回元素的个数
2. lpop key
返回并弹出指定的key关联的链表中的第⼀个元素,即头部元素
如果该key不存在,返回nil;若key存在,则返回链表的头部元素。
3. rpop key
从尾部弹出元素。
4. lrange key 遍历该键的所有数据
lrange key 0 -1 返回所有
lrange key 0 2 返回从0开始 0 1 2
集合类型set
概述
在Redis中,我们可以将Set类型看作为没有排序的字符集合
和List类型⼀样,我们也可以在该类型的数据值上执⾏添加、删除或判断某⼀元素是否存在等操作
Set集合中不允许出现重复的元素。
操作
1. sadd key values[value1、value2…]
向set中添加数据,如果该key的值已有则不会重复添加
2. smembers key
获取set中所有的成员
3. srem key members[member1、member2…]
删除set中指定的成员
有序集合类型sortset
在redis中,可以保证不重复的元素,仍然可以进⾏排序
1. zadd key values[value1、value2…]
例:zadd mysort 5 zs 10 lisi 7 wc 8 xk
2. zrange key 索引索引
查看排序索引⼩的排在前
3. zrem key value
删除sort值
Redis的通⽤命令
1. keys pattern
获取所有与pattern匹配的key,返回所有与该key匹配的keys。
*表⽰任意⼀个或多个字符,?表⽰任意⼀个字符
2. del key1 key2…
删除指定的key
3. exists key
判断该key是否存在,1代表存在,0代表不存在
4. type key
获取指定key的类型。该命令将以字符串的格式返回
返回的字符串为string、list、set、hash,如果key不存在返回none
5. EXPIREAT key timestamp设置key过期时间
Redis的持久化
概述
Redis的⾼性能是由于其将所有数据都存储在了内存中
为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这⼀过程就是持久化;Redis⽀持两种⽅式的持久化,可以单独使⽤其中⼀种或将⼆者结合使⽤。
⼀种是RDB⽅式,⼀种是AOF⽅式。
RDB持久化(默认⽀持,⽆需配置)
该机制是指在指定的时间间隔内将内存中的数据集快照写⼊磁盘。
AOF持久化
该机制将以⽇志的形式记录服务器所处理的每⼀个写操作
在Redis服务器启动之初会读取该⽂件来重新构建数据库,以保证启动后数据库中的数据是完整的。
⽆持久化
我们可以通过配置的⽅式禁⽤Redis服务器的持久化功能
这样我们就可以将Redis视为⼀个功能加强版的memcached了
redis可以同时使⽤RDB和AOF
RDB持久化机制
RDB持久化机制优点
⼀旦采⽤该⽅式,那么你的整个Redis数据库将只包含⼀个⽂件
这对于⽂件备份⽽⾔是⾮常完美的
RDB持久化机制缺点
如果你想保证数据的⾼可⽤性,即最⼤限度的避免数据丢失,那么RDB将不是⼀个很好的选择。因为系统⼀旦在定时持久化之前出现宕机现象,此前没有来得及写⼊磁盘的数据都将丢失。
由于RDB是通过fork⼦进程来协助完成数据持久化⼯作的,因此,如果当数据集较⼤时,可能会导致整个服务器停⽌服务⼏百毫秒,甚⾄是1秒钟
快照触发条件
客户端执⾏命令save和bgsave会⽣成快照;
根据配置⽂件save m n规则进⾏⾃动快照;
主从复制时,从库全量复制同步主库数据,此时主库会执⾏bgsave命令进⾏快照;
客户端执⾏数据库清空命令FLUSHALL时候,触发快照;
客户端执⾏shutdown关闭redis时,触发快照;
RDB持久化机制的配置
在f进⾏修改配置
1. save m n
配置快照(rdb)促发规则,格式:save
save 900 1 900秒内⾄少有1个key被改变则做⼀次快照
save 300 10 300秒内⾄少有10个key被改变则做⼀次快照
save 60 10000 60秒内⾄少有10000个key被改变则做⼀次快照
#关闭该规则使⽤save “ ”
2. dbfilename dump.rdb
rdb持久化存储数据库⽂件名,默认为dump.rdb
3. stop-write-on-bgsave-error yes
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论