Redis的部署及使用
Redis
Memcached与Redis的对比
Memcached:
优点:
1. 纯set get性能好
2. 开发都会用,易用简单
4. 可用于存放session
缺点:
1. 不支持持久化
2. 支持类型单一
3. 没有验证
4. 依靠magent
Redis:
优点:
1. 持久化
2. 支持集群
3. 有基础验证
4. 支持多种数据类型
5. 可用于购物车
缺点:
1. 性能不如memcached
解决方案:1.写两份 2.预刷新(写个脚本,把常用的数据放到redis里卖)
redis官网:https://redis.io/
安装部署redis
系统要求:
linux:CentOS7
memory:2G+
ip address:192.168.1.5
zookeeper:3.4.10
redis:redis-3.2.9
java version:1.8.0_131
下载redis的源码安装包
# cd /usr/local/src && wget -c http://download.redis.io/releases/redis-3.2.9.tar.gz
解压redis的源码安装包
# tar -zxvf redis-3.2.9.tar.gz
切换到redis的源码安装目录
# cd redis-3.2.9/
安装redis
# make PREFIX=/usr/local/redis-3.2.9 install
最佳实现方式,创建redis的软连接
# ln -sv /usr/local/redis-3.2.9/ /usr/local/redis
复制redis的启动脚本到init.d下作为开机自启动脚本使用
# cp /usr/local/src/redis-3.2.9/utils/redis_init_script /etc/init.d/redis
修改redis的启动脚本
# vim /etc/init.d/redis
修改内容如下,修改EXEC、CLIEXEC的启动路径
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
添加执行权限
# chmod +x /etc/init.d/redis
创建redis脚本中指定的redis.conf配置文件的路径
# mkdir /etc/redis
复制redis.conf到脚本指定的路径下
# cp /usr/local/src/redis-3.2.9/redis.conf /etc/redis/6379.conf
修改网络最大支持链接数为512(默认为128)
# echo 512 > /proc/sys/net/core/somaxconn
创建redis所需目录
# mkdir -p /var/lib/redis_6379
编辑redis.conf配置文件
# vim /etc/redis/6379.conf
修改配置文件中的配置为以下配置
daemonize yes
logfile "/var/log/redis_6379.log"
dbfilename dump_6379.rdb
dir /var/lib/redis_6379
requirepass demon
注意:
daemonize: 支持后台运行
logfile: 指定redis的log日志存放
requirepass:指定用户密码,避免root用户启动redis提权,密码自己设置
启动redis服务
# /etc/init.d/redis start
看一眼redis的日志,根据警告可以自行调试
# tail /var/log/redis_6379.log
调试redis日志中的警告信息
# sysctl vm.overcommit_memory=1
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
删除redis的pid文件,重启redis
# rm -rf /var/run/redis_6379.pid
# /etc/init.d/redis stop
# /etc/init.d/redis start
启用redis的client测试redis
# /usr/local/redis/bin/redis-cli -a demon
输入info即可查看redis的相关信息
127.0.0.1:6379> info
# Server
redis_version:3.2.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:6fc178b1c807c960
redis_mode:standalone
os:Linux 3.10.0-327.el7.x86_64 x86_64
..............
Redis基础数据类型
redis中文教程
http://doc.redisfans.com/index.html
Redis的基本增删改查
另外一种客户端链接redis验证的方法
# /usr/local/redis/bin/redis-cli
String实现键值段
127.0.0.1:6379> auth demon
OK
设置一个key名称为name,键值为demon的数据
127.0.0.1:6379> set name demon
OK
获取key为name的数据
127.0.0.1:6379> get name
"demon"
获取redis中所有的键名称(生产中不建议使用)
127.0.0.1:6379> keys *
1) "name"
判断redis中的键是否存在(返回1即存在,0为不存在)
127.0.0.1:6379> exists name
(integer) 1
修改name键的数据
127.0.0.1:6379> set name demon_gdy
OK
127.0.0.1:6379> get name
"demon_gdy"
查看数据类型
type name
删除一个已存在的键
127.0.0.1:6379> del name
(integer) 1
Hash实现键值段
类似于python中的字典嵌套字典的方式(hash)
127.0.0.1:6379> hset car name BMW
(integer) 1
127.0.0.1:6379> hset car price 10RMB
(integer) 1
注意:
car是一个键,对应了两个值,分别又是一队键值段,price作为另外一个car中的key,对应了10RMB的值,name同样也是这样,类似于python中的
{'car':{'name':'BMW','price':'10RMB'}}
查看car键中的键
127.0.0.1:6379> hkeys car
1) "name"
2) "price"
查看car键中有几个元素
127.0.0.1:6379> hlen car
(integer) 2
获取数据car键中的数据
127.0.0.1:6379> hget car name
"BMW"
127.0.0.1:6379> hget car price
"10RMB"
删除car中的key为price对应的值
127.0.0.1:6379> hdel car price
(integer) 1
删除car中的所有key,包括car..
del car
List实现键值段
从开头开始添加键值(从左到右)
127.0.0.1:6379> lpush numbers 1
(integer) 1
127.0.0.1:6379> lpush numbers 2
(integer) 2
从后往前添加键值(从右到左)
127.0.0.1:6379> rpush numbers 9
(integer) 3
127.0.0.1:6379> rpush numbers 10
(integer) 4
查看numbers key的长度
127.0.0.1:6379> llen numbers
(integer) 4
查看numbers中指定范围的数据
127.0.0.1:6379> lrange numbers 0 4
1) "2"
2) "1"
3) "9"
4) "10"
查看列表中对应位置的数据(和python中的list一样,元素的索引从0开始)
127.0.0.1:6379> lindex numbers 2
"9
在列表中指定的数据前或后插入数据
127.0.0.1:6379> linsert numbers before 9 8
(integer) 5
127.0.0.1:6379> linsert numbers after 10 11
(integer) 6
注意:
before|after 后面跟的是list中已存在的元素,最后一个是要插入的数据
127.0.0.1:6379> lrange numbers 0 6
1) "2"
2) "1"
3) "8"
4) "9"
5) "10"
6) "11"
numbers中从后删除一个数据
127.0.0.1:6379> rpop numbers
"11"
numbers中从开头删除一个数据
127.0.0.1:6379> lpop numbers
"2"
Set实现键值段
创建一个country的集合,在里面添加如下值
127.0.0.1:6379> sadd country china
(integer) 1
127.0.0.1:6379> sadd country america
(integer) 1
127.0.0.1:6379> sadd country canada
(integer) 1
创建一个diff_country的集合,在里面添加如下值
127.0.0.1:6379> sadd diff_country china
(integer) 1
127.0.0.1:6379> sadd diff_country japan
(integer) 1
127.0.0.1:6379> sadd diff_country england
(integer) 1
127.0.0.1:6379> sadd diff_country canada
(integer) 1
查看country的类型
127.0.0.1:6379> type country
set
获取集合中的元素
127.0.0.1:6379> SMEMBERS country
1) "america"
2) "canada"
3) "china"
127.0.0.1:6379> SMEMBERS diff_country
1) "japan"
2) "canada"
3) "china"
4) "england"
查看一个元素是否在集合中(返回1为真,0为假)
127.0.0.1:6379> SISMEMBER country china
(integer) 1
127.0.0.1:6379> SISMEMBER country chinaaaa
(integer) 0
集合中做差集(country中有diff_country中没有的元素)
127.0.0.1:6379> sdiff country diff_country
1) "america"
集合中做交集(country与diff_country中共有的元素)
127.0.0.1:6379> SINTER country diff_country
1) "canada"
2) "china"
集合中的并集
127.0.0.1:6379> SUNION country diff_country
1) "canada"
2) "china"
3) "england"
4) "america"
5) "japan"
Redis持久化
Redis 提供了多种不同级别的持久化方式:
- RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
- AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。
- Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。
- 你甚至可以关闭持久化功能,让数据只在服务器运行时存在。
建议调优参考文档:http://doc.redisfans.com/topic/persistence.html
redis主从复制,配置一个从服务器非常简单, 只要在配置文件中增加以下的这一行就可以了:
slaveof 192.168.1.1 6379
Redis集群实现方式
架构图
解决方案实例
https://github.com/CodisLabs/codis
部署Codis
Codis使用安装文档
https://github.com/CodisLabs/codis/blob/release3.2/doc/tutorial_zh.md
安装Go运行环境
# yum install -y gcc glibc gcc-c++ make git
# cd /usr/local/src
下载golang的源码包
# wget -c https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
解压golang源码包
# tar -zxvf go1.8.3.linux-amd64.tar.gz
移动解压目录到/usr/local下
# mv go /usr/local/
创建GOPATH环境
# mkdir /usr/local/go/work
# echo "export GOROOT=/usr/local/go" >> /etc/profile.d/golang.sh
# echo "export GOPATH=/usr/local/go/work" >> /etc/profile.d/golang.sh
# echo "PATH=$PATH:$HOME/bin:$GOROOT/bin:$GOPATH/bin" >> /etc/profile.d/golang.sh
重新加载配置文件
# source /etc/profile.d/etc/profile.d/golang.sh
监测go环境
# go version
go version go1.8.3 linux/amd64
下载go所需要的工具包
# go get -u -d github.com/CodisLabs/codis
# go get github.com/tools/godep
切换到go的目录下
# cd $GOPATH/src/github.com/CodisLabs/codis
编译测试codis的安装环境
# make && make gotest
启动codis-dashboard
# ./admin/codis-dashboard-admin.sh start
查看日志
# tail -100 ./log/codis-dashboard.log.2017-06-18
启动codis-proxy
# ./admin/codis-proxy-admin.sh start
启动codis-server
# ./admin/codis-server-admin.sh start
启动codis-fe
# ./admin/codis-fe-admin.sh start
部署zookeeper
参考文档
https://www.unixhot.com/article/32
下载zookeeper的源码包
# cd /usr/local/src && wget -c http://apache.claz.org/zookeeper/stable/zookeeper-3.4.10.tar.gz
解压zookeeper的源码包
# tar -zxvf zookeeper-3.4.10.tar.gz
移动zookeeper的目录到/usr/local下
# mv zookeeper-3.4.10 /usr/local/
最佳实现方式软连接
# ln -sv /usr/local/zookeeper-3.4.10/ /usr/local/zookeeper
重命名配置文件
# cd /usr/local/zookeeper/conf/
# cp zoo_sample.cfg zoo.cfg
编辑zookeeper的配置文件
# vim zoo.cfg
修改配置如下,在文件的尾部添加后四行内容
dataDir=/data/zk1
clientPort=2181
server.1=192.168.1.5:3181:4181
server.2=192.168.1.5:3182:4182
server.3=192.168.1.5:3183:4183
复制三份配置文件
# cp zoo.cfg zk1.cfg
# cp zoo.cfg zk2.cfg
# cp zoo.cfg zk3.cfg
修改配置文件中的配置
# sed -i 's/zk1/zk2/g' zk2.cfg
# sed -i 's/2181/2182/g' zk2.cfg
# sed -i 's/zk1/zk3/g' zk3.cfg
# sed -i 's/2181/2183/g' zk3.cfg
zookeeper伪集群实现
创建三个目录用来存放zookeeper数据
# mkdir -p /data/{zk1,zk2,zk3}
写入伪数据
# echo "1" >/data/zk1/myid
# echo "2" >/data/zk2/myid
# echo "3" >/data/zk3/myid
启动zookeeper
# /usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/conf/zk1.cfg
# /usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/conf/zk2.cfg
# /usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/conf/zk3.cfg
查看Zookeeper角色
# /usr/local/zookeeper/bin/zkServer.sh status /usr/local/zookeeper/conf/zk1.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/conf/zk1.cfg
Mode: follower
# /usr/local/zookeeper/bin/zkServer.sh status /usr/local/zookeeper/conf/zk2.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/conf/zk2.cfg
Mode: leader
# /usr/local/zookeeper/bin/zkServer.sh status /usr/local/zookeeper/conf/zk3.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/conf/zk3.cfg
Mode: follower
注意:
如果查看角色中出现报错,尝试更改端口号,修改zk*.cfg的配置文件,然后修改端口在尝试重启服务
连接Zookeeper
# /usr/local/zookeeper/bin/zkCli.sh -server 192.168.1.5:2183
zookeeper的最新稳定版有些变化,还在调试ing..未完待续...
Redis的部署及使用的更多相关文章
- Redis笔记(二)Redis的部署和启动
Linux下Redis的部署和启动 下载安装介质 Redis官网地址:http://www.redis.io/目前最新版本是redis-3.0.3. 可以访问 http://download.redi ...
- Redis分布式部署,一致性hash
一致性哈希 由于hash算法结果一般为unsigned int型,因此对于hash函数的结果应该均匀分布在[0,2^32-1]区间,如果我们把一个圆环用2^32 个点来进行均匀切割,首先按照hash( ...
- Window Redis分布式部署方案 java
Redis分布式部署方案 Window 1. 基本介绍 首先redis官方是没有提供window下的版本, 是window配合发布的.因现阶段项目需求,所以研究部署的是window版本的,其实都 ...
- windows下安装Redis并部署成服务
windows下安装Redis并部署成服务 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 一:下载 下载地址: windows版本: http ...
- 第一章· Redis入门部署及持久化介绍
Redis简介 Redis安装部署 Redis持久化 Redis简介 软件说明: Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品. ...
- VMware虚拟机安装CentOS6.4、部署web项目全过程(设置固定IP、安装JDK、Tomcat、Redis、部署项目)
概述:该篇随笔介绍了在VMware上安装centOS.在centOS上安装JDK.安装Tomcat.安装Redis并部署项目的全过程,虽然参考了很多优秀的文章,但实践.整理.补充都很用心,若要复制粘贴 ...
- Redis 主从部署
Redis 主从部署 http://www.xuchanggang.cn/archives/978.html
- Redis单机部署、添加开机自启、配置参数
1.Redis简介 redis是使用C语言编写的开源的,支持网络,基于内存,可持久性的键值对存储数据库,2013年5月之前,Redis是最流行的键值对存储数据库,Redis采用内存数据集,支持多种数据 ...
- Redis的部署使用文档
Redis的部署使用文档 简述: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符 串).list(链表).set( ...
- Redis入门部署及持久化
软件简介 软件说明 Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品. Redis采用内存(In-Memory)数据集(DataSe ...
随机推荐
- linux安装oracle笔记
linux安装oracle .增大swap空间,内存大于8G后swap跟内存同等大小即可 mkdir /home/swap cd /home/swap mkswap swapfile swapon s ...
- mysql生成百万级数量测试数据
今天因为项目需要,想测试一下读取百万级数量数据的速度如何,无奈数据库没有现成符合要求的数据,网上百度一番有很都不错的文章,但是需要涉及到一些存储过程和用php代码什么的,虽说可以实现,但是感觉另外再弄 ...
- 【linux相识相知】用户及权限管理
linux系统是多用户(Multi-users)和多任务(Multi-tasks)的,这样的目的是为了一台linux主机可以给很多用户提供服务同时运行多种服务,但是我们是怎么区分每个用户呢?作为一个管 ...
- java 网络编程 UDP TCP
网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信....网页编程: ...
- 在react.js上使用antd-design没有样式
两种解决方法: 第一种: 在.babelrc中加入 { "presets": ["es2015", "react"], "plug ...
- MongoDB数据库聚合
前面的话 聚合操作主要用于对数据的批量处理,将记录按条件分组以后,然后再进行一系列操作,例如,求最大值.最小值.平均值,求和等操作.聚合操作还能够对记录进行复杂的操作,主要用于数理统计和数据挖掘.在 ...
- solr6.3 + Hbase Indexer使用MR创建索引,错误Bad return type
使用solr6.3 + Hbase Indexer ,通过Hbase-indexer从Hbase建立索引到solr中,进行全文搜索. 两种实现方式:① 开启hbase-indexer进行实时同步新数据 ...
- 大数据Python学习大纲
最近公司在写一个课程<大数据运维实训课>,分为4个部分,linux实训课.Python开发.hadoop基础知识和项目实战.这门课程主要针对刚从学校毕业的学生去应聘时不会像一个小白菜一样被 ...
- js冒泡排序,数组去重
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- FillConsoleOutputAttribute 函数--指定区域填充控制台输出属性
FillConsoleOutputAttribute函数 来源:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682663(v= ...