①Redis简介
redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写。企业开发通常采用Redis来实现缓存。同类的产品还有memcache 、memcached 、MongoDB等。
②安装
- 安装gcc
Redis 是 c 语言开发的。安装 redis 需要 c 语言的编译环境。如果没有 gcc 需要在线安装。
yum install gcc-c++
2.使用yum命令安装 ruby (我们需要使用ruby脚本来实现集群搭建)
Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻组)。因为Perl发音与6月诞生石pearl(珍珠)相同,因此Ruby以7月诞生石ruby(红宝石)命名
RubyGems简称gems,是一个用于对 Ruby组件进行打包的 Ruby 打包系统
yum install ruby
yum install rubygems
3.将redis源码包上传到 linux 系统 ,解压redis源码包 /usr/local/redis
4.编译redis源码 ,进入redis源码文件夹,应该是不可以重复编译的
make
5.安装目录
make install PREFIX=/usr/local/redis
6.redis的启动
前端启动:在redis的安装目录下直接启动redis-server不常用
[root@localhost bin]# ./redis-server
后台启动:
把/../redis-3.0.0/redis.conf复制到/usr/local/redis/bin目录下
[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/
修改配置文件:
[root@localhost bin]# ./redis-server redis.conf
查看
[root@localhost ~]# ps -ef | grep redis
7.连接
[root@localhost bin]# ./redis-cli
默认连接localhost运行在6379端口的redis服务。
[root@localhost bin]# ./redis-cli -h 192.168.25.153 -p 6379
-h:连接的服务器的地址
-p:服务的端口号
关闭redis:[root@localhost bin]# ./redis-cli shutdown
搭建集群
redis-cluster投票:容错,超过半数的节点通过ping命令进行投票,反应问题节点的健康情况,有问题则查看有没有备份节点,没有的话,歇着了。。。
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.至少要有三个节点
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
将这16384个槽分布到不同的服务器上,有存操作时,通过算法算出分配的槽,进行整体均匀的分配
Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。
创建目录/usr/local/redis-cluster目录, 安装6个redis实例,分别安装在以下目录,单个只配置一个就行
/usr/local/redis-cluster/redis-1
/usr/local/redis-cluster/redis-2
/usr/local/redis-cluster/redis-3
/usr/local/redis-cluster/redis-4
/usr/local/redis-cluster/redis-5
/usr/local/redis-cluster/redis-6
以第一个redis实例为例,命令如下
make install PREFIX=/usr/local/redis-cluster/redis-1
配置集群
- 修改每个redis节点的配置文件redis.conf
修改运行端口为7001 (7002 7003 .....)
将cluster-enabled yes 前的注释去掉(632行)
2.启动每一个redis实例
cd /usr/local/redis-cluster/redis-1/bin/
./redis-server redis.conf
查看启动情况
[root@localhost ~]# ps -ef | grep redis
3.上传redis-3.0.0.gem ,安装 ruby用于搭建redis集群的脚本。
[root@localhost ~]# gem install redis-3.0.0.gem
4.使用 ruby 脚本搭建集群。
./redis-trib.rb create --replicas 1 192.168.25.135:7001 192.168.25.135:7002 192.168.25.135:7003
192.168.25.135:7004 192.168.25.135:7005 192.168.25.135:7006
连接集群
redis01/bin/redis-cli -h 192.168.25.134 -p 7001 -c
-c:代表连接的是 redis 集群
测试值的存取:
(1)从本地连接到集群redis 使用7001端口 加 -c 参数
(2)存入name值为abc ,系统提示此值被存入到了7002端口所在的redis (槽是5798)
(3)提取name的值,可以提取。
(4)退出(quit)
(5)再次以7001端口进入 ,不带-c
(6)查询name值,无法获取,因为值在7002端口的redis上
(7)我们以7002端口进入,获取name值发现是可以获取的,而以其它端口进入均不能获取
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
③Redis中的数据类型
Redis操作:通过键来管理内存中的值操作
cd /usr/local/src/redis/bin→./redis-server redis.conf
./redis-cli 此时连接的默认的localhost:127.0.0.1:6379
./redis-cli –h 192.168.25.162 –p 6379 远程连接
复习
ping 检查redis健康情况,返回PANG就OK
exit退出
数据类型(5种value的类型):string hash set list sortset
string
set str1 abc
get str1 不用遍历,直接存取,效率高。保存在内存中,以字符串进行设置,获取得到字符
incr key1 创建key1并自增后值为1,主键策略方便
decr key1 获得值并减一
keys * 查看所有的键
del key1 删除
hash:键是string,值是map(又是一个键值对)
hset key1 field1 1 设置值
hget key1 field1 获取值
hkeys key1 查看key1下所有的键
hvals key1 查看key1下所有的值
hgetall key1 查看所有键值
hdel key1 field1 删除
list:一个键对应一个list,内容可以重复
lpush list1 a b c 从左边添加元素,后进先出
rpush list2 d e f 从右边添加元素
lrange list1 0 -1 查看所有元素
lpop list1 从左边取一个元素,取出之后该元素被删除
rpop list1 从右边取一个元素,同上↑
set: 无序,不重复
sadd set1 a b c a 添加元素,并去除重复
srem set1 a 删除元素
smembers set1 查看所有元素
sdiff seta setb 去除seta中存在的setb中的元素,并返回seta其他元素
sinter seta setb 获得交集
sunion seta setb 获得并集
sortset:元素不重复,并排序过的,耗费的性能是最高的,前边是分数,后边是元素,根据分数进行升序排序
zadd zset1 1 a 2 b 3 c 添加,并根据分数进行升序排序 →a b c
zrange zset1 0 -1 查看所有记录
zrem zset1 a 删除元素
zrevrange zset1 0 -1 降序排列
zrevrange zset1 0 -1 withscores 降序排列,并获得分数
设置缓存过期时间
key *
expire key1 100 设置过期时间为100秒
ttl key1 查看剩余的过期时间,值为-1,表示永久保存,值为-2表示不存在,正数表示正在倒计时
Persist kye1 使正在倒计时的key1,永久保存
④Redis中的持久化方案
Redis的所有数据都是保存到内存中的。
Rdb:快照形式,定期把内存中当前时刻的数据保存到磁盘。Redis默认支持的持久化方案。
aof形式:append only file。把所有对redis数据库操作的命令,增删改操作的命令。保存到文件中。数据库恢复时把所有的命令执行一遍即可。
Rdb:
在redis.conf配置文件中配置。/usr/local/redis/bin/redis.conf
vim redis.conf
/save 回车 查询包含save的内容
Aof的配置:每秒进行一次磁盘操作将操作保存在bin目录下appendonly.aop中,性能低下,很少发生丢失的情况,默认不开启。还可以进行数据恢复操作:只要将redis.conf中appendonly no 改为yes,并重启redis,bin目录下就会自动生成一个appendonly.aof 的文件
两种持久化方案同时开启使用aof文件来恢复数据库。搭建集群的时候最好删除原先的appendonly.aof和dump.rdb
SecureCRT安装参考文档
本机安装目录:F:\develop_web\SecureCRT
https://www.cnblogs.com/blueberry006/p/7631694.html
https://www.cnblogs.com/yjd_hycf_space/p/7729796.html
两篇结合看,注意两点:
未破解第一次点的时候,直接点next,才能找到以下图标
SecureCRT默认上传路径有中文是无法上传的,是编码问题,改一下编码即可