安装、启动
安装
源码
1 安装步骤
第一步:安装gcc编译环境
yum install gcc-c++
第二步:把redis的源码上传到linux服务器。
第三步:解压缩。
tar -zxvf redis-3.0.0.tar.gz
第四步:make
第五步:make install PREFIX=/usr/local/redisyum 安装
yum install redis -y
启动
启动redis
两种启动方式,前端启动、后台启动。
前端启动:./redis-server
后台启动:
1、复制redis.conf到redis的安装目录
2、修改redis.conf。修改daemonize yes
3、[root@bogon redis]# ./redis-server redis.conf
centos: service redis start/stop/restart
客户端
redis-cli -p 端口 -h ip地址 <-c>连接集群时使用此参数
默认端口:6379
Ip:localhost(127.0.0.1)
常用命令
1 PING 命令,该命令用于检测 redis 服务是否启动。
2 $ redis-cli -h host -p port -a password
在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。
3 设值:set key value
取值:get key
删除:del key
4 DUMP key
DUMP 命令用于序列化给定 key ,并返回被序列化的值。
5 exists key
EXISTS 命令用于检查给定 key 是否存在。
6 expire key 60
为 key 设置过期时间
7 expireat key 1293840000
Redis Expireat 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。
8 pexpireat key 1555555555005
PEXPIREAT 命令用于设置 key 的过期时间,以毫秒计。key 过期后将不再可用。
9 keys s*
Keys 命令用于查找所有符合给定模式 pattern 的 key 。。
10 select 1 (数据库编号)
切换数据库
11 move key 1
MOVE 命令用于将当前数据库的 key 移动到给定的数据库 1 当中。
12 ttl key
TTL 命令以秒为单位返回 key 的剩余过期时间。
13 persist key
PERSIST 命令用于移除给定 key 的过期时间,使得 key 永不过期。
14 pttl key
Pttl 命令以毫秒为单位返回 key 的剩余过期时间。
15 randomkey
RANDOMKEY 命令从当前数据库中随机返回一个 key 。
16 flushdb
删除当前数据库所有 key
17 rename key newkey
Rename 命令用于修改 key 的名称 。(newkey 已存在时, RENAME 会覆盖旧 newkey)
18 renamenx key newkey
Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。
19 type key
Type 命令用于返回 key 所储存的值的类型。
字符串处理:
1 getrange key start end
Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
0 -1 表示获取所有
2 getset key “value”
Getset 命令用于设置指定 key 的新值,并返回 key 旧的值。
3 setbit key offset o/get bit key offset
4 mget key1 key2 …
Mget 命令返回所有(一个或多个)给定 key 的值。 没有返回空
5 setex key 30 “value”
Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
6 setnx key “value”
Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。
7 setrange key 5 “value”
Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。
8 strlen key
Strlen 命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。
9 mset key1 “va1” key2 “va2”
Mset 命令用于同时设置一个或多个 key-value 对。
10 msetnx key1 “va1” key2 “va2”
Msetnx 命令用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。
11 psetex key 1000 “value”
Psetex 命令以毫秒为单位设置 key 的生存时间。
12 incr key
Incr 命令将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
13 incrby key 30
Incrby 命令将 key 中储存的数字加上指定的增量值。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。
14 incrybyfloat key 1.2
Incrbyfloat 命令为 key 中所储存的值加上指定的浮点数增量值。
15 decr key
Decr 命令将 key 中储存的数字值减一。
16 decrby key 20
Decrby 命令将 key 所储存的值减去指定的减量值。
17 append key “value”
Append 命令用于为指定的 key 追加值。
redis.conf 配置项说明
1.Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
daemonize no
2.当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
pidfile /var/run/redis.pid
3.指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字
port 6379
4.绑定的主机地址
bind 127.0.0.1
5.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 300
6.指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel verbose
7.日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null
logfile stdout
8.设置数据库的数量,默认数据库为0,可以使用SELECT
databases 16
9.指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save
Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
10.指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes
11.指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
12.指定本地数据库存放目录
dir ./
13.设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof
14.当master服务设置了密码保护时,slav服务连接master的密码
masterauth
15.设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH
requirepass foobared
16.设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
maxclients 128
17.指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
maxmemory
18.指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendonly no
19.指定更新日志文件名,默认为appendonly.aof
appendfilename appendonly.aof
20.指定更新日志条件,共有3个可选值:
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec
21.指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制)
vm-enabled no
22.虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-swap-file /tmp/redis.swap
23.将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0
vm-max-memory 0
24.Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不 确定,就使用默认值
vm-page-size 32
25.设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,在磁盘上每8个pages将消耗1byte的内存。
vm-pages 134217728
26.设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4
vm-max-threads 4
27.设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启
glueoutputbuf yes
28.指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
29.指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)
activerehashing yes
30.指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件
include /path/to/local.conf
查看
CONFIG GET CONFIG_SETTING_NAME
例如:CONFIG GET loglevel
查看所有:config get *
修改
CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
例如:CONFIG SET loglevel “notice”
高级操作
数据备份与恢复
1 save
备份
2 config get dir
获取 redis 安装目录
恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。
3 bgsave
后台执行 备份
安全
1 config get requirepass
查看密码(默认密码为空)
2 config set requirepass “password”
设置密码
3 auth password
Auth 命令用于检测给定的密码和配置文件中的密码是否相符。
4 ping
查看服务是否运行
reids 性能测试
1 redis-benchmark [option] [option value]
-h 指定服务器主机名 127.0.0.1
-p 指定服务器端口 6379
-s 指定服务器 socket
-c 指定并发连接数 50
-n 指定请求数 10000
-d 以字节的形式指定 SET/GET 值的数据大小 2
-k 1=keep alive 0=reconnect 1
-r SET/GET/INCR 使用随机 key, SADD 使用随机值
-P 通过管道传输
-q 强制退出 redis。仅显示 query/sec 值
–csv 以 CSV 格式输出
-l 生成循环,永久执行测试
-t 仅运行以逗号分隔的测试命令列表。
-I Idle 模式。仅打开 N 个 idle 连接并等待。
例如:redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -q
Redis 客户端连接
1 redis-server –maxclients 100000
设置最大连接数为 100000
2 config get maxclients
查看最大连接数
3 client setname
设置当前连接的名称
4 client pause 10
挂起客户端连接,指定挂起的时间以毫秒计
5 client kill
关闭客户端连接
数据类型
一、基本命令
启动:$ redis-serve
进入客户端测试:redis-cli
设值:set key value
取值:get key
二、数据类型
1.String(字符串)
2.Hash(哈希)
设值:hmset user:1 v1 v2 v3 v4 v5 200.. //貌似最后一个必须为数字?
取值:hmgetall user:1
3.List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
设置:lpush key value
lpush key value2
lpush key value3 ….
取值:lrange key 0 10
4.Set(集合)
添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误。
设值:sadd key value
sadd key value2
sadd key value3
sadd key value
(该value已经在集合中存在,故应返回0)
根据集合内元素的唯一性,第二次插入的元素将被忽略。
取值:smembers key
5.zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型
的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
设值:(zadd key score member)
zadd key 0 value
zadd key 1 value2
取值:zrangebyscore key 0 1000