Redis学习笔记
前言
搭建集群前许自行下载Redis,本文以redis-3.2.11为例,操作系统为linux CentOS 6.5,安装redis集群需要版本号在3.0以上,redis-cluster安装前需要安装ruby环境。
ruby安装教程请参考: https://blog.csdn.net/weixin_42231507/article/details/81128664
redis安装教程请参考: https://blog.csdn.net/qq_35322211/article/details/81384180
Redis数据类型
redis作为缓存可以在内存中存储value有五种数据类型;
1、string字符串类型
key=value
2、hash面向对象的存储方式
key=user:{name:gavin,gender:male}
3、list链表
key=[100,200,300,400]
4、set集合
key={100,400,600,300,200}
5、zset有序集合
key={100,200,300,400,600}
string类型的基础命令
1、keys *:查看redis中所有的key-value数据
2、set key value: 存放一个string类型的value数据,利用key来保存
3、get key :获取string类型的数据
4、select整数(默认0~15):单节点时redis默认会进行分库操作,
每个库和其他的数据不连通;当前总是默认使用0号库
5、exists key:判断key值否存在;
get也能完成exists的功能,那get和exists在判断key值是否存在
有什么区别?
get做了数据读取操作,在生产环境中value值可能存储着
大量数据max=512M,若判断是否存在,没必要把这些数据
都读取一遍(当存在时),使用exists效率高;
6、del key :删除key对应的value数据对
7、type key:查看value的数据类型
8、help 命令名称:查看命令的使用方式
9、save [dump.rdb]:将内存数据写到dump文件,可指定dump文件
redis可持久化的类型:rdb模式
调用save命令,可以将当前redis的数据写出到配置的dump文件
10、flushall: 命令用于清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。
11、flushdb:清空当前库的内存数据
12、incr key:自增(decr key自减),key对应的value时string,
但必须时数字,步长为1
13、incrby key num:指定步长(num)自增,decrby key num指定步长自减
14、append key value:追加指定key的value数据,修改数据可以使用set命令覆盖
15、expire key seconde:超时时间seconde为秒值,设定key的超时时间
补充:redis有自动删除数据的逻辑,“最近最久未使用LUR”,对于
满足最近最久未使用规则的数据及时未超时也删除;
16、ttl key:查看key的超时时间
大于0–剩余时间
永久数据:记录时间-1
超时数据:记录时间-2
hash类型的基础命令
1、hset key field value :设置一个hash结构的一条数据
127.0.0.1:6379> hset user gender male
(interger) 1
127.0.0.1:6379> hget user gender
"male"
2、hget key field :获取一个hash结构数据的某个属性值
3、hexists key:判断hash结构的key是否存在
4、hvals hkeys key:获取所有属性值
5、hlen key:获取hash结构数据的属性个数
list类型的基础命令
1、lpush key value :从左侧将value数据添加到list结构数据中
2、lrange key:起始位置 结束位置(从0到-1为展示所有)
3、rpush key value:从右侧将value数据添加到list结构数据中
4、linsert key after|before pivot value:插入数据
before–将value插入到pivot的左侧
after–将value插入到pivot的右侧
pivot–链表中已有元素
value–需要插入的数据
5、lset key index value:设置下标中的元素值,index从0开始
6、lrem key count|-count|0 value:删除相同的值,count为删除
数量,注意如需倒序删除count需小于0,当count等于0为全部删除
7、ltrim key beginindex endindex:指定下标范围删除数据从0开始
8、lpop key:从list左侧删除元素
9、rpop key:从list右侧删除元素
10、rpoplpush key1 key2:将第一个list尾部元素添加到第二个list头部
11、llen key :返回list元素个数
redis搭建
redis实战集群搭建,redis.conf的配置:
1、P61 bind 127.0.0.1 //默认ip,表示只能本地访问,若希望其他机器可以访问,请注释此行,但登录时需要加 -h 登录机ip ;
2、P80 protected-moode no //默认yes–开启保护机制,即登录redis需要密码,no–不开启
3、P84 port 8000 //端口
4、P128 daemonize yes // 后台运行
5、P150 pidfile /var/run/redis_8000.pid //pidfile进程文件
6、P163 logfile 8000/rediis.log //相对路径,启动时在redis的根目录,记录操作redis的所有日志记录
7、P237 dump dump8000.rdb //指定当前服务加载的持久化文件
8、P593 appendonly yes //默认是rdb方式,即只支持dump持久化方式,yes表示开启aof持久化方式
9、P597 appendfilename “appendonly8000.aof” 指定一个持久化文件
10、P721 cluster-enabled yes //加载当前配置文件的redis服务一旦启动需要开启集群模式,否则无法使用集群的策略和逻辑
11、P730 cluster-config-file nodes_8000.conf //集群配置启动后,将记录当前服务器上唯一的一个集群状态
12、cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
dump和aof持久化策略
1、aof事实存储,IO一直开启;
2、dump为手动保存,调用save命令进行保存;
redis有16384个槽道。
1、集群中每一个节点上都有一个二进制位序列(16384个bit,“下标”为0~16383;
二进制不具备下标的性质,但可以通过位移计算出每个bit的位置值)
2、二进制位系列的每个下标与redis中16384个槽道的槽道号相对应
3、如果当前节点二进制位系列中的二进制值为1,表示当前节点拥有该下标值
对应槽道号的槽道管理权
4、每个节点的二进制位系列值均一样,即一个槽道只被一个主节点所管理
5、每个从节点的二进制位系列值全是0,即从节点没有槽道管理权限
6、每个节点存储着一个数组,有16384个元素对应16384个槽道,每个元素值为
当前槽道的所属管理者节点对象的引用,这个引用指向槽道管理者节点对象信息,通过节点对象信息可以找到管理者节点。
7、redis-server redis.conf 启动redis服务,redis.conf 指定配置文件相对路径
8、使用src目录下的redis-trib.rb create [–replicas 1] ip:port [ip:port] 命令创建集群并分配槽道号;–replicas 1 表示为每一个主节点分配一个从节点
9、redis-cli [-c] [-h host] -p port 登录redis客户端,-c为集群模式,本地启动-h可省略,-p指定登陆端口
10、登录后使用cluster nodes查看集群节点槽道状态,cluster info 查看当前节点状态
11、使用src目录下的redis-trib.rb add-node ip:port ip:port 新增节点默认为主节点,但因槽道已分配完,所以该节点没有槽道,不能存储数据
12、edis-trib.rb add-node --slave --master-id 新增一个从节点,例如 把端口8004的节点添加为8000的从节点.
redis-reib.rb add-node --slave --master-id a5eb085fd1e96e80766e15f66a581518c13de033 192.168.41.101:8003 192.168.41.101:8000
12、redis-trib.rb reshard 192.168.41.101:8000 表示重新分配槽道信息,后面的节点信息为已经存在的任意节点信息
13、redis-trib.rb reshard ip:post 给空节点分配槽道,步骤如下图

以上是以8000为端口的配置,在学习或测试时,同一台服务器上搭建多个节点集群,需要用不同的端口,配置文件不同之处在于把端口8000改为其他端口,如8001、8002、8003…
#vim 全部替换命令
:%s/8000/8001/g
哈希一致性
图片:

1341

被折叠的 条评论
为什么被折叠?



