安装redis
- 下载解压redis 4.0.11, 进入解压后目录
- make
配置redis 文件
bind 127.0.0.0 #默认绑定ip 0.0.0.0 全网
port 6379 #默认监听端口
protected-mode #禁止外网访问, 需设置密码, 关闭之后外网可直接访问
tcp-backlog 511 #tpc缓冲已经满了之后, 额外找地方缓存tpc请求的地方, 指定队列长度
timeout #客户端空闲多久关闭tcp连接
tcp-keepalive 300 #默认等待多久关闭tcp连接
daemonize yes
supervised no #使用systemd时候的选项默认关闭
pidfile /var/run/redis_6379.pid #保持默认即可
databases 16 # 16是默认值, 数据库个数
loglevel notice #记录日志的级别
logfile "" #logfile路径默认为空, 表示不记录日志
syslog-enabled no #是否记录到系统日志, 默认否
syslog-ident redis #在系统日志里的提示
syslog-facility local 0 #系统日志所在的桶
maxmemory 1gb #配置redis最大可使用内存
maxmemory-policy #当内存使用到达上限时删除已存在值的策略
requirepass foobared #访问redis密码, 默认为空""
//snapshotting RDB
save 900 1 //900秒之外发生1次写操作, 保存快照
save 300 10 // 300秒之外发生10次写操作, 保存快照
save 60 10000 //60秒之外发生 10000此写操作, 保存快照
stop-writes-on-bgsave-error //保存快照时出错停止服务器
rdbcompression //保存快照是否压缩, 压缩浪费cpu, 节省存储空间
dbfilename //指定文件名
dir //指定文件路径
//AOF 类似于mysql binlog 基于命令保存数据
appendonly //是否打开aof功能
appendfilename //指定文件名
sppendfsync // everysec 每秒刷一次缓存一次, always 每增加一条语句刷一次缓存, no 表示不刷新缓存, 等待操作系统自动刷新
no-appendfsync-on-rewrite //当子进程重写aof的时候需要占用大量磁盘资源, 定义子进程重新aof时是否禁用主进程调用系统fsync同步磁盘文件, 如果设置为yes是禁用主进程的aof文件同步, 主进程的aof写入会缓存在内存中, 提升性能, 但有可能导致数据丢失, 设置 no 表示主进程与子进程挣用硬盘资源, 不会丢失数据, 但是有可能造成主进程阻塞.
auto-aof-rewrite-percentage 100 //上次重写完成之后aof会缩小到很小, 现在的aof文件大小是上次重写时的二倍时触发重写, 每次重写后的aof文件大小都差不多
auto-aof-rewrite-min-size 64mb //触发重写的最小文件大小
slaveof <masterip> <masterport> //设置为其他服务器的从服务器
masterauth // 如果主服务器开启了密码认证, 从服务器需要配置密码
slave-serve-stale-data yes //设置从服务器和主服务器断开连接后时候继续使用已有的陈旧数据
slave-read-only yes //从服务器只读
repl-diskless-sync no //主从复制当一个新从服务器加入, 直接从内存复制数据过去, 而不是fork一个子进程保存快照然后传输rdb文件, 在硬盘性能差而网络性能好的时候可以使用.
repl-diskless-sync-delay 5 //启用内存复制时的等待时间
slave-priority //指定slave优先级, 优先同步
//sentinel 哨兵监控redis主服务器状态
/usr/local/redis-4.0.11/src/redis-sentinel /usr/local/redis-4.0.11/sentinel.conf //启动哨兵, 指明哨兵程序的配置文件, 哨兵可以独立于redis进程运行
//sentinel 配置文件
bind
port
sentinel monitor mymaster 127.0.0.1 6379 2 //监控的redis主服务器 ip,port, mymaster为起的名字, 最后的2表示投票odown, 客观宕机投票数量, 可以出现多次, 监控多个主从服务器
sentinel parallel-syncs mymaster 1 // 当主服务器宕机, 一个新的从服务器变为主服务器时, 允许多少个其他从服务器同时连接主服务器, 向主服务器发起同步请求
sentinel failover-timeout mymaster 180000 //故障转移, 把一个从服务器提升为主服务器的超时时间, 超时认定为转移失败.
//sentinel 命令, 用redis客户端连接sentinel服务器ip,port执行sentinel命令
sentinel masters // 列出所有主服务器
sentinel slaves //列出所有从服务器
sentinel get-master-addr-by-name <master name> //获取某个命名的master ip 地址
sentinel reset // 重置sentinel所有状态
sentinel failover <master name> //手动发起故障转移
redis启动
/usr/local/redis-4.0.11/src/redis-server /usr/local/redis-4.0.11/redis.conf
redis命令
//服务器命令
client setname //设置客户端名称
client getname //获取客户端名称
client list //查看客户端列表
info //查看服务器状态
config resetstat //重置info中的信息
config set parameter //设置服务器参数
config get parameter //获取服务器参数
config rewrite //把内存中的配置写到配置文件
bgsave //执行后台进程把快照保存到磁盘上, 与客户端执行这条命令时异步
save //立即保存快照到磁盘, 同步请求
lastsave //获取最后一次正确保存快照的时间
help @server //查看服务器设置帮助
//发布订阅
publish channel message //向某频道发射消息
subscribe channel channel //订阅某频道
help @pubsub //查看帮助
//数据库通用命令
ping #测试命令返回pang
dbsize #获取当前数据库key数量
select number # 选择数据库 number 可以是 1,2,3...16 数据库编号
keys * #获取当前数据库所有键名, * 是通配符 也可以用 n* 代表 n开头所有键名, n?代表 n后面跟任意单个字符的键名
del key1 key2 # 删除某个键值
flushall #清空所有数据库的所有数据
flushdb #清空当前库的所有数据
exists key #key是否存在, 存在返回1, 不存在返回0
move key #把键值移动到其他库, number 为库编号
type key #查看key数据类型
ttl key #查看key有效期, -1 永不过期, -2 已经过期, 其余为读秒倒计时
expire key number #给已经存在的key 设置有效期以秒为单位
shutdown #关闭数据库
//事务, redis事务类似于java的线程锁, 当一个线程执行一堆命令时不允许切换到其他线程, 当有语法错误时才会回滚.
multi #开启事务
get key
set key
sadd key
....
exec #执行事务
discard #取消事务
watch key #监视某个key是否变动, (绑定当前线程)
multi #开启事务
set key
get key
....
exec #执行事务, 如果watch key 被其他线程改变则事务取消
//redis乐观锁
watch key1 #监视一个key的变动情况
multi #开启一个事务
set key1 number
exec #执行事务, 如果上面watch监视的key发生了变化, 那么事务执行被取消,discard
unwatch #取消所有监视的key
//Bitmap
setbit test 1 1 #给键test设置二进制位的值第一个1是偏移, 二进制的位数无上限redis会自动扩展, 从最左面的位数开始数, 偏移几位, 第二个1代表置1(这个值只能为1)
getbit test 7 # 参数7代表偏移量, 获取键test第7位是0还是1 , 也就是一个字节.
get test #直接获取test的值, test的值以字符串对待, 如果test存的是 1100001 对应十进制97, 字符串的十六进制存储形式就是"\x61", 获取到的值为"a";
bitcount test 0 -1 #统计test这个键里二进制位为1的个数上面的1100001, 获取到的值为3, 0为起始偏移量, -1为结束偏移量, -1代表末尾.
BITOP or storykey test test2 # or代表要做的操作是 '或' 操作也可以是and代表的是要做的操作是'与'操作, storykey 代表存储结果的key键名, test, test2是操作符两边的操作数.
//String 数据类型 单值key->value, 类似memcache
set key value #设置键值数据
set key value EX number #设置键值的同时设置过期时间, number为秒数
set key value EX number NX #NX代表 not exists 如果键不存在则设置
get key #获取键值数据
append key string #在key的值后面追加字符串
srtlen key #计算key的值字符串长度
incr key #为纯数字字符串加一
incrby key number #为纯数字字符串加上number
decr key #为纯数字字符串减一
decrby key number #为纯数字字符串减去number
getrange key 0 2 #取前三个字符, 0代表第一个字符
getrange key 2 -1 #取从第三个字符到字符串结尾
setrange key number value #从第number位开始替换, value是几个字符就替换几位
mset key1 value key2 value #同时设置多个键值
mget key1 key2 #同时获取多个键的值
//队列类似于C语言的数组, 以下标存取值
lpush key value1 value2 #从左侧向一个队列里增加数据, 首先增加value1 再增加value2 , 队列的顺序和增加的顺序正好相反
rpush key value1 value2 #从右侧向一个队列增加数据, 首先增加 value1 再增加value2, 队列的顺序和增加的顺序一致.
lrange key 0 -1 # 查看队列里所有值
lpop key #从队列的左侧弹出一个值, 队列里的这个值被删除
rpop key #从队列右侧弹出一个值, 队列里的这个值被删除
lindex key number #通过下标number从队列里获得一个元素
llen key #计算队列长队
lrem key number value # 从队列里删除value, value是通过值查找要删除的key value, number 指定在有相同值的情况下删除几个
ltrim key number number # 截取队列中的number to number之间的元素, 然后重新复制给key, 或者说当前队列只保留 number to number 之间的元素.
rpoplpush key1 key2 # 队列key1从右侧弹出一个元素, 把这个元素从右侧添加进key2
lset key number value # 用下标改变队列某个元素的值
linsert key before value value #在队列的某个元素之前插入值, before value代表队列中已经存在的值, 最后的value代表插入的值.同样可以使用 after value插入元素.
//集合
sadd key value1 value2 #向一个集合添加元素, 如果元素已经存在则不允许添加返回0
smembers key #查看一个集合里所有元素
sismember key value #查看一个集合里是否存在某个元素
scard key #获取集合元素个数
srem key value #从集合中移除某个元素
srandmember key number #从集合中随机取number个元素但集合中的元素不消失
spop key #从集合中随机弹出一个元素, 集合中的元素会消失
smove key1 key2 value #把集合1中的value 移动到集合2中
sdiff key1 key2 key3 #求集合差集, 返回只在key1中存在, 而不在后面任何一个集合中存在的元素
sinter key1 key2 key3 #求集合交集, 第一个集合中的元素, 在后面所有集合中都存在
sunion key1 key2 key3 #求集合中的并集, 集合相加去重
//hashset 哈希集合, 类似于php的键值数组
hset key name1 value1 #设置哈西集合中的某个键值
hsetnx key name1 value1 #如果该键不存在, 设置哈希集合中的某个键值
hget key name1 #获取哈希集合中的某个键值
hmset key name1 value1 name2 value2 #设置哈希集合中的多个键值
hmget key name1 name2 #获取哈希集合中的多个键的值
hgetall key #获取哈希集合所有键和值
hdel key name #删除哈希集合中某个键值
hlen key #计算哈希集合元素个数
hexists key #测试哈希集合中某个元素是否存在
hkeys key #获取一个哈希集合中所有的键
hvals key #获取一个哈希集合中所有的值
hincrby key name number #给哈希集合中的某个纯数字元素加number
hincrbyfloat key name number #给哈希集合中的某个元素加上小数
// sorted_set 有序的集合
zadd key score1 value1 score2 value2 score2 value3 score2 value4 #向一个有序集合里添加元素 score为分数, 一个分数下可以有多个值 比如60分有三个用户user1, user2,user3
zrange key number number #按分数的排序显示分数下的value number number表示从第几个开始显示, 共显示几个. 可以 0 -1 显示全部
zrevrange key number number #同上, 是反向排序并显示 rev 代表reverse
zrange key number number withscores #同上, 附加分数
zrangebyscore key number number #获得两个分数之间的所有值, number代表分数
zrevrangebyscore key number number #同上, 只是反向排序, 给定number时也是从大到小反向给
zrangebyscore key number number withscore #同上, 显示时附加分数
zrangebyscore key number number limit number number #同上, 同mysql分页
zrem key value #删除有序集合中的元素, 连同所属分数一起删除
zcard key #统计一个有序集合里有多少value 和分数无关
zcount key number number #统计有序集合中两个分数之间的value个数, number代表分数
zrank key value #获取一个value在有序集合中的位置, 返回数字下标
zrevrank key value #同上, 但是倒序, 并获取位置 re代表reverse
zscore key value #获取一个value在有序集合中所属分数