Redis 简单入门

来源:互联网 发布:工人物语6 知乎 编辑:程序博客网 时间:2024/06/08 16:59

一、Redis是什么(数据缓存)

Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案。

二、Redis的优点

异常快速 : Redis是非常快的,每秒可以执行大约110000设置操作,81000个/每秒的读取操作。
支持丰富的数据类型 : Redis支持最大多数开发人员已经知道如列表,集合,可排序集合,哈希等数据类型。这使得在应用中很容易解决的各种问题,因为我们知道哪些问题处理使用哪种数据类型更好解决。
操作都是原子的 : 所有 Redis 的操作都是原子,从而确保当两个客户同时访问 Redis 服务器得到的是更新后的值(最新值)。
MultiUtility工具:Redis是一个多功能实用工具,可以在很多如:缓存,消息传递队列中使用(Redis原生支持发布/订阅),在应用程序中,如:Web应用程序会话,网站页面点击数等任何短暂的数据;

三、安装与启动

安装步骤
wget http://download.redis.io/releases/redis-3.2.6.tar.gz
tar xzf redis-3.2.6.tar.gz
cd redis-3.2.6
make

mkdir /usr/local/redis
cp redis.conf src/redis-server src/redis-cli /usr/local/redis

./redis-server #启动服务
./redis-cli #客户端

设置后台启动服务
redis.conf
daemonize yes —yes 默认后台启动,no 默认前台启动
./redis-server redis.conf 使用配置文件后台启动
databases 16 —默认16个数据库(0-15)

四、Key的使用

不能使用”\n”或空格,其他大部分字符都可以组成key,长度不限制
可以自己定义key的格式,如:object-type:id:field
key的长度不要太长,占内存,查询慢;也不要太短,可读性差

key键操作

exists key                      #测试指定key是否存在del key1 key2 ... keyn          #删除给定keytype key                        #返回给定key类型keys pattern                    #返回匹配指定模式的所有keyrename oldkey newkey            #改名字dbsize                          #返回当前数据库的key数量expire key seconds              #设置key的有效期ttl key                         #获取key剩余有效期秒数select db-index                 #选择数据库(0-15)move key db-index               #将指定key从当前数据库移动到指定数据库中flushdb                         #删除当前数据库中所有keyflushall                        #删除所有数据库中所有key

五、redis数据结构

string

string是redis最基本的类型
redis的string可以包含任何数据,包括jpg图片或序列化对象
单个value值最大上限1G
如果只是用string,redis可以被看做加上持久化特性的memcache

string类型操作

set key value                       #设置key对应的值为string类型的valuemset key1 value1 ... keyn valuen    #一次设置多个key的值mget key1 key2 ... keyn             #一次获取多个key的值incr key                            #对key的值进行加加操作,返回新的值;可以对新key(创建key,然后加1,值为1)也可以是已有的key(key的信息值必须为整型)decr key                            #同上,但是进行减减操作(可以使新key也可以是已有的key)incrby key integer                  #同incr,加指定值decrby key integer                  #同decr,减指定值append key value                    #给指定key的字符串值追加valuesubstr key start end                #返回截取过的key的字符串值

List

list其实是一个双向链表,通过push、pop操作从链表头部或尾部添加删除元素,所以可以用作栈或队列

list类型操作

lpush key string            #在key对应list的头部添加字符串元素rpop key                    #从list的尾部删除元素,并返回删除元素lrange key start end        #获取list从start到end的元素,key不存在返回0(开始结尾都包含)llen key                    #对应list的长度,key不存在返回0,key对应类型不是list,则返回错误rpush key string            #同上,从尾部添加lpop key                    #从list头部删除信息,并返回删除元素ltrim key start end         #截取list,保留指定区间元素(开始结尾都包含)

Set

string类型的无序集合,最大可以包含(2的32次方减1)个元素
除了基本的添加删除之外,还包含集合的取并集(union),交集(intersection),差集(difference),通过这些操作可以很容易的实现sns的推荐好友功能。
注:每个集合中的元素不能重复

set集合操作

sadd key member [member]    #添加string元素到对应key集合中,成功返回1;如果元素已经在集合中,返回0srem key member [member]    #从key对应集合中删除给定元素,成功返回1smove p1 p2 member          #从p1对应set中移除给定元素,并添加到p2对应set中scard key                   #返回集合元素个数sismember key member        #判断集合中是否存在指定元素sinter key1 key2 ... keyn   #返回所有给定key的集合的交集sunion key1 key2 ... keyn   #返回所有给定key的集合的并集sdiff key1 key2 ... keyn    #返回所有给定key的集合的差集smembers key                #返回集合中所有元素,结果是无序的

SortSet

和set一样,也是string类型的集合,没有重复元素;不同的每个元素都有一个权,通过权值可以获取集合中的元素。适用于获取热门帖子访问量等

SortSet集合操作

zadd key score member               #添加到元素到集合,元素在集合中存在则更新score,添加成功返回1zrem key member                     #删除集合中指定元素,返回1表示成功;不存在则返回0zincrby key incr member             #按照incr幅度增加member的score值,返回score值zrank key member                    #返回指定元素在集合中的排名(下标),集合中的元素是按score从小到大排序的zrevrank key member                 #同上,元素按score从大到小排序zrange key start end [withscores]   #类似lrange,从集合中取出指定区间的元素,返回的是有序结果zrevrange key start end [withscores]#同上,返回结果按score逆序zcard key                           #返回集合中元素个数zscore key element                  #返回指定元素的scorezremrangebyrank key min max         #删除集合中在给定区间的元素,权值由小到大排序

六、持久化

Redis为了内部数据的安全考虑,会把本身的数据以文件的形式保存到硬盘中一份,在服务器重启之后自动把硬盘的数据恢复到内存(redis)中。数据保存到文件中的过程被称为“持久化”过程

一小时发起一次快照持久化,中间发起精细持久化(频率达到秒级)

snap shotting快照持久化

该持久化默认开启,一次性把redis中全部数据保存一份写入硬盘,如果数据非常多(10G-20G)就不适合频繁该持久化操作
快照持久化文件在本地备份文件dump.rdb

在文件redis.conf中设置快照持久化频率(数据修改的频率高,备份的频率也高;修改的频率低,备份的频率也低)

save 900 1          #900s 超过1个key修改发起一次快照保存save 300 10         #300s 超过10个key修改发起一次快照保存save 60 10000       #60s  超过10000个key修改发起一次快照保存dbfilename dump.rdb #配置快照持久化文件名字dir ./              #配置快照持久化位置

手动发起快照持久化

./redis-cli -h 127.0.0.1 -p 6379 bgsave         #发起对应ip快照持久化./redis-cli bgsave                              #发起本地快照持久化./redis-cli lastsave                            #返回上次成功保存到磁盘的unix时间戳redis 127.0.0.1:6379> SHUTDOWN [NOSAVE] [SAVE]  #同步不保存或保存数据并关闭redis服务器

append only file(AOF持久化)

本质:把用户的每个“写”(增删改)指令备份到文件中,还原数据时就是执行具体的写指令
在文件redis.conf中设置开启AOF持久化,会清空redis中所有数据

appendonly yes                      #开启AOF持久化appendfilename "appendonly.aof"     #配置AOF持久化文件名字dir ./                              #配置AOF持久化位置appendfsync everysec                #aof持久化追加备份频率everysec(每秒持久化一次)/always(来一个追加一次)/no(服务器如果空闲就坐aof持久化)

为aof持久化做优化处理

./redis-cli bgrewriteaof            #启动优化压缩处理(例如多个incr num优化成一个set num)

七、主从模式

为了降低每个redis服务器的负载,可以多设置几个,并设置主从模式
一个服务器负责“写”(增删改)数据,其他服务器负载“读”数据;主服务器会总动将数据同步给从服务器

在redis.conf中配置(从服务器默认禁止写的操作)

slaveof <masterip> <masterport>
0 0