Redis应用介绍
来源:互联网 发布:阿里吧最新软件 编辑:程序博客网 时间:2024/06/06 08:57
Redis应用介绍
1 Redis简介
NoSQL数据库
Ø NoSQL=Not Only SQL,是非关系型的数据库。是以Key-Value的形式存储,不一定遵循传统数据库的一些基本要求,例如:SQL标准、ACID属性(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)、结构化表结构等。
Ø 主要特性:非关系型的、分步式的、开源的、水平可扩展
Ø 适用场景: High performance、 Huge storage、 High scalability&& HighAvailability
Redis数据库
Ø 基本介绍:Redis是一个开源的Key-Value存储系统,由ANSI C编写,开发由VMware主持。它支持存储的value类型有:string(字符串),list(链表), set(无序集合),zset(sorted set有序集合)和hash.可以把redis看成一个数据结构服务器。这些数据类型都支持pust/pop、add/remove及取交集、并集和差集运算,支持各种不同方式的排序。数据都是缓存在内存中的,它也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并实现了master-slave(主从)同步。
Ø 客户端语言: Redis提供的API语言包括C、C++、C#、Java、JavaScript、Lua、Objective-C、Perl、PHP、Python、Ruby、Go、Tcl等
Ø 应用场合:取最新N个数据的操作、排行榜应用、精确设定过期时间的应用、计数器应用、 Pub/Sub构建实时消息系统、构建队列系统、数据缓存
2 Redis安装步骤常用命令
安装准备
Ø 操作系统:Linux 64位
Ø Redis版本: redis-2.8.9.tar.gz
Ø 安装目录: /home/robinjun
安装过程
Ø 解压:tar -zxvfredis-2.8.9.tar.gz
Ø 编译:进入解压目录执行make
Ø 安装:进入SRC目录执行 makeinstall
Ø 注:编译后src文件夹中的可执行程序
Ø redis-server:服务器的启动程序
Ø redis-cli:命令行工具,客户端
Ø redis-benchmark:redis性能测试工具
Ø redis-stat:状态检测工具(状态参数延迟)
参数修改
vi redis.conf
Ø 后台启动:daemonizeno -> daemonize yes
Ø 内存大小:#maxmemory <bytes>
maxmemory 1024m
服务命令
Ø Redis启动: redis-server redis.conf
Ø 验证端口: netstat-tnl | grep 6379
Ø 启动客户端连接:redis-cli
Ø 执行info命令:显示Redis服务的基本信息
Ø 关闭服务:pkillredis-server
或者 redis-cli shutdown
或者 redis-cli -p port shutdown
3 Redis参数配置介绍
daemonize 如果需要在后台运行,把该项改为yes
pidfile 配置多个pid的地址,默认在/var/run/redis.pid
bind 绑定ip,设置后只接受自该ip的请求
port 监听端口,默认为6379
timeout 设置客户端连接时的超时时间,单位为秒
loglevel 分为4级,debug、verbose、notice、warning
logfile 配置log文件地址
databases 设置数据库的个数,默认使用的数据库为0
save * * 设置保存快照的频率,第一个*表示多长时间,第二个*表示 执行多少次写操作。
在一定时间内执行一定数量的写操作时,自动保存快照。
rdbcompression 在进行镜像备份时,是否进行压缩
Dbfilename 镜像备份文件的文件名
Dir 数据库镜像备份的文件放置路径
Slaveof 设置数据库为其他数据库的从数据库
Masterauth 主数据库连接需要的密码验证
Requirepass 设置登录时需要使用的密码
Maxclients 限制同时连接的客户数量
Maxmemory 设置redis能够使用的最大内存
Appendonly 开启append only模式
appendfsync 设置对appendonly.aof文件同步的频率,设置类型:
appendfsync always、appendfsynceverysec、appendfsync no
vm-enabled 是否虚拟内存的支持
vm-swap-file 设置虚拟内存的交换文件路径
vm-max-memory 设置redis使用的最大物理内存大小
vm-page-size 设置虚拟内存的页大小
vm-pages 设置交换文件的总page数量
vm-max-threads 设置VMIO同时使用的线程数量
glueoutputbuf 把小的输出缓存存放在一起
hash-max-zipmap-entries 设置hash的临界值
activerehashing 重新hash
4 Redis与Memcached比较
5 Redis数据类型
5.1 String
String:是最简单的类型,一个KEY,一个VALUE,String类型是二进制安全的,可以包含任何数据,如图片或者已序列化的对象等信息。
应用场景:和Memcached应用一样,存储字符串类型的Key-Value,不错可操作功能要丰富很多。
重点方法
Ø Set set key value[EX seconds] 将字符串值 value 关联到 key EX设置过期时间
Ø Get get key 返回 key 所关联的字符串值,不存在返回 nil
Ø Setnx setnx key value 将 key 的值设为 value ,当且仅当 key 不存在
Ø Setex setex key value seconds 将值 value 关联到 key 并设置过期时间,单位秒
Ø Setrange setrange key offsetvalue 用value覆写给定 key所储存的字符串,从偏移量offset开始
Ø Mset mset key value [keyvalue ...] 同时设置一个或多个key-value 对
Ø Msetnx mget key value[key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
Ø Getset getset keyname keyvalue 将给定 key 的值设为 value ,并返回 key 的旧值
Ø Incr incr key 将 key 中储存的数字值增一
Ø incrBy incrby keyincrement 将 key 所储存的值加上增量 increment
Ø Incrbyfloat incrbyfloat key increment 将 key 所储存的值加上增量 increment(小数)
5.2 List
List:是一个链表数据结构(双向链表),主要功能是push、pop,获取一个范围的所有值等,操作中key可以理解为List的名称。Redis中的List就是每个子元素都是一个String类型的双向链表,可以通过push、pop方法在链表的表头或表尾进行添加或删除元素,所以List既可以作为栈、也可以作为队列使用。
应用场景:系统的缓冲队列(如日志异步入库);微博粉丝列表;热点话题评论保持数据为5000条评论。
重点方法:
Ø LPUSH LPUSH key value[value ...]将一或多个值插入到列表 key 的表头
Ø LRANGE LRANGE key start stop 返回指定区间的元素
Ø RPUSH RPUSH key value[value ...] 将一或多个值插入到列表 key 的表尾
Ø LSET LSET key indexvalue 将下标为 index 的元素的值设置为 value
Ø LREM LREM key count value根据count,移除列表中与value相等的元素
Ø LTRIM LTRIM key startstop 保留指定区间内的元素
Ø LPOP LPOP key 移除并返回列表 key 的头元素
Ø RPOP RPOP key 移除并返回列表 key 的尾元素
Ø RPOPLPUSH RPOPLPUSH source destination 弹出一个元素后插入到另集合中
Ø LLEN LLEN key 返回key中子元素的个数
5.3 Hash
Hash:Redis的hash类型是一个String类型的field和value的映射,hash适合存储对象(有多个属性),对象的每个字段存放单个的string类型,可以方便存取整个对象。
应用场景:存放用户信息(用户账号为key),每个field存放一个属性值;存放询价单信息(商品编码为key),每个厂家为field,值为报价
重点方法
Ø Hset hset key field value 设置一个field对应的值,如果key不存在,则新建该key
Ø Hmset hmset key field value [field value ...] 同时设置多个field对应的值
Ø Hincrby hincrby keyfield increment 为key中的域 field 的值加上增量,正数加,负数减
Ø Hincrbyfloat hincrbyfloat keyfield increment 为field的值加上Double增量,正数加,负数减
Ø Hexists hexists keyfield 查看哈希表 key 中,给定域 field 是否存在
Ø Hlen hlen key 返回哈希表 key 中域的数量
Ø Hdel hdel key field[field ...] 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽
Ø Hkeys hkeys key 返回哈希表 key 中的所有域
Ø Hvals hvals key 返回哈希表 key 中所有域的值
Ø Hgetall hgetall key 返回哈希表 key 中,所有的域和值
5.4 Set
Set:Redis是String类型的无需不重复集合,可以进行并集、交集、差集运算。最大元素个数2^32-1
应用场景:数据剔重;判断某个成员是否在一个set集合内(实现sns中的好友推荐)
重点方法
Ø Sadd SADD key member [member ... ] 增加元素
Ø Smembers SMEMBERS key 返回所有成员元素
Ø Srem SREM key member [member ... ] 移除成员元素
Ø Spop SPOP key 弹出一个元素(随机)
Ø Sdiff SDIFF key [key ... ] 返回差集元素
Ø Sdiffstore SDIFFSTORE destination key [key ... ] 返回差集并存储
Ø Sinter SINTER key[key ...] 返回交集元素
Ø Sunion SUNION key[key ...] 返回并集元素
Ø Smove SMOVE sourcedestination member 移动元素到新集合
Ø Sismember SISMEMBER key member 判断是否为成员元素
5.5 Zset
Sorted Set :是普通set的一个升级,它在set的基础上增加了一个顺序属性,顺序属性在添加或修改元素时可以指定,每次指定后,Zset会重新按照新的顺序值进行调整。key可以理解为zset集合的名字,值可以理解有2列,一列正真的值,另一列存放顺序值。
重点方法:
Ø ZADD ZADD key scoremember [[score member] [score member] ...] 将一个或多个 member 元素及其 score 值加入到有序集 key 当中
Ø ZREM ZREM key member[member ...] 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略
Ø ZRANK ZRANK key member 返回有序集 key 中成员 member 的排名。其中有序集成员按score 值递增(从小到大)顺序排列
Ø ZREVRANK ZREVRANK keymember返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从大到小)顺序排列
Ø ZCARD ZCARD key 返回有序集 key 的集合元素个数
Ø ZCOUNT ZCOUNT key minmax 返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量
Ø ZRANGEBYSCORE ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offsetcount] 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按score 值递增(从小到大)次序排列
6. Redis-其他操作命令
Key命令:
Ø KEYS pattern KEYS *匹配数据库中所有 key ;KEYS h?llo 匹配 hello 、hallo 和 hxllo 等;KEYS h*llo 匹配 hllo 和 heeeeello 等
Ø DEL key [key ...] 删除给定的一个或多个key 。不存在的 key 会被忽略
Ø EXPIRE key seconds 给定key设置生存时间,当key过期时(生存时间为 0 ),它会被自动删除
Ø PERSIST key 移除给定 key 的生存时间设置,使其永不过期
Ø RENAME key newkey 将 key改名为newkey ,当 key和newkey 相同或者 key 不存在时,返回一个错误
Ø TYPE key 返回key所储存的值的类型
系统命令
Ø QUIT、EXIT 请求服务器关闭与当前客户端的连接
Ø SELECT index 切换到指定的数据库,数据库索引号 index 用数字值0-15,以 0 作为起始索引值。默认使用 0 号数据库
Ø Dbsize 返回当前数据库当中key的数量
Ø Info 获取服务器的信息
Ø Config get 返回数据库配置信息
Ø Flushdb 清除当前数据库中所有的key
Ø Flushall 清除所有数据库中的所有的key(0-15数据库全被删除)
7. Redis高级应用
7.1安全性
密码验证:
主机:编辑 redis-conf 文件,找到requirepass 关键字,设置访问密码
从机:编辑 redis-conf 文件,找到masterauth 关键字,填写主机密码
绑定IP:
编辑 redis-conf 文件,找到 bind 关键字,填写合法访问ip地址,多个ip以空格分开
7.2主从复制Master-Slave
主从复制原理:
Ø 当启动一个Slave进程后,它会向Master发送一个SYNCCommand,请求同步连接。
Ø Master会启动一个后台进程,将数据快照保存到数据文件中,同时Master会记录所有修改数据的命令并缓存在数据文件中。后台进程完成缓存操作后,Master就发送数据文件给Slave。
Ø Slave端将数据文件保存到硬盘上,然后将其在加载到内存中,接着Master就会所有修改数据的操作,将其发送给Slave端。
Ø 若Slave故障导致宕机,恢复后会自动重新连接,Master收到Slave的连接后,将其完整的数据文件发送给Slave。
Ø 如果Mater同时收到多个Slave发来的同步请求,Master在后台只启动一个进程保存数据文件,然后将其发送给所有的Slave。
主从配置
1)格式:slaveof<masterip> <masterport>
slaveof 192.168.128.160 6379
2)格式:masterauth<password>
masterauth testpasswd
7.3事务处理
Multi,Exec
Multi和exec是成对出现使用,Multi开启事物,Exec提交事务。Redis客户端在执行multi后,客户端连接为阻塞模式,然后将多条动作命令添加到一个队列中,当执行Exec命令后,一起按照先后顺序执行。
注意:Redis事物不支持回滚,当在实行命令时出现语法错误,则事物失败;当没有语法错误,而在提交时,出现执行错误(如数据类型不匹配),则会忽略此条语句,其他正确执行的语句不再回滚。(Redis认为是程序编程的逻辑问题,为了保证效率,不支持回滚)。
Discard取消事物
乐观锁,CAS实现( check-and-set)
Ø WATCH 命令可以为 Redis 事务提供 check-and-set (CAS)行为。被 WATCH 的键会被监视,并会发觉这些键是否被改动过了。如果有至少一个被监视的键在 EXEC 执行之前被修改了,那么整个事务都会被取消, EXEC 返回空多条批量回复(null multi-bulk reply)来表示事务已经失败。
Ø 在业务编程端,如果事物失败,程序需要做的,就是不断重试这个操作,直到没有发生碰撞为止。这种形式的锁被称作乐观锁,是一种强大的锁机制。并且因为大多数情况下,不同的客户端会访问不同的键,碰撞概率小,通常并不需要重试。
7.4持久化
持久化方式
Ø RDB:持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
Ø AOF:(append-only file)持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。
RDB与AOF的选择
Ø 如果可以承受数分钟以内的数据丢失,则可以使用 RDB 持久化。
Ø 如果对数据一致性要求非常高,则可以使用AOF持久化
7.5 PUB/SUB发布与订阅
发布与订阅(pub/sub)
SUBSCRIBE 、 UNSUBSCRIBE 和 PUBLISH
信息格式
subscribe:表示当前客户端成功地订阅了信息第二个元素所指示的频道。而信息的第三个元素则记录了目前客户端已订阅频道的总数。
unsubscribe:表示当前客户端成功地退订了信息第二个元素所指示的频道。信息的第三个元素记录了客户端目前仍在订阅的频道数量。
message:表示这条信息是由某个客户端执行PUBLISH 命令所发送的,真正的信息。信息的第二个元素是信息来源的频道,而第三个元素则是信息的内容
7.6虚拟内存
实时处理能力
Redis的虚拟内存就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。另外的能够提高数据库容量的办法就是使用vm把那些不经常访问的数据交换的磁盘上。
虚拟内存配置
vm-enabled 是否虚拟内存的支持
vm-swap-file 设置虚拟内存的交换文件路径
vm-max-memory 设置redis使用的最大物理内存大小
vm-page-size 设置虚拟内存的页大小
vm-pages 设置交换文件的总page数量
vm-max-threads 设置VMIO同时使用的线程数量,0表示不使用工作线程(使用主线程)
工作原理
Ø 当vm-max-threads设为0时(BlockingVM),换出:主线程定期检查发现内存超出最大上限后,会直接已阻塞的方式,将选中的对象(redis会选择较老的对象。如果两个对象一样老会优先交换比较大的对象)保存到swap文件中,并释放对象占用的内存;当有client请求value被换出的key时;换入:主线程会以阻塞的方式从文件中加载对应的value对象,加载时此时会阻塞所以client。然后处理client的请求。
- redis应用介绍
- Redis应用介绍
- Redis应用介绍
- Redis应用介绍
- Redis应用介绍
- redis应用场景介绍
- redis事物介绍与应用
- redis应用实例学习介绍
- Redis常见应用场景介绍
- Redis各种数据结构介绍以及相应的业务场景应用
- Spring Data Redis缓存技术的应用介绍
- JAVAWEB开发之redis学习(一)——redis重点介绍、redis应用场景以及redis的安装运行
- redis介绍
- redis 介绍
- redis 介绍
- redis介绍
- Redis介绍
- Redis介绍
- iOS 开发,工程中混合使用 ARC 和非ARC
- 从顺序表L中删除元素x到y之间的所有元素(x<=y)
- php返回json数据函数例子
- 在你往浏览器中输入一个URL后都发生了什么
- 孙鑫MFC在vs2010下实现的笔记(第六课)
- Redis应用介绍
- 面试题32 从1到n整数中1出现的次数
- 分段线性变换
- EditText监听方法,实时的判断输入多少字符
- C#中,静态类和非静态类的区别是什么?
- Android之Home键监听封装
- Leetcode--Interleaving String
- 解决在Vim中鼠标右键不能粘贴
- NSKeyedArchiver (NSCoder : NSObject) <NSObject>