官方网址
https://redis.io/
github:https://github.com/antirez/redis
一、安装下载redis-5.0.5
1、官网下载redis-5.0.5.tar.gz
2、解压编译安装
tar -xvf redis-5.0.5.tar.gz
cd redis-5.0.5
make PREFIX=/usr/local/redis install
3、启动redis
①直接启动(不推荐,会进入客户端)
cd /usr/local/redis/bin
./redis-server
②后台启动(推荐)
去解压的路径下复制redis.conf文件到/usr/local/redis/bin下
cp /root/soft/redis-5.0.5 /usr/local/redis/bin
vim /usr/local/redis/bin/redis.conf
修改为daemonize yes
cd /usr/local/redis/bin
./redis-server ./redis.conf
4、关闭redis服务
./redis-server shutdown
二、连接redis
①telnet可以连接redis,没有本身redis-cli更加好用
>telnet 127.0.0.1 6379
②直接使用redis-cli连接
redis-cli -h 10.64.39.100 -p 6379
有认证的话: auth 密码
集群连接:redis-cli -h 10.64.39.100 -p 6379 -c
三、常用redis命令
存储:set key value
set name opt
批量存储:mset key1 value1 key2 value2
mset name linux age 5
获取:get key
get name
批量获取:mget key1 key2
mget name age
查看相关操作:help set|get
查看redis相关信息:info
判断有没有key值:exists key(存在即为1,不存在即为0)
exists name
删除给定key:del key1 key2
del name age
返回给定的key的value类型:type key
type name
返回匹配指定模式的所有key:keys *
keys name*
改名字:rename oldkey newkey
rename name Name
返回当前数据库的key数量:dbsize
为key指定过期时间:expire key seconds
返回key的剩余过期秒数:ttl key
选择数据库:select db-index
select 15 默认16个库0-15
将key从当前数据库移动到指定数据库:move key db-index
删除当前数据库中所有的key:flushdb
删除所有数据库中的所有key:flushall
设置key对应的值为string类型的value:set key value
set name sting
对key值做加操作,并返回新的值:incr key
incr age
对key值做减操作,并返回新的值:decr key
decr age
对key增加指定的值:incrby age 5
对key减少指定的值:incrby age 5
给指定key的字符串追加值:append key value
append name centos name原来的值为linux,则name的值为linuxcentos
返回截取的key的字符串:substr key start end
从0开始,substr name 0 5
redis停止
./redis-cli客户端里面使用shutdown停止后exit退出
或者命令行直接killall redis-server
List:双向链表
先进后出是栈,先进先出是队列
在key对应list的头部添加字符串元素:lpush key string 可以添加多个元素
lpush name xiaoming
在key对应list的尾部添加字符串元素:rpush key string 可以添加多个元素
在list的尾部删除元素,并返回删除的元素:rpop key
在list的头部删除元素,并返回删除的元素:lpop key
对应list的长度,key不存在返回0,如果key对应类型不是list,返回错误:llen key
返回指定区间内的元素,下标从0开始:lrange key start end
lrange name 0 2
截取list,保留指定区间内的元素:ltrim key start end
set:无序集合
sadd xiaomingFR xiaohong xiaoqiang xiaogang xiaohei xiaobai
sadd xiaohongFR xiaoming xiaolv xiaolan xiaobai xiaohei
添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中,返回0,key对应的set不存在返回错误:sadd key member
从key对应set中移除给定元素,成功返回1:srem key member [member]
从p1对应set中移除member并添加到p2对应set中:smove p1 p2 member
返回set的元素个数:scard key
判断member是否在set中:sismember key member
返回所有给定key的交集:sinter key1 key2 keyN
sinter xiaomingFR xiaohongFR
返回所有给的key的并集:sunion key1 key2 keyN
sunion xiaomingFR xiaohongFR
返回所有给的key的差集:sdiff key1 key2 keyN
sdiff xiaomingFR xiaohongFR
返回key对应set的所有元素,结果是无序的:smembers key
从key中移除元素:srem key string
srem xiaomingFR xiaoqing
判断元素是否在key中:sismember key string
sismember xiaomingFR xiaoqiang
将元素从key1中移动到key2:smove key1 key2 string
smove xiaomingFR xiaohongFR xiaogang
查看key中的元素个数:scard key
scard xiaomingFR
zset:有序集合,元素不允许重复,通过权值可以有序的获取集合中的元素
zadd hottop 2 QQ 3 wechat 5 alipay 7 taobao 8 jd 10 king
添加元素到集合,元素在集合中存在则更新对应score
zadd key score member
删除指定元素,1表示成功,如果元素不存在返回0:zrem key member
按照incr幅度增加对应member的score值,返回score值:zincrby key incr member
zincrby hotTop -2 jd
返回指定元素在集合中的排名(下标),集合中元素是按score从小到大排序的:zrank key member
同上,但是集合中元素是按score从大到小排序:zrevrank key member
类似lrange操作从集合中取指定区间的元素,返回的是有序结果:zrange key start end
zrange hotTop 0 4
同上,返回结果是按score逆序的:zrevrange key start end
zrevrange hotTop 0 4
返回集合中元素个数:zcard key
返回给定元素对应的score:zscore key member
zscore hotTop jd
删除集合中排名在指定区间的元素:zremrangebyrank key min max
hash:使用hash结构,压缩效率和使用效率更高,Key:value(field:value)
设置hash field为指定值,如果key不存在,则先创建:hset key field value
hset name username dev
获取指定的hash field:hget key field
hget info phone
获取全部指定的hash field:hmget key field1 field2 fieldN
hmget info username age phone
同时设置hash的多个field:hmset key field1 value1 field2 value2
hmset info username devops age 13 phone 12345678910 job java
将指定的hash field加上给定值:hincrby key field integer
测试指定field是否存在,存在返回1,不存在返回0:hexists key field
hexist info age
删除指定的hash field:hdel key field
hdel info job
返回hash的所有field:hkeys key
hkeys info
返回指定hash的field数量:hlen key
hlen info
返回hash的所有value:hvals key
hvals info
返回hash的所有field和value:hgetall key
hgetall info
snappshoting(快照)
在/usr/local/redis/bin目录下有一个dump.rdb文件
备份频率:在5分钟内,进行10key的改变
或者手动备份 > SAVE
随时要把dump.rdb文件做备份,避免发生意外数据丢失。
redis恢复数据
先停掉redis --> killall redis-server
把备份的dump.rdb文件放到/usr/local/redis/bin目录下覆盖文件原dump.rdb文件 --> cp /root/dump.rdb /usr/local/redis/bin
重新启动redis --> ./usr/local/redis/bin/redis-cli
append only file更快的备份方式
开启aof后,之前的redis里的数据会丢失
默认关闭,开启方式
vi /usr/local/redis/bin/redis.conf
修改为 appendonly yes,重启redis
备份策略
appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
appendfsync no //完全依赖os,性能最好,持久化没保证
redis主从复制
主redis上修改redis.conf
vi redis.conf
bind 127.0.0.1 192.168.10.108
从redis上修改redis.conf
vi redis.conf
slaveof 192.168.10.107 6379 5.0之前的版本
replicaof 192.168.10.107 6379 5.0之后的版本修改slaveof为replicaof
从redis不允许写操作,是因为配置文件里进行了slave read-only设置,也是符合业务的使用需求
redis密码设置
vi redis.conf
requirepass 123456
重启redis
./reids.cli
auth 123456
如果开启了密码限制,搭建主从需要在从redis中填写主redis密码 --> masterauth 123456