Redis
yum install -y redis
可以编译安装
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xf redis-5.0.5.tar.gz
cd redis-5.0.5/
make
redis可执行文件
reids-benchmark #性能测试
redis-check-aof #检查修复aof文件
redis-check-rdb #检查修复rdb文件
redis-cli #redis的客户端
redis-sentinel #redis的集群
redis-server #redis的服务端
redis-trib.rb #集群管理
启动redis
./src/redis-server # 默认端口是6379 默认启动会占用终端
性能测试
./src/redis-benchmark -q
默认是100000,50个同时发起连接
连接redis
./src/redis-cli
-h ip地址
-p 端口
-s 套接字
-a 密码
-n 指定redis的库
# 命令不区分大小写
redis的数据类型
-
string
-
hash
-
list
-
set
-
zset
命令相关
ping 用来测试redis是否连通,返回值是pong
info 获取系统的信息
echo 打印内容,测试使用
quit 退出
select 切换redis的库,总共有16个 0-15
del 删除指定的一个或者多个key,不存在的的key忽略
exists 判断key是否存在,存在是1,不存在是0
expire key seconds 给指定的key设置存活时间,当key过期以后,就自动删除
ttl 查看key的存活时间,-2key不存在 -1永久不失效
keys pattern 查找所有符合pattern的key,支持通配符
move key db 移动当前的key到指定的db里面,成功返回1,失败返回0
pexpire key 给一个key设置过期时间,单位毫秒
pttl key 查看key的存活时间,单位毫秒
randomkey 随机获取一个key,但是不删除,如果数据库为空,则返回空
rename 重命名key,如果原key不存在,则报错,如果目标key存在,则覆盖
renamenx 重命名key,如果原key不存在,则报错,如果目标key存在,则不变
type 查看key所存储的数据类型,如果没有这个key,则返回none
string
-
set
设置key value,如果key存在则覆盖,不存在则新建
EX second 设置key的存活时间,单位是秒
px 毫秒 设置key的存活时间,单位是毫秒
nx 如果不存在,则新建,如果存在,则返回nil
xx 只有键存在,才能操作
-
get
获取key对应的value,只能获取一个,如果key存在,则返回值,如果key不存在则返回nil
-
mset
批量创建key value对应关系,会覆盖已存在的key
-
mget
批量获取key,如果不存在则返回nil
-
getset
给指定的key设置新value,并返回原来的value,如果key不存在,则返回nil
-
strlen
返回value的长度
-
append
如果key存在则追加。如果key不存在则添加
-
incr
将key中存在的数值加1,只能对数字有效
-
decr
将key中存在的数值减1,只能对数字有效
-
incrby
将key中存在的数值指定增加多少,只能对数字有效
-
decrby
将key中存在的数值指定减少多少,只能对数字有效
-
getrange
切片,同Python类似,不能使用步长
-
incrbyfloat
将key中存在的数值增加指定的浮点数
list
-
lpush
将一个或者多个value插入到列表的头部
-
lpop
移除并返回列表key的头一个元素
-
lrange
查看列表指定的元素,全部显示是0,-1
-
rpush
将一个或者多个value插入到列表的尾部(最后边)
-
rpop
删除尾部的值
-
rpushx
将value插入的key的尾部,key必须存在才可以
-
lpush
将value插入到key的头部,key必须存在才可以
-
lindex
从表头开始,获取下标为index的value
-
linsert
将value插入到key指定的元素前或者后
before 前
after后
如果value不存在,则不操作
-
llen
获取列表长度
-
lrem
删除列表中的value
-
count>0 从表头往表尾的方向查找,删除指定的个数
-
count=0 全部删除
-
count<0 从表尾往表头的方向查找,删除指定的个数
-
-
lset
替换指定的索引位置的value,如果索引超出范围,则报错
-
ltrim
列表的切片
hash
-
hset
给hash增加key value值
-
hlen
获取hash的长度
-
hget
获取某个hash里面的key的value
-
hgetall
获取所有的键值对
-
hmset
批量增加键值对
-
hmget
批量获取键值对
-
hsetnx
给指定的hash增加键值对,如果原来的field存在,则操作无效;如果不存在,则新增
-
hkeys
获取hash表中所有的field
-
hvals
获取hash表中所有的value
-
hdel
删除hash表中的一个或者多个field-value
-
hexists
判断hash表中的field是否存在,如果存在,则为1,不存在则为0
-
hincyby
给hash表中的field增加指定的数值,只限于数字
-
hincybyfloat
给hash表中的field增加指定的浮点,只限于数字
set
-
sadd
给集合添加值,如果值存在,则什么都不操作,如果值不存在,则添加
-
smembers
获取集合所有的成员
-
scard
获取集合的个数
-
sdiff
获取两个集合的差集,前面存在,但是后面不存在的
-
sinter
获取两个集合的交集
-
sunion
获取两个集合的并集
-
sismember
判断元素是否存在集合中,如果存在,则为1,如果不存在则为0
-
smove
将指定的元素从一个集合移动到另一个集合中,如果原集合存在则移动,如果不存在则忽略;
如果目标集合不存在则新建
-
spop
随机删除指定个数的元素,并把删除的元素打印出来
-
srandmember
随机获取指定个数的元素
-
srem
删除指定的一个或者多个元素
zset
-
zadd
给集合添加值,如果值存在,则什么都不操作,如果值不存在,则添加
发布订阅
subscribe
订阅一个或者多个频道
publish
给指定的频道发送消息
psubscribe
订阅指定模式的频道,*代表所有
pubsub channels
查看当前活跃的频道
pubsub numsub channels
查看当前频道的订阅人数
redis配置文件
bind 127.0.0.1 # 监听的地址
protected-mode yes # 安全模式下
port 6379 #端口号
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
requirepass foobared #redis设置密码
redis的主从
#只需要在从服务器上进行配置
slaveof ip地址 端口
#如果有密码的话
masterauth 密码
- 基于异步的,平均每秒钟从服务器都会主服务器发送复制的情况
- 一个主可以多个从
- 不止主可以有从服务器,从也可以有从服务器
- 复制功能也不会阻塞从服务器
- 复制功能不会阻塞主服务器
redis的持久化
-
rdb
-
aof
rdb
优点
-
生成二进制文件
-
系统会默认的多长时间保存一次
-
直接手动保存
-
制作快照
-
可以用作备份
-
比较适合做灾难恢复
-
主进程会fork一个子进程出来,子进程用来复制保存数据
缺点
- 如果说数据需要尽量保存下来,则不适合适用rdb
- 在数据量庞大的时候,对系统消耗过大
save 900 1 # 在900秒以内有1次更新,就会持久化
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb #数据的保存文件
dir ./ # 保存目录
aof
优点
-
持久化更好
-
aof将所有的操作都追加到一个文件中,redis-check-aof
-
文件易读
缺点
- 文件会越来越大
- aof的数据会比rdb慢,aof使用的是fsync
- 文件易读
appendonly on
appendfilename "appendonly.aof"
appendfsync everysec
直接通过命令从rdb切换到aof
config set appendonly yes
config set save ""
redis的高可用
redis cluster
准备配置文件
#6383
bind 127.0.0.1
port 6383
daemonize yes
pidfile 6383.pid
logfile 6383.log
cluster-enabled yes
cluster-config-file node-6383.conf
cluster-node-timeout 10000
#6384
bind 127.0.0.1
port 6384
daemonize yes
pidfile 6384.pid
logfile 6384.log
cluster-enabled yes
cluster-config-file node-6384.conf
cluster-node-timeout 10000
#6385
bind 127.0.0.1
port 6385
daemonize yes
pidfile 6385.pid
logfile 6385.log
cluster-enabled yes
cluster-config-file node-6385.conf
cluster-node-timeout 10000
环境准备
安装ruby
版本必须是2.2以上
wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.4.tar.gz
tar -zxvf ruby-2.6.4.tar.gz
cd ruby-2.6.4
./configure --prefix=/opt/ruby
make && make install
配置环境变量
PATH=/opt/ruby/bin:$PATH
source /etc/profile
安装ruby依赖
gem install redis
安装命令
./src/redis-cli --cluster help
./src/redis-cli --cluster create --cluster-replicas 1 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385
create 创建集群
check 检查集群
info 查看集群信息
fix 修复集群