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的部署及使用的更多相关文章

  1. Redis笔记(二)Redis的部署和启动

    Linux下Redis的部署和启动 下载安装介质 Redis官网地址:http://www.redis.io/目前最新版本是redis-3.0.3. 可以访问 http://download.redi ...

  2. Redis分布式部署,一致性hash

    一致性哈希 由于hash算法结果一般为unsigned int型,因此对于hash函数的结果应该均匀分布在[0,2^32-1]区间,如果我们把一个圆环用2^32 个点来进行均匀切割,首先按照hash( ...

  3. Window Redis分布式部署方案 java

    Redis分布式部署方案 Window 1.    基本介绍 首先redis官方是没有提供window下的版本, 是window配合发布的.因现阶段项目需求,所以研究部署的是window版本的,其实都 ...

  4. windows下安装Redis并部署成服务

    windows下安装Redis并部署成服务 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 一:下载 下载地址: windows版本: http ...

  5. 第一章· Redis入门部署及持久化介绍

    Redis简介 Redis安装部署 Redis持久化 Redis简介 软件说明: Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品. ...

  6. VMware虚拟机安装CentOS6.4、部署web项目全过程(设置固定IP、安装JDK、Tomcat、Redis、部署项目)

    概述:该篇随笔介绍了在VMware上安装centOS.在centOS上安装JDK.安装Tomcat.安装Redis并部署项目的全过程,虽然参考了很多优秀的文章,但实践.整理.补充都很用心,若要复制粘贴 ...

  7. Redis 主从部署

    Redis 主从部署 http://www.xuchanggang.cn/archives/978.html

  8. Redis单机部署、添加开机自启、配置参数

    1.Redis简介 redis是使用C语言编写的开源的,支持网络,基于内存,可持久性的键值对存储数据库,2013年5月之前,Redis是最流行的键值对存储数据库,Redis采用内存数据集,支持多种数据 ...

  9. Redis的部署使用文档

    Redis的部署使用文档   简述: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符 串).list(链表).set( ...

  10. Redis入门部署及持久化

    软件简介 软件说明 Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品. Redis采用内存(In-Memory)数据集(DataSe ...

随机推荐

  1. VB6之GIF分解

    原文链接:http://hi.baidu.com/coo_boi/item/1264a64172fe8dec1f19bc08 还是找了个C++的翻译下,原文链接:http://www.360doc.c ...

  2. gradle的安装,配置,构建,研究,初体验......(入职一周研究的第一个大知识点)

    (1)Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置.更 ...

  3. POJ 2502 Subway-经过预处理的最短路

    Description You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. Instead of ...

  4. 自制权限框架(一)jsp标签

    一.概述 在我们的系统中,很多时候都用到了权限.最简单的权限就是登录.登录了,我就可以自己的相关信息:没有登录,就不能看到. 目前比较流行的权限框架就是apache shiro和spring secu ...

  5. 如何查看安装的sql server是什么版本

    方法 1:通过使用 SQL Server Management Studio 中的对象资源管理器连接到服务器.连接对象资源管理器后,它将显示版本信息(在括号中),以及用于连接到 SQL Server ...

  6. C# Web.config配置

    使用 <!--M002 バッチを起動のPath配置--> <add key="BM0002_START_PATH" value="D:\BM0002\B ...

  7. Nodejs cluster模块深入探究

    由表及里 HTTP服务器用于响应来自客户端的请求,当客户端请求数逐渐增大时服务端的处理机制有多种,如tomcat的多线程.nginx的事件循环等.而对于node而言,由于其也采用事件循环和异步I/O机 ...

  8. 20170714_js闭包变量重置

    <html> <body> <script> function createFunctions(){ var result = new Array(); for ( ...

  9. hdu_1711: Number Sequence【KMP算法】

    题目链接 此次插播点笔记 hdu中点击蓝色的"Compilation Error"可以查看自己是为什么CE的 hdu中提交的话,语言选择G++可以使用<bits/stdc++ ...

  10. Java之集合初探(一)

    一.集合概述.区别 集合是一种容器,数组也是一种容器 在Java编程中,装各种各样的对象(引用类型)的叫做容器. 为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的 ...