Redis默认端口6379
1.去redis.cn看看最新的稳定版下载地址,http://download.redis.io/releases/redis-6.0.6.tar.gz
2.下载 wget http://download.redis.io/releases/redis-6.0.6.tar.gz
3.解压 tar -zxvf redis-6.0.6.tar.gz
4.移动 放到/usr/local/redis目录下 sudo mv redis-6.0.6 /usr/local/redis/ 由于redis目录不存在,所以相当于重命名
5.进入redis目录 cd /usr/local/redis-6.0.6
6.生成 sudo make 由于redis是C语言编写的,这个步骤相当于编译
如果出错,大概率是没安装gcc和make,安装后先make distclean 除编译内容重新编译*
7.测试 sudo make test
8.安装 sudo make install 将redis的命令安装到/usr/local/bin/目录
9.进入/usr/local/bin中查看 cd /usr/local/bin ls -all
10.将配置文件复制到/etc/目录下 配置文件为/usr/local/redis/redis.conf
sudo cp /usr/local/redis/redis.conf /etc/redis/
redis-server 启动服务端
ps aux|grep redis 查看是否启动
redis-server --help 查看启动的帮助
sudo redis-server /etc/redis/redis.conf 指定加载的配置文件
redis-cli 启动客户端
redis-cli --help 查看启动帮助,可添加参数(主机、端口等等)
redis-cli -h ip地址 -p 端口号
启动客户端后输入ping 如果结果为PONG则表示客户端成功连接redis服务端
切换数据库
select 数字 数字范围是0-databases最大值减1
默认是在select 0
help 命令名 查看此命令的使用帮助
配置信息在/etc/redis/redis.conf
bind 127.0.0.1 如果需要远程访问,可将此行注释或者绑定一个真实ip
port 6379 端口号,默认6379
daemonize yes 设置以守护进程运行,no为非守护进程
如果以守护进程运行,则不会在命令行阻塞,类似于服务,保证了redis服务在后台的稳定运行
如果以非守护进程运行,则当前终端被阻塞
databases 16 redis默认有16个数据库
logfile 日志路径
dbfilename dump.rdb 数据文件,默认存放在家目录下
dir /var/lib/redis 数据文件存储路径
slaveof 主从复制,类似于双机备份
redis是key:value的数据结构,每条数据都是一个键值对
键的类型的字符型,且不能重复
值的类型可以有一定的数据结构,可以为字符串string、列表list、哈希hash、集合set、有序集合zset
在redis中字符串类型的value最多可以容纳的数据长度是512M
set 设置
set name LiKang
set age 22
get 获取
get name
get age
del 删除
del name
del age
插入的时候设置key的过期时间
setex key 秒数 value
ttl key 查看此key的有效期,-1为永久存在
mset 设置多个key-value
mset name Liang age 22 注意:如果后面还设置了name之前name的值会被覆盖
mget key1 key2 获取多个值
append 追加
append key value
del key1 key2 删除此key的键值对
keys * 查看都有哪些key
keys a* 查看a开头的key
exists key 查看key是否存在,1则存在,0则不存在
type key 查看此key的value的类型
expire key 秒数 给key设置过期时间
key的值为 属性:值,这样的键值对,属性值为string类型
hset key field value 设置
例如hset person name LiKang
hget key field 获取value值
例如hget person name
hmset key field1 value1 field2 value2 设置多个值
hmget key field1 field2 获取多个值
hgetall key 获取此key下的所有键值对
hkeys key 获取此key下的所有属性
hvals key 获取此key下的所有属性值
hdel key field1 field2 删除某个属性
del key 删除此key的键值对
更新的话再hset key field value插入就行,相同字段会自动覆盖原来数据实现更新
列表元素类型为string,且数据按照插入顺序排序,元素可以重复
lpush 从左边插入
lpush key value1 value2 返回值为key中value的个数
lrange key num1 num2 从左到右获取从num1到num2之间的元素值(包括num2),0代表第一个元素,-1代表最后一个元素,l代表list,不是left
rpush 从右边插入
rpush key value1 value2 返回值为key中value的个数
无rrange命令
lrem key count value 移除数据,l代表list,不是left
count:0 代表删除key中的所有值为value的元素
count>0 删除左边的值为value的元素,删除的个数是count
count<0 删除右边的值为value的元素,删除的个数是count
lset key 下标 value 更新数据
linsert key before(after) value1 value2 在value1的前面(后面)插入value2
无序集合,元素为string类型,元素具有唯一性,不重复,对于集合没有修改操作
sadd key member1 member2 增加数据
smembers key 获取数据
srem key member 移除数据
有序集合,元素类型为string,元素具有唯一性,不重复,每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序,且没有对于集合修改操作
zadd key score1 member1 score2 member2 增加数据
如果score的值已经存在,则会将新元素插入到与它score值相同的元素的后面或者前面
如果member的值已经存在,则会修改其socre的值为新值
zrange key num1 num2 获取num1到num2之间的数据(包括num2)
zrangeby score key min max 获取score值在min到max之间的成员(包括min和max)
zscore key member 返回member的score值
zrem key member1 member2 删除指定元素
zremrangebyscore key min max 删除score值在min到max范围内的元素(包括min和max)
一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成来强大的多级服务器集群架构。
master用来写数据,slave用来读数据,经统计,网站的读写比率是10:1,也就是11个用户中只有一个用户在写数据。
通过主从配置可以实现读写分离。
查看当前主机的ip地址 ifconfig
修改/etc/redis/redis.conf文件 bind 当前主机ip
重启redis服务
sudo service redis stop
sudo redis-server redis.conf
复制/etc/redis/redis.conf文件 sudo cp redis.conf ./slave.conf
修改slave.conf文件
bind 主机ip (如果是和主服务器为不同电脑,绑定本机ip即可)
port 6378
添加一行slaveof 当前主机ip 主服务器端口(默认6379)
启动redis服务 sudo redis-server slave.conf
查看主从关系 redis-cli -h 当前主机ip info Replication
PS:主服务器可读写,从服务器只能读,且主从服务器数据可同步显示
启动redis-cli -h 主机ip -p 端口号
虽然一主可以多从,但如果同时的访问量过大(1000w),主服务肯定就会挂掉;获取发生自然灾难,数据服务就挂掉了
大公司都会有很多的服务器。
集群是一组相互独立的,通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户端与集群相互作用时,集群像是一个独立的服务器,集群配置是用于提高可用性和可缩放性。当请求到来时首先由负载均衡服务器处理,把请求转发到另外的一台服务器上。
软件层面:只有一台电脑,在这一台电脑上启动了多个redis服务
硬件层面:存在多台实体的电脑,每台电脑上都启动了一个redis或者多个redis服务
在一台ubuntu机器上面搭建集群
在Desktop目录下创建一个文件夹“redis_cluster",在此文件夹下创建7000.conf,内容如下
# 端口号
port 7000
# 主机ip
bind 192.168.37.129
# 是否以守护(后台)进程方式运行
daemonize yes
# pid文件
pidfile 7000.pid
# 是否使用集群
cluster-enabled yes
# 集群的文件
cluster-config-file 7000_node.conf
# 集群的超时时间
cluster-node-timeout 15000
# 备份相关
appendonly yes
在”redis_cluster“文件夹下创建7001.conf、7002.conf,除了7000改一下之外,内容和上面一样
和配置机器1一样,在Desktop目录下创建redis_cluster文件夹,里面创建7003.conf、7004.conf、7005.conf,除了把主机ip和7000改一下之外,其他内容都一样。
但是这里只有一台机器,所以也将7003.conf、7004.conf、7005.conf两个文件放在了机器1上
先在redis_cluster文件夹下启动redis服务
sudo redis-server 7000.conf
sudo redis-server 7001.conf
sudo redis-server 7002.conf
sudo redis-server 7003.conf
sudo redis-server 7004.conf
sudo redis-server 7005.conf
redis的安装包中包含了redis-trib.rb,用于创建集群
接下来的操作在机器1上进行
将命令复制,这样可以在任何目录下调用此命令
sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/
安装ruby环境,因为redis-trib.rb是用ruby开发的
sudo apt-get install ruby
创建集群(必须先开启redis服务)
–replicas 1 表示创建的集群模式是“一主一从”,共三个节点(Node)
redis-trib.rb create --replicas 1 192.168.37.129:7000 192.168.37.129:7001 192.168.37.129:7002 192.168.37.129:7003 192.168.37.129:7004 192.168.37.129:7005
5.0版本抛弃了redis-trib
直接运行如下命令,–cluster-replicas 1 表示创建的集群模式是“一主一从”,共三个节点(Node)
redis-cli --cluster create 192.168.37.129:7000 192.168.37.129:7001 192.168.37.129:7002 192.168.37.129:7003 192.168.37.129:7004 192.168.37.129:7005 --cluster-replicas 1
(0 slots)为slave服务,不是0的为master服务(redis 5.0之前的版本不管是slave还是master都显示为master)
redis-cli -h 主机ip -p 端口号 -c
get key 获取数据,如果数据不在当前节点会自动重定向
在插入数据时,如果是连接的是从服务器,则会通过CRC16算法重定向到其他的一个主服务器进行插入。
如果是连接的是主服务器,也会通过CRC16算法重定向到其他的一个主服务器进行插入。
集群中每个节点都是平等的关系,每个节点都保存了各自的数据和整个集群的状态,每个节点和其他所有节点连接,而且这些连接保持活跃,保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。
集群会把数据存在一个master节点,然后在这个master和其对应的slave之间进行数据同步,只有当一个master挂掉之后,才会启动一个对应的slave节点,充当master
必须要有三个或者以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。