一、理论知识
1. Redis简介
Redis是一个key-value存储系统。和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表)、sets(集合)和zsets(有序集合)几种数据类型。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
2. Redis数据结构
redis目前提供五种数据类型:string,list,set及zset(sorted set)和Hash。
- string是最简单的类型,你可以理解成与Memcached一模一个的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似。但它的功能更丰富。
- list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。
- set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。
- zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解了有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。
- Hash数据类型允许用户用Redis存储对象类型,Hash数据类型的一个重要优点是,当你存储的数据对象只有很少几个key值时,数据存储的内存消耗会很小.
3. Redis数据存储
redis的存储分为内存存储、磁盘存储(数据快照)和append only file(AOF日志)文件三部分,配置文件中有三个参数对其进行配置。
save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。
appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
appendfsync no/always/everysec,appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。
二、Redist安装与配置
1. 安装
wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz
tar –zxvf redis-2.4.6.tar.gz
#需要说明的事,redis的安装非常简单,已经有现成的Makefile文件,直接运行make命令即可。
make
make install
2. 可运行包结构
Redis 由四个可执行文件:redis-benchmark、redis-cli、redis-server、redis-stat这四个文件,加上一个redis.conf就构成了整个redis的最终可用包。它们的作用如下:
- redis-server:Redis服务器的daemon启动程序
- redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
- redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
- redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况
3.Redis配置
下面是redis.conf的主要配置参数的意义:
- daemonize:是否以后台daemon方式运行
- pidfile:pid文件位置
- port:监听的端口号
- timeout:请求超时时间
- loglevel:log信息级别
- logfile:log文件位置
- databases:开启数据库的数量
- save * *:保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
- rdbcompression:是否使用压缩
- dbfilename:数据快照文件名(只是文件名,不包括目录)
- dir:数据快照的保存目录(这个是目录)
- appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
- appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
- slaveof <masterip> <masterport> :主从配置,在redis-slave上配置master的ip port,即可。
PS:切记,一定要设定maxmemmory,且配置大小要小于物理内存,留有足够的内存供系统使用。
三、Redis集群
redis支持master-slave的主从配置,配置方法是在从机的配置文件中指定slaveof参数为主机的ip和port即可
图示如下:
PS:为了两个Redis Server可以互访,需要注释掉bind 127.0.0.1
Redis服务端未实现shard,但Java客户端Jedis实现了
四、Redis操作
1. 服务操作
redis-server
src/redis-server redis.conf
启动Redist服务
redis-benchmark
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能
redis-cli
redis-cli shutdown
关闭Redis服务
redis-cli
连接到Redis服务
redis-cli save
备份操作
redis-cli -h localhost -p 6380 monitor
监控host为localhost,端口为6380,redis的连接及读写操作
redis-cli -h localhost -p 6380 info
提供host为localhost,端口为6380,redis服务的统计信息
redis-stat
redis-stat host localhost port 6380 overview
实时打印出host为localhost,端口为6380,redis实例的总体信息
2. 客户端命令操作
web命令行模拟页面地址:
详细命令参考:
部分命令如下:
Key(键)相关命令:
DEL key [key ...]
DUMP key
EXISTS key
EXPIRE key seconds
EXPIREAT key timestamp
String相关命令:
APPEND key value
BITCOUNT key [start] [end]
BITOP operation destkey key [key ...]
DECR key
DECRBY key decrement
Hash相关命令:
HDEL key field [field ...]
HEXISTS key field
HGET key field
HGETALL key
HINCRBY key field increment
List相关命令:
BLPOP key [key ...] timeout
BRPOP key [key ...] timeout
BRPOPLPUSH source destination timeout
LINDEX key index
LINSERT key BEFORE|AFTER pivot value
Set相关命令:
SADD key member [member ...]
SCARD key
SDIFF key [key ...]
SDIFFSTORE destination key [key ...]
SINTER key [key ...]
SortedSet相关命令:
ZADD key score member [[score member] [score member] ...]
ZCARD key
ZCOUNT key min max
ZINCRBY key increment member
ZRANGE key start stop [WITHSCORES]
Pub/Sub相关命令:
PSUBSCRIBE pattern [pattern ...]
PUBLISH channel message
PUBSUB <subcommand> [argument [argument ...]]
PUNSUBSCRIBE [pattern [pattern ...]]
SUBSCRIBE channel [channel ...]
Transaction相关命令:
DISCARD
EXEC
MULTI
UNWATCH
WATCH key [key ...]
Script相关命令:
EVAL script numkeys key [key ...] arg [arg ...]
EVALSHA sha1 numkeys key [key ...] arg [arg ...]
Connection相关命令:
AUTH password
ECHO message
Server相关命令:
BGREWRITEAOF
BGSAVE
HyperLogLog 相关命令:
PFADD key element [element ...]
PFCOUNT key [key ...]