Redis简介

1、Redis简介与安装

Redis3.0中文文档

Redis中文命令大全

1.1、Redis是什么

Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的、非关系型,键值对存储数据库。

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。

Remote Dictionary Server(Redis)是由一个Salvatore Sanfilippo写的key-value储存系统。Redis提供了一些丰富的数据结构,包括lists,sets,ordered sets,hashes,当然还有和Memcached一样的string结构,所以常被称为是一款数据结构服务器(data structure server)。Redis当然还包括了对这些数据结构的丰富操作。

你可以在这些类型上面运行原子操作,例如,追加字符串,增加哈希中的值,加入一个元素到列表,计算集合的交集、并集和差集,或者是从有序集合中获取最高排名的元素。

1.2、Redis的优点

为了满足性能,Redis采用内存(in-memory)数据集(dataset)。根据你的使用场景,你可以通过每隔一段时间转储数据集到磁盘,或者追加每条命令到日志来持久化。持久化也可以被禁用,如果你只是需要一个功能丰富,网络化的内存缓存。

性能极高,Redis能支持超过100K+每秒的读写频率;

丰富的数据类型,Redis支持二进制案例的Strings,Lists,Hashes,Sets及Ordered Sets数据类型操作;

原子,Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行;

丰富的特性,Redis还支持publish/sucscribe,通知,key过期等特性;

Redis还支持主从异步复制,非常快的非阻塞初次同步、网络断开时自动重连局部重同步;

1.3、安装Redis

yum search redis

yum install redis


启动Redis-server

redis-server    #standalone模式

# redis-server /path/redis.conf 指定配置文件开启redis,但有可能创建的redis目录是root:root,此配置文件定义的一些 dbpath,logpath可能与/etc/redis.conf一样,可能导致权限不足无法访问的问题,注意。但同时这样也和mongodb一样可以同时开启多个redis服务,分别在不同端口。

service redis start #守护进程模式,不过需要现在redis.conf里面开启daemonize yes;

《Redis简介》 redis-server
《Redis简介》 redis port


启动Redis-client

redis-cli

《Redis简介》 redis-cli

2、Redis数据类型

Redis不仅仅是简单的key-value存储器,同时也是一种data structure server。传统的key-value是指支持使用一个key字符串来索引value字符串的储存。而Redis中,value不仅仅支持字符串,还支持更多的复杂结构,包括列表、集合、哈希表等。Redis采用二进制安全,这就意味着你可以使用任何二进制序列作为重点,从像“foo”可以联系一个JPEG文件,空字符串也是一个幼小的密钥。

2.1、Redis strings

字符串 是一种最基本的Redis值(key)类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据。例如,

只关心二进制化的字符串,不关心具体格式.只会严格的按照二进制的数据存取。不会妄图已某种特殊格式解析数据。

使用SET和GET命令来创建和检索strings。set命令将取代现有的任何已经存在的key。set命令还有一个提供附加参数的选项,能够让set命令只有在没有相同key的情况下成功,反之亦然。

《Redis简介》 set和get

使用mset和mget完成一次性的多个key-value的对应关系,使用mget命令,Redis返回一个数组。

《Redis简介》 mset和mget

2.2、Redis Lists

Redis列表是简单的字符串列表,按照插入顺序序列。你可以添加一个或或多个元素到列表的头部或者尾部。PUSH插入

lpush    #左边插入一个元素

rpush    #右边插入一个元素

lrange key start stop    #0表示list第一个元素,-1表示list的倒数第一个元素。

《Redis简介》 redis list

利用POP命令取出list元素,pop命令返回值为取出的元素。

lpop    

rpop

《Redis简介》 pop命令

2.3、Redis Hashes

Redis Hashes是字符串字段和字符串值之间的映射,因此他们是展现对象的完美数据类型。如一个有姓、名、年龄等属性的用户。一个带有一些字段的hash仅仅需要一块很小的空间储存,因此你可以储存数以百万计的对象在一个小的Redis实例中 。

哈希主要用来表现对象,他们有能力储存很多对象,因此你可以将哈希用于许多其他的任务。

hmset    #设置一个多域的hash表

hget    #获取指定的单域

hmget    #类似于hget,只不过返回一个value数组

hgetall    #获取指定key的所有信息

《Redis简介》 hash

2.4、Redis无序集合

Redis集合(Set)是一个无序的字符串集合。可以用O(1)的时间复杂度(无论集合中有多少元素时间复杂度都是常量)完成添加,删除,测试元素是否存在。

Redis集合拥有令人满意的不允许包含相同成员的属性。多次添加相同的元素,最终在集合里只会有一个元素。实际上就是添加元素时无序检测元素是否存在。

一个Redis集合有趣的事情是它支持一些服务端的命令从现有的集合出发去进行集合运算,因此你可以在非常短的时间内进行合并(unions),交集(intersections),找出不同的元素(difference of sets)。

sadd    #产生一个无序集合,返回集合的元素个数;

smembers    #用于查看集合

sismember    #用于查看集合是否存在,匹配项包括集合名和元素个数。匹配成功返回1,失败返回0。

《Redis简介》

2.5、Redis有序集合

Redis有序集合与普通集合非常相似,也是一个没有重复项的字符串集合。不同之处是有序集合的每一个成员都关联了一个评分,这个评分被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。

使用有序集合可以以非常快的速度(O(log(N)))添加,删除和更新元素。可以很快根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是很快的,因此能够使用有序集合作为一个没有重复成员的智能列表。在有序集合中,你可以很快捷的访问一切你需要的东西。

简而言之,使用有序的集合你可以做完许多对性能有极端要求的任务,而那些任务使用其他类型的数据库真的是很难完成。

zadd    #与sadd类似,但多一个参数用于排序;

zrange    #查看正序的集合;

zrevrange    #查看反序的集合

使用withsocres参数返回记录值

《Redis简介》

3、Redis系统管理

3.1、适合全体类型的常用命令

exists key    #判断一个key是否存在,存在返回1,否则返回0;

del key    #删除某个或一系列key,成功返回1,否则0;

type key    #返回某个key元素的数据类型,key不存在返回空;

keys key-pattern    #返回匹配的key列表

randomkey    #随机获取一个已经存在的key,如果数据库为空,则返回空字符串;

clear    #清屏

rename oldname newname    #改key的名字,如果存在将会覆盖;

renamex oldname newname    #改key名字,如果名字存在则失败;

dbsize    #返回当前数据库的key的总和

《Redis简介》
《Redis简介》

3.2、Redis事件相关命令

限定key生存时间

这是一个无视数据类型的命令,对于临时储存很有用处。避免进行大量的del操作。

expire key time   #设置某个key的过期时间(秒),到期后自动删除;

ttl    #查询key剩余存活时间

《Redis简介》


清除key

flushdb    #清空当前数据库中的所有键;

flushall    #清空所有数据库中的键;

3.3、Redis设置相关命令

config get    #用来读取Redis服务器的配置参数;

config set    #用于更改运行Redis服务器的配置参数;

auth    #认证密码;

config resetstat    #重置数据统计报告,通常返回OK;

3.4、查询信息

info命令可以查询几乎所有的信息,命令选项如下:

server: Redis server的常规信息

clients: Client的连接选项

memory: 存储占用相关信息

persistence: RDB and AOF 相关信息

stats: 常规统计

replication: Master/slave请求信息

cpu: CPU 占用信息统计

cluster: Redis 集群信息

keyspace: 数据库信息统计

all: 返回所有信息

default: 返回常规设置信息

《Redis简介》 info命令

4、Redis的高级应用

高级应用包括安全性设置,主从复制,事务处理,持久化机制,虚拟内存的使用。

4.1、安全性

设置在客户端连接是需要指定密码(由于redis速度相当快,一秒钟可以150K次密码尝试,所以需要设置一个密码强度很强大的密码)

设置密码的两种格式:

config set requirepass “passwd”;

配置redis.conf中直接手动设置requirepass属性,后面是密码;

输入认证的两种方式:

登录时可以 redis-cli-a password;

登录后使用 auth password;

redis-server;

redis-cli;

4.2、主从复制

Redis的主从复制配置和使用都比较简单,通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。从服务器只能读不能写。

Redis主从复制特点:

master可以拥有多个slave;

多个slave可以连接同一个master外,还可以连接到其他的slave(当master宕机后,相连的slave转变为master);

主从复制不会阻塞master,再同步数据时,master可以继续处理client请求;

提高了系统的可伸缩性;


Redis主从复制过程:

slave与master建立连接,发送sync同步命令;

master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存;

后台完成保存后,就将此文件发送给slave;

slave将文件保存在磁盘上;

4.3、事务处理

Redis的事务处理比较简单。只能保证client发起的事务中的命令可以连续的执行,而且不会插入其他的client命令,当一个client在连接中发出multi命令时,这个连接就进入一个事务的上下文,该连接后续的命令不会执行,而是存放在一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。如果其中执行出现错误,执行正确的不会回滚,不同于关系型数据库的事务。

《Redis简介》

4.4、持久化机制

Redis是一个支持持久化的内存数据库,Redis需要经常将内存中的数据同步到磁盘来保证持久化。

Redis支持两种持久化方式:

snapshotting(快照):将数据存放到文件里,默认方式;

save 500 10    #500秒内如果超过10个key被修改,则保存快照

将内存中的数据以快照的方式写入二进制文件中,默认文件dump.rdp,可以通过配置设置自动做快照持久化的方式。可配置Redis在n秒内如果超过m个key被修改就自动保存快照。

Append-only file(缩写为aof)    #将读写操作存放到文件中

由于快照方式在一定间隔时间做一次, 哦Redis意外down掉的话,就会丢失最后一次快照后的所有修改。

aof比快照方式有更好的持久化性,是由于使用aof时,redis会将每一个收到的写命令都通过write函数写入到文件中当redis启动时会通过重新执行文件中保存的写命令在内存中重新建立整个数据库的内容。

由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上,正阳aof方式的持久化也还是有可能会丢失一部分数据。可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机。


配置文件中的可配置参数:

appendonly    yes    #启用aof持久化方式

appendonly everysc    #每秒写入磁盘一次,在性能和持久化方面做了很好的折中

save    #save命令是将数据写入磁盘中

4.5、虚拟内存的使用

Redis的虚拟内存是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出内存空间用于其它的访问数据,尤其对于redis这样的内存数据库,内存总是不够用的。

通过配置VM相关的redis.config配置:

vm-enableyes#开启vm功能

vm-swap-file    /tmp/redis.swap#交换出来的value保存的文件路径

vm-max-memory10000000#redis使用的最大内存上线

vm-page-size32#每个页面的大小32字节

vm-pages123217729#最多使用多小个页面

vm-max-threads4#用于执行value对象换入的工作线程数量

注意:

1,Redis监听地址 “bind: x.x.x.x”,强烈建议只对本地127.0.0.1开放,我这连接对我自己的内网地址 192.168.1.7开放,不建议对外网开放,有安全隐患;

2,防火墙,最简单就是关闭防火墙,另一个就是开放redis的监听端口;

3,开启守护进程,让redis可以在后台运行而不必通过 redis-server 的方式来启动,将配置文件里的 deamonize no 改为 yes;

4,关闭redis的保护模式(protect-mode),这里的保护模式是指是否允许其他IP的设备访问redis。如果开启的话就只能允许本机访问。如果是生产开发的实际运行环境,请一定开启保护模式。 protect-mode no;

5,设置redis数据库密码。如果是本机测试,可以跳过这一步。但如果要开放外网访问redis,就必须给redis添加密码。不仅仅是redis,任何数据库都应该设置密码,否则对外网开放的数据库就成了活靶子。 requirepass  password设置密码;

点赞