redis学习指南
一、redis安装
# 安装最新版
yum install -y epel-release vim atop htop net-tools git wget gcc-c++
yum clean all
yum maakecache
wget -P /usr/local/src http://download.redis.io/releases/redis-5.0.3.tar.gz
cd /usr/local/src && tar zxvf redis-5.0.3.tar.gz
cdredis-5.0.3 && maake
mkdir-p/usr/local/redis/etc
cdsrc &&makeinstallPREFIX=/usr/local/redis
cd../ &&mvredis.conf /usr/local/redis/etc
sed-i’s@daemonize no@daemonize yes@g’/usr/local/redis/etc/redis.conf
echo’export PATH=/usr/local/redis/bin:$PATH’>> /etc/profile
source/etc/profile
# 配置开机启动
vim /etc/systemd/system/redis-server.service
————————————-start—————————————-
[Unit]
Description=The redis-server Process Manager
After=syslog.target network.target
[Service]
Type=simple
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
[Install]
WantedBy=multi-user.target
—————————————end——————————————-
systemctl enable redis-server
systemctl start redis-server
二、redis数据类型
# redis string
redis 设置字符串
127.0.0.1:6379>setmykey abc
OK
127.0.0.1:6379>getmykey
“abc”
EX seconds − 设置指定的到期时间(以秒为单位)。
PX milliseconds-设置指定的到期时间(以毫秒为单位)。
NX-仅在键不存在时设置键。
XX-只有在键已存在时才设置
# redis 加法计算
set a100
incr a
(intege)101
incr a
(integer)102
incrby a 100
(integer)202
incr 每次加1
incrby 加法运算
# redis 创建数组
mset a10 b10 c10
mget a b c
1)”10″
2)”10″
3)”10″
# redis 列表
rpush mylist A
(integer)1
rpush mylist B
(integer)2
lpush mylist first
(integer)3
lrange mylist0-1
1)”first”
2)”A”
3)”B”
del mylist
rpush mylist a
rpush mylist b
lpush mylist c
lrange mylist0-1
1)”c”
2)”a”
3)”b”
lpop mylist
“c”
lrange mylist0-1
1)”a”
2)”b”
rpop mylist
“b”
lrange mylist0-1
1)”a”
rpush 插入一个新的列表在尾部
lpush 插入一个新的列表在首部
lrange 检索0第一个-1最后一个
del 删除列表
lpop 从前将列表中元素剔除
rpop 从后将列表中元素剔除
redis 不存储空列表,当列表中元素被删除后,自动删除空列表
# redis hashes
hmset user:a usernam sb birth10verfile1
hget user:a username
“sb”
hget user:a birth
“10”
hgetall user:a
1)”username”
2)”sb”
3)”birth”
4)”10″
5)”verfile”
6)”1″
hmget user:a username birth c
1)”sb”
2)”10″
3) (nil)
hincrby user:a birth10
(integet)20
redis hashes 字符串和字符字段之间的映射,展现对象的完美数据类型
hmset 设置多域的hash表
hgetall 获取指定key的所有信息
hget 获取单域的信息
hmget 获取多域的信息,返回为数组
hincrby hash字符加法运算
# redis 集合
set为无序集合,不包含相同的元素,支持不通集合合并,交集,找出不同的元素
sadd myset a b c
(integer)3
smembers myset
1)”a”
2)”b”
3)”c”
sismember myset1
(integer)1
sismember myset0
(integer)0
sismember myset a
(integer)1
sismember mys3
(integer)0
sadd 创建无序集合
smember 查看集合
sismember 匹配集合名称,内容及个数,成功返回为1,失败返回为0
有序集合,集合的成员唯一,前面有参数用来排序,访问速度快,提高性能
zadd hackers1″a”2″b”3″c”
(integer)1
zrange hackers0-1
1)”a”
2)”b”
3)”c”
zrevrange hackers0-1
1)”c”
2)”b”
3)”a”
zrange hackers0-1withscores
1)”a”
2)”1″
3)”b”
4)”2″
5)”c”
6)”3″
zadd 创建有序集合,集合名称必须为两位以上包含两位,需要加上序号参数
zrange 正序查看集合
zrevrange 倒序查看集合
withscores 返回参数记录值
三、redis常用命令
# exists and del
setmykey a
OK
exists mykey
(integer)1
del mykey
(integer)1
exits mykey
(integer)0
exists 判断key是否存在,存在返回为1,不存在返回为0,del删除key
# type and keys
setmykey a
OK
type mykey
string
keys my*
1)”myset”
2)”mykey”
type 返回key的类型
keys my* 返回匹配的key列表
# randomkey and clear
randomkey 随机获得一个已经存在的key
clear清除界面
# rename and renamenx
rename oldname newname 改key的名字,新建如果存在将会被替换
renamenx oldname newname 改key的名字,新建如果存在将会失败
dbsize 返回当前数据库key的总数
# 限制key的生存时间
setmykey a
expire mykey10
getkey
“a”
getkey
(nil)
expire 设置key 的过期时间
ttl key 查询key的过期时间
flushdb 清除当前数据库中所有的键
flushall 清除所有数据库中的所有键
# redis 设置命令
configgetrequirepass (查看密码)
configsetrequirepass123
auth123
configget*max-*-xxx* 查询数据最大数量
config resetstat 重置数据统计
# info 查看信息
1、server:redis server常规信息
2、clients:client 连接信息
3、memory:内存信息
4、persistence:rdb and aof 相关信息
5、stats:常规信息
6、replication:Master/slave 请求信息
7、cpu:cpu占用信息
8、cluster:redis集群信息
9、keyspace:数据库信息统计
10、all:返回所有信息
11、默认设置信息
四、redis管理
# 设置密码
方法一:
grep-nrequirepass /etc/redis/redis.conf
sed-i’s@# requirepass@requirepass test@g’/etc/redis/redis.conf
serviceredis-serverrestart
redis-cli
auth test
redis-cli-atest
方法二:
configsetrequiress test
# 主从复制
1、master可以拥有多个slave
2、多个slave可以连接在同一个master上,还可以连接其他的slave,当master宕机后,相连的slave转变为master
3、主从复制不会阻塞master,再同步数据时,master 可以继续处理client请求
4、slave与master建立连接,发送sync同步命令
5、master会启动一个后台进程,将数据快照保存到文件中,同时master主进程会开始收集新的写命令并缓存
6、后台完成保存后,就将此文件发送给slave
7、slave将此文件保存在磁盘上
配置主从
———————————————-start—————————————-
vim/usr/local/redis/redis.conf (主)
port6379
bind172.16.5.1127.0.0.1
daemonizeyes
pidfile /var/run/redis_6379.pid
requirepass redis
vim/usr/local/redis/redis.conf (从)
port6380
bind172.16.5.2127.0.0.1
daemonizeyes
pidfile /var/run/redis_6380.pid
masterauth redis
登录客户端(主)
redis-cli-aredis
127.0.0.1:6379>setname redis-master
127.0.0.1:6379> info repliaction
登录客户端(从)
redis-cli-aredis
配置主从
127.0.0.1:6380> slaveof 127.0.0.16379
127.0.0.1:6380> info repliaction
127.0.0.1:6380>get name
# 事务
只能client发起事务的命令可以连续执行,不会插入其他client命令,通过multi命令开始事务,后续的命令不会执行,被存放到一个对列中,当执行exec命令,redis顺序执行对列中所有命令,如果执行出错不会回滚。
multi
setname a
setname b
exec
getname
# 持久化
1、快照,将数据放到文件中,默认方式
将内存中的数据已快照的方式写入二进制文件中,默认文件为dunp.rdb,可以通过配置设置自动作快照持久化的方式,可配置redis在n秒内如果超过m个key被修改就自动保存快照。
save 9001900秒内如果超过超过1个key被修改,则发起快照保存
save 30010300秒内如果超过10个key被修改,则快照保存
2、append-only file 将读写操作保存在文件中
由于快照方式在一定时间间隔作一次,所以如果redis意外down掉的话,就会丢失最后一次次快照后的所有修改
aof 比快照有更好的持久化,使用aof,redis将每一个收到的写命令都通过wirte函数写入到文件中当redis启动会通过重新执行文件中保存的写命令来在内存中重新建立整个数据的内容
使用fsync函数强制os写入到磁盘的时间
appendonlyyes // 启用aof持久化
#appendfsync always // 收到命令就写入磁盘,最慢,数据最完整
appendfsync everysec // 每秒写入磁盘一次,性能和持久化方面做了折中
#appendfsync no // 完全依赖os,性能最好,持久化没有保证