王志广的个人分享

redis学习

admin发表于2015-07-29  3,567次浏览 标签: 

redis 是什么?
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis支持类型有:字符串,哈希结构,链表,集合,有序集合。

redis怎么用?

1.开启操作
(1)开启服务
命令:redis-server redis.conf
配置文件命令说明
==基本配置
daemonize no 是否以后台进程启动
databases 16 创建database的数量(默认选中的是database 0)
save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化。
save 300 10 #必须是300秒之后至少10个关键字发生变化。
save 60 10000 #必须是60秒之后至少10000个关键字发生变化。
stop-writes-on-bgsave-error yes #后台存储错误停止写。
rdbcompression yes #使用LZF压缩rdb文件。
rdbchecksum yes #存储和加载rdb文件时校验。
dbfilename dump.rdb #设置rdb文件名。
dir ./ #设置工作目录,rdb文件会写入该目录。
==主从配置
slaveof <masterip> <masterport> 设为某台机器的从服务器
masterauth <master-password> 连接主服务器的密码
slave-serve-stale-data yes # 当主从断开或正在复制中,从服务器是否应答
slave-read-only yes #从服务器只读
repl-ping-slave-period 10 #从ping主的时间间隔,秒为单位
repl-timeout 60 #主从超时时间(超时认为断线了),要比period大
slave-priority 100 #如果master不能再正常工作,那么会在多个slave中,选择优先值最小的一个slave提升为master,优先值为0表示不能提升为master。
repl-disable-tcp-nodelay no #主端是否合并数据,大块发送给slave
slave-priority 100 从服务器的优先级,当主服挂了,会自动挑slave priority最小的为主服
===安全
requirepass foobared # 需要密码
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 #如果公共环境,可以重命名部分敏感命令 如config
===限制
maxclients 10000 #最大连接数
maxmemory <bytes> #最大使用内存
maxmemory-policy volatile-lru #内存到极限后的处理
volatile-lru -> LRU算法删除过期key
allkeys-lru -> LRU算法删除key(不区分过不过期)
volatile-random -> 随机删除过期key
allkeys-random -> 随机删除key(不区分过不过期)
volatile-ttl -> 删除快过期的key
noeviction -> 不删除,返回错误信息
#解释 LRU ttl都是近似算法,可以选N个,再比较最适宜T踢出的数据
maxmemory-samples 3
====日志模式
appendonly no #是否仅要日志
appendfsync no # 系统缓冲,统一写,速度快
appendfsync always # 系统不缓冲,直接写,慢,丢失数据少
appendfsync everysec #折衷,每秒写1次
no-appendfsync-on-rewrite no #为yes,则其他线程的数据放内存里,合并写入(速度快,容易丢失的多)
auto-AOF-rewrite-percentage 100 当前aof文件是上次重写是大N%时重写
auto-AOF-rewrite-min-size 64mb aof重写至少要达到的大小
====慢查询
slowlog-log-slower-than 10000 #记录响应时间大于10000微秒的慢查询
slowlog-max-len 128 # 最多记录128条
====服务端命令
time 返回时间戳+微秒
dbsize 返回key的数量
bgrewriteaof 重写aof
bgsave 后台开启子进程dump数据
save 阻塞进程dump数据
lastsave
slaveof host port 做host port的从服务器(数据清空,复制新主内容)
slaveof no one 变成主服务器(原数据不丢失,一般用于主服失败后)
flushdb 清空当前数据库的所有数据
flushall 清空所有数据库的所有数据(误用了怎么办?)
shutdown [save/nosave] 关闭服务器,保存数据,修改AOF(如果设置)
slowlog get 获取慢查询日志
slowlog len 获取慢查询日志条数
slowlog reset 清空慢查询
info []
config get 选项(支持*通配)
config set 选项 值
config rewrite 把值写到配置文件
config restart 更新info命令的信息
debug object key #调试选项,看一个key的情况
debug segfault #模拟段错误,让服务器崩溃
object key (refcount|encoding|idletime)
monitor #打开控制台,观察命令(调试用)
client list #列出所有连接
client kill #杀死某个连接 CLIENT KILL 127.0.0.1:43501
client getname #获取连接的名称 默认nil
client setname “名称” #设置连接名称,便于调试
====连接命令===
auth 密码 #密码登陆(如果有密码)
ping #测试服务器是否可用
echo “some content” #测试服务器是否正常交互
select 0/1/2… #选择数据库
quit #退出连接
(2)连接服务
redis-cli – h ip地址 – p 端口

2.通用操作
Redis key 设计技巧
1: 把表名转换为key前缀 如, tag:
2: 第2段放置用于区分区key的字段–对应mysql中的主键的列名,如userid
3: 第3段放置主键值,如2,3,4…., a , b ,c
4: 第4段,写要存储的列名

select 1 选着 1号数据库(0-15)
del key1 key2 … Keyn 删除1个或多个键
rename key newkey 给key赋一个新的key名
renamenx key newkey 把key改名为newkey
move key db 移动key到某个数据库中
keys pattern 查询相应的key
randomkey 返回随机key
exists key 判断key是否存在,返回1/0
type key 返回key存储的值的类型
ttl key 查询key的生命周期
expire key 整型值 设置key的生命周期,以秒为单位
pexpire key 毫秒数, 设置生命周期
pttl key 以毫秒返回生命周期
persist key 把指定key置为永久有效
dbSize 查看现在数据库有多少key
bgsave 将数据异步保存到磁盘
save 将数据同步保存到磁盘
info 返回redis的版本信息等详情
lastSave 返回上次成功将数据保存到磁盘的Unix时戳
slaveof 选择从服务器
sort key 排序

3.字符串类型操作
添加内容
nx: 表示key不存在时,执行操作
xx: 表示key存在时,执行操作
set key value [ex 秒数] / [px 毫秒数] [nx] /[xx]
mset multi set 一次性设置多个键值
get key 获取key的值
mget key1 key2 ..keyn 获取多个key的值
setrange key offset value 把字符串的offset偏移字节,改成value
append key value 把value追加到key的原值上
getrange key start stop 是获取字符串中 [start, stop]范围的值
getset key newvalue 获取并返回旧值,设置新值
incr key 指定的key的值加1,并返回加1后的值
incrby key number 指定增长因子
incrbyfloat key floatnumber
decr key 指定的key的减少1,并返回减1后的值
decrby key number
getbit key offset 获取值的二进制表示,对应位上的值(从左,从0编号)
setbit key offset value 设置offset对应二进制位上的值
bitop operation destkey key1 [key2 …] 对key1,key2..keyN作operation,并将结果保存到 destkey 上
可以用bit计算每天登陆用户状态

4.link链表操作
lpush key value 把值插入到链接头部
rpop key 返回并删除链表尾元素
rpush key value 把值插入到链接尾部
lpop key 返回并删除链表头元素
lrange key start stop 返回链表中[start ,stop]中的元素
lrem key count value 从key链表中删除 value值
ltrim key start stop 剪切key对应的链接,切[start,stop]一段,并把该段重新赋给key
lindex key index 返回index索引上的值
llen key 计算链接表的元素个数
linsert key after|before search value 在key链表中寻找’search’,并在search值之前|之后,.插入value
rpoplpush source dest 把source的尾部拿出,放在dest的头部,并返回 该单元值
brpop ,blpop key timeout 等待弹出key的尾/头元素, Timeout为等待超时时间,如果timeout为0,则一直等待

5.集合操作
sadd key value1 value2 往集合key中增加元素
srem value1 value2 删除集合中集为 value1 value2的元素
spop key 返回并删除集合中key中1个随机元素
srandmember key 返回集合key中,随机的1个元素
sismember key value 判断value是否在key集合中是返回1,否返回0
smembers key 返回集中中所有的元素
scard key 返回集合中元素的个数
smove source dest value 把source中的value删除,并添加到dest集合中
sinter key1 key2 key3 求出key1 key2 key3 三个集合中的交集,并返回
sinterstore dest key1 key2 key3 求出key1 key2 key3 三个集合中的交集,并赋给dest
suion key1 key2.. Keyn 求出key1 key2 keyn的并集,并返回
sdiff key1 key2 key3 求出key1与key2 key3的差集

6.有序集合操作
zadd key score1 value1 score2 value2 .. 添加元素
zrem key value1 value2 删除集合中的元素
zremrangebyscore key min max 按照socre来删除元素,删除score在[min,max]之间的
zremrangebyrank key start end 按排名删除元素,删除名次在[start,end]之间的
zrank key member 查询member的排名(升续 0名开始)
zrevrank key memeber 查询 member的排名(降续 0名开始)
ZRANGE key start stop [WITHSCORES] 把集合排序后,返回名次[start,stop]的元素,默认是升续排列
zrevrange key start stop 把集合降序排列,取名字[start,stop]之间的元素
zrangebyscore key min max [withscores] limit offset N 集合(升续)排序后,取score在[min,max]内的元素,并跳过 offset个, 取出N个
zcard key 返回元素个数
zcount key min max 返回[min,max] 区间内元素的数量
zinterstore destination numkeys key1 [key2 …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX] 求key1,key2的交集,key1,key2的权重分别是 weight1,weight2,聚合方法用: sum |min|max,聚合的结果,保存在dest集合内

7.哈希操作 (类似PHP数组概念)
hset key field value 把key中 filed域的值设为value
hmset key field1 value1 [field2 value2 field3 value3 ……fieldn valuen] 设置field1->N 个域, 对应的值是value1->N
hget key field 返回key中field域的值
hmget key field1 field2 fieldN 返回key中field1 field2 fieldN域的值
hgetall key 返回key中,所有域与其值
hdel key field 删除key中 field域
hlen key 返回key中元素的数量
hexists key field 判断key中有没有field域
hinrby key field value 是把key中的field域的值增长整型值value
hinrby float key field value 是把key中的field域的值增长浮点值value
hkeys key 返回key中所有的field
kvals key 返回key中所有的value

8.其他操作

Redis支持简单的事务
muitl 开启
Discard只是结束本次事务,前几条条语句造成的影响仍然还在
exec结束

消息订阅
订阅端: Subscribe 频道名称
发布端: publish 频道名称 发布内容

9.PHP-redis
$redis = new Redis();
$redis->connect(ip地址,端口);

10.运维常用操作

Redis持久化配置
1快照
save 900 1 // 900内,有1条写入,则产生快照
stop-writes-on-bgsave-error yes // 后台备份进程出错时,主进程停不停止写入?
rdbcompression yes // 导出的rdb文件是否压缩
Rdbchecksum yes // 导入rbd恢复时数据时,要不要检验rdb的完整性
dbfilename dump.rdb //导出来的rdb文件名
dir ./ //rdb的放置路径

BGSAVE 后台保存rdb快照
SAVE 保存rdb快照
LASTSAVE 上次保存时间

2是日志
appendonly no # 是否打开 aof日志功能
appendfsync always # 每1个命令,都立即同步到aof. 安全,速度慢
appendfsync everysec # 折衷方案,每秒写1次
appendfsync no # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快,
no-appendfsync-on-rewrite yes: # 正在导出rdb快照的过程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写

BGREWRITEAOF 后台进程重写AOF

Slowlog 显示慢查询
slowlog-log-slower-than 10000
slowlog-max-len 128
info
# Memory
used_memory:859192 数据结构的空间
used_memory_rss:7634944 实占空间
mem_fragmentation_ratio:8.89 前2者的比例,1.N为佳,如果此值过大,说明redis的内存的碎片化严重,可以导出再导入一次.
# Replication
role:slave
master_host:192.168.1.128
master_port:6379
master_link_status:up
# Persistence
rdb_changes_since_last_save:0
rdb_last_save_time:1375224063
#Status
latest_fork_usec:936 上次导出rdb快照,持久化花费微秒
#config get/set slowlog-log-slower-than
CONFIG get/SET slowlog-max-len
slowlog get N 获取慢日志

运行时更改master-slave
修改一台slave(设为A)为new master
命令该服务不做其他redis服务的slave
命令: slaveof no one
修改其readonly为yes
#其他的slave再指向new master A
命令该服务为new master A的slave
命令格式 slaveof IP port

Redis监控工具 sentinel

压力测试 ab压测

你可以发表评论引用到你的网站或博客,或通过RSS 2.0订阅这个日志的所有评论。
上一篇:
下一篇:
没有评论
我来说两句

  Ctrl+Enter