您的位置:首页 > 数据库 > Redis

Redis 学习(配置文件和常用命令注释)

2014-08-08 14:46 429 查看
Redis 学习(配置文件和常用命令注释)

最近公司需要上线一个新的业务需要使用到redis,我也趁这个机会学习了下redis,了解了redis的安装、配置、常用命令、以及怎么监控redis;我学习redis主要的是参考两本书《Redis入门指南》《Redis实战(红丸出品)》,这两本书从最基础的开始讲redis。在这里我总结了下我在学习过程中的一些信息,对配置文件和常用命令进行了详细的注释,以备以后使用。
Redis 学习(Redis Info详细注释):
http://54snow.blog.51cto.com/2690157/1537464
Redis 学习(Zabbix 监控Redis):
http://54snow.blog.51cto.com/2690157/1537482

===========================================================================================
redis配置文件详细注释(redis.conf)

daemonize yes
默认redis不在后台运行,如果需要在后台运行,请将该值改为yes
pidfile pidfilepath
pid文件路径,默认是/var/run/reids.pid;如果运行多个实例,则需要指定不同端口和不同的pid文件
bind
指定reids只接受来自该ip地址的请求,默认接受所有请求,生产环节最好设置该项
port 6379
redis监听端口,默认为6379;运行多个实例时配置不同的端口
timeout 0
客户端连接超时时间,单位为秒,默认为0;
loglevel
log等级分为4级,debug、verbose、notice、warning;生产环境一般开始notice
logfile
配置log文件地址,默认使用标准输出,即打印在命令行终端
databases 16
设置数据库个数,可以使用select <dbid>命令来切换数据库,默认使用数据库为0;默认数据库个数为16
save
设置redis进行数据库镜像的频率
save 900 1
save 300 10
save 10000 1
stop-writes-on-bgsave-error yes
当持久化出现错误时是否还提供写功能
rdbcompression
在进行镜像备份时,是否进行压缩,一般设置为yes
dbfilename
镜像备份文件的文件名,默认为dump.rdb
dir
数据库镜像备份文件放置路径;给文件名分开是因为镜像备份时先写一个临时文件,等备份完成后用临时文件替换上面指定的文件
slaveof masterip masterport
设置该数据为其他数据库的从库
slave-serve-stale-data yes
当slave和master断开连接后,或者正当数据正在复制传输的时候是否接受客户端的请求
slave-read-only yes
从服务器是否只读
slave-priority 10
当有多个从库的时候,当master宕机的时候,Redis Sentinel会将权重值最小的设置master,0表示永远不提升
masterauth
指定主数据库连接需要的密码(主数据开启了密码验证)
requirepass
设置客户端连接的密码
maxclients
限制同时连接的客户端数据,当超过这个值时,redis不在接受其他连接请求并返回error信息
maxmemory
设置redis能够使用的最大内存,内存满了之后,redis将先尝试提出设置过expire信息的key
maxmemory-policy volatile-lru
当redis最大使用内存后,内存清理策略,默认为volatile-lru
maxmemory-samples 3
reids内存清理策略随机样本数,默认为3
appendonly yes
开始redis的AOF持久化
appendfsync
设置对appendon.aof 文件进行同步的频率
always 每次有写操作都进行同步,安全但最慢
everysec 每秒一次,相对安全又兼顾了性能
no 根据系统设置,默认每30秒写一次
lua-time-limit 5000
一个lua脚本执行的最长时间,0或负数表示无限制

vm-enabled
是否开启虚拟内存支持
vm-swap-file
设置虚拟内存的交换文件路径
vm-max-memory
设置开启虚拟内存后redis将使用的最大物理内存,默认为0即不限制,生产环节最好根据实际情况设置该值
vm-page-size
设置虚拟内存的页大小,如果value值比较大就需要设置较大一点
vm-pages
设置交换文件总得page数量,page table信息会放在物理内存中,总得虚拟内存大小 = vm-page-size *vm-pages
mv-max-threads
设置VM IO同时使用的线程数据,如果vlaue值比较大将该值设稍大一点,还是能够提升性能
glueoutputbuf
把小的输出缓存放在一起;常设置为yes
hash-max-zipmap-entries
设置hash数据结构指定元素个数且最大元素的临界点
activerehashing
设置为yes,以便尽快的释放内存

注:这并不是所有的配置项,这是我根据我了解的进行了个人理解的注释,仅供参考

===========================================================================================
常用类型命令注释之string类型及操作

set
设置key对应的值为string类型的value
setnx
设置key对应的值为string类型的value,如果key存在则不进行操作,返回0
setex
设置key对应的值为string类型的value,并对此键值设置对应的有效期
setrange
设置key的value值的子字符串(个人理解为键值的替换)
setrange name 8 gmail.com
将name键的键值从下标为8的字符开始替换为gmail.com
mset
一次设置多个key的值,返回ok表示所有值都设置成功,返回0表示所有值都设置失败
msetnx
一次设置多个key的值,ok则所有值都设置成功,不会覆盖已经存在的key
get
获取key对应的string值,key不存在则返回nil
getset
设置key的值,并返回key的旧值
getrange
获取指定key的value值的字符串
getrange name 0 6
获取name的键值下标从0到6部分的值
mget
一次获取多个key的值,key不存在则对应返回nil
incr
对key的值做加加操作,并返回新的值;如果value不是int类型则会报错,如果key不存在,则该key的键值为1
incrby
可以指定增加的值,如果key不存在,则默认认为key的value为0
incrby age 5
将age的value值一次性增加5
decr
对key的值做减减操作,key不存在则设置key的值为-1
decrby
可以指定减的值,跟incrby相反
append
给指定key的字符串值最佳value,返回新字符串值的长度
strlen
取指定key的value值的长度

===========================================================================================
常用类型命令注释之hashes类型及操作

hset
设置hash 字典指定值,key不存在则创建
hset myhash field hello
hsetnx
设置hash field为指定的值。如果key不存在则先创建,如果key存在则返回0
hmset
同时设置多个field
hmset myhash field1 hello field2 world
hget
获取自定hash field,字段不存在返回nil
hmget
获取多个的hash field
hmget myhash field1 field2
hincrby
给指定hash field加上指定的值
hexists
测试field是否存在
hlen
返回指定hash的field数量
hlen myhash
hdel
删除指定field,返回的是删除后的field数量
hkeys
返回所有hash的field
hvals
返回hash所有的value
hgetall
获取某个hash中全部的field以及value

===========================================================================================
常用类型命令注释之list类型及操作

lpush
在key对应list的头部添加字符串元素(从列表左边插入)
rpush
在key对应list的尾部添加字符串元素(从列表右边插入)
linsert
在key对应list的特定位置之前或者之后添加字符串元素
linsert mylist before world there
before 在特定位置之前插入
after 在特定位置之后插入
lset
设置list中制定下标元素值
lset mylist 2 car
lrem
从key对用list中删除count个和value相同的元素
lrem mylist 2 hello
从mylist列表中删除2个与hello相同的元素
count > 0 从头到尾删除
count < 0 从尾到头删除
count = 0 删除全部

ltrim
保留制定key的值范围内的数据
ltrim mylist 0 3
lpop
从list头部删除元素,并返回删除的元素
rpop
从list尾部删除元素,并返回删除的元素
rpoplpush
从第一个list尾部一处元素并添加到第二个list的头部,最后返回被移植的元素,如果第一个list不存在或空返回nil
rpoplpush mylist1 mylist2

lindex
返回list中index位置的元素
lindex mylist 1
返回mylist中下标为1的元素(从0计数)
llen
返回list的长度

===========================================================================================
常用类型命令注释之sets类型及操作

sadd
向set中添加元素
srem
删除set中的元素
spop
随机删除一个set中的元素并返回删除元素
sdiff
返回第二个set和第一个set的差集
sidff set1 set2
返回set2与set1的差集(也就是在set2中但不在set1中的元素)
sidffstore
返回第二个set与第一个set的差集,并将结果保存为另一个set
sdiffstore set1 set2 set3
返回set2与set1的差集,并将结果保存到set3中
sinter
返回给定key的交集
sinter set1 set2
sinterstore
返回给定key的交集,并将结果存为另一个key
sinterstore set1 set2 set3
sunion
返回给定key的并集
sunionstore
返回给定key的并集,并将结果存为另一个key
smove
从第一个set中移除元素并添加到第二个set中
smove set1 set2 car
从set1中移除car,并将car添加到set2中
scard
返回set的元素个数
sismember
判断元素是否在set中,返回0表示不存在,1表示存在
sismember set two
判断two是否在set中
srandmember
随机返回一个set中的元素,但不删除

===========================================================================================
常用类型命令注释之sorted set类型及操作
zadd
向sorted set中添加元素,score用于排序,如果元素存在则更小score
zadd myzset 1 one
zrem
删除zset中的元素
zrem myzset two
zincrby
想zset中添加元素,如果元素存在则将该元素的score增加Increment,否则想zset中添加该元素,score值为increment
zrank
返回zset中元素排名(按照score从小到大排序)即下标
zrevrank
返回zset中元素排名(按照score从大到小排序)即下标
zrevrange
返回zset中(按score从大到小排序)从start到end的所有元素
arevrange myzset 0-3 withscores
zrangebuscore
返回zset中score在给定区间的元素
zrange myzset 0 5 withscores
zcount
返回集合中score在给定区间的数量
zrange myzset 2 3
zcard
返回zset中元素个数
zscore
返回zset中元素对应的score
zremrangebyrank
删除集合排名在给定区间的元素
zremrangebyrank myzset 3 4
zremrangebyscore
删除zset中score在给定区间的元素
zremrangebyscore myzset 1 2

===========================================================================================
reids常用命令
keys *
返回所有key
keys mylist*
返回所有含有mylist的key
exists
确认一个key是否存在
del
删除一个key
expire
设置一个key的过期时间
move
将当期数据库中的key移动到其他数据库
move name 1
将名为name的key移动到数据库1
persist
删除kye的过期时间
randomkey
随机返回一个key
rename
重命名key
type
返回值的类型

===========================================================================================
服务器相关命令
ping
测试连接是否存活,返回PONG表示存活,否则返回connecton refused
echo
在命令行打印内容
select
选择数据库,数据库编号0-15
quit
退出连接
dbsize
返回当前数据中key的数目
info
获取服务器的信息和统计
monitor
实时转储收到的请求
config get
获取服务器配置信息
flushdb
删除当前数据中的所有key
flushall
删除所有数据库中的所有key

-------------------------------------------------------------------------------------------
持久化

默认RDB方式
在配置文件中通过制定save 来进行RDB持久化,由两个参数构成:实践和改动的键的个数
save 900 1
save 300 10
save 60 1000

AOF 快照
通过appendonly yes 开启AOF方式持久化
开启AOF持久化后每执行一条命令后redis都将该命令写入硬盘,保存文件和RDB文件路径一样通过dir设置,文件名默认appendonly.aof,通过appendfilename更改
appendfilename appendonly.aof

设置AOF重写,redis根据规则自动删除冗余的记录
auto-aof-rewrite-percentage 100 设置当前AOF文件大小超过上一次重写时的AOF文件大小的百分之多少会再次进行重写
auto-aof-rewrite-mim-size 64mb 限制允许重写的最小AOF文件大小

AOF持久化在redis每次执行命令后并没有真正的将数据写入的硬盘,而是写入到了操作系统的硬盘缓存中,系统默认30秒会将硬盘缓存中的数据写入到本地硬盘
设置redis在写入AOF文件后主动将硬盘缓存内容同步到本地硬盘
appendfsync always 每次执行写入后都同步一次,这种最安全但也最慢
appendfsync everysec 默认设置,每秒同步一次,兼顾性能又保证安全
appendfsync no 不主动同步,由系统每30秒同步一次

-------------------------------------------------------------------------------------------
redis主从复制
一个主数据可以有多个从数据库,一个从数据库只能有一个主数据库
设置主从(在从库机器上操作)
在配置文件中加入slaveof 主库ip 端口即可
slaveof 192.168.5.128 6379
或者从命令行启动
redis-server --slaveof 192.168.5.128 6379
在redis命令行执行 SLAVEOF 主库ip 端口
reis > SLAVEOF 192.168.5.128 6379

默认情况下从库是只读的
slave-read-only no 设置从库可写
上面数据不会同步到其他数据库
主库上该修改会覆盖从库上的数据

如果该机器已经是其他主数据库的从库,slaveof命令会停止和原数据库的同步改为和新数据库同步
可以使用slaveof no one 来使当前数据库停止接收其他数据库的同步而转为主数据库

可以配置slave-server-stale-data no来使从库在同步完成前对所用命令(info、slaveof除外)都回复错误“SYNC with master in progress”

图结构复制
从数据不仅可以接收主数据库的同步数据,自己还可以同时作为主数据库存在,

从数据库持久化
在从数据库中启用持久化,同时主数据库禁用持久化;
当从库出现问题后,主数据库会自动将数据同步过来;
当主库出现问题后,需要在从库中使用slaveof no one 将从库提升为主库,并将原先的主库设置为从库,可以将数据同步回去

-------------------------------------------------------------------------------------------
安全(必须保证配置文件的安全性)

可信的环境
redis 应该运行在可信的安全环境下,默认reids会接收来自任何地址发送来的请求,可以通过bind参数绑定地址
bind 192.168.5.128

然后重启redis

数据库密码
我们可以通过配置给redis设置密码
requirepass reids@!$REDIS
这样每次客户端连接的时候都需要发送密码,否则客户端会拒绝执行命令
发送密码使用AUTH
AUTH reids@!$REDIS

~~提示:如果redis复制时主库设置了密码,需要在从库设置主库密码,以使从数据连接主库时自动使用AUTH命令认证
masterauth reids@!$REDIS (从库的配置文件中设置)

reids 支持在配置文件中将命令重命名,以保证只有自己的应用可以使用该命令
rename-command FLUSHALL getall 将FLUSHALL命令重命名为getall
rename-command FLUSHALL "" 禁用FLUSHALL命令
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  配置文件 redis