关键字,redis安装使用,redis 主从,redis 哨兵 sentinel,redis 集群, redis cluster,jedis
redis是如今被互联网公司使用最广泛的一个中间件,我们打开GitHub搜索redis,边可以看到,该项目的介绍是这样的:
Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, HyperLogLogs, Bitmaps.从这句话中,我们可以提取其特性的关键字:
in-memory database ,内存数据库
support:Strings , lists, sets ,hashes ,hyperloglogs, bitmaps
也就是高性能,支持数据类型多。本文假设你已经了解redis的基本使用,进而讨论redis的单点,高可用,集群。
redis 安装及配置redis的安装十分简单,打开redis的官网 。
下载一个最新版本的安装包,如 redis-version.tar.gz
解压 tar zxvf redis-version.tar.gz
执行 make (执行此命令可能会报错,例如确实gcc,一个个解决即可)
如果是 mac 电脑,安装redis将十分简单执行brew install redis即可。
安装好redis之后,我们先不慌使用,先进行一些配置。打开redis.conf文件,我们主要关注以下配置:
port 6379 # 指定端口为 6379,也可自行修改 daemonize yes # 指定后台运行 redis 单点安装好redis之后,我们来运行一下。启动redis的命令为 :
redishome/bin/redis-server path/to/redis.config
假设我们没有配置后台运行(即:daemonize no),那么我们会看到如下启动日志:
93825:C 20 Jan 2019 11:43:22.640 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 93825:C 20 Jan 2019 11:43:22.640 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=93825, just started 93825:C 20 Jan 2019 11:43:22.640 # Configuration loaded 93825:S 20 Jan 2019 11:43:22.641 * Increased maximum number of open files to 10032 (it was originally set to 256). _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 5.0.3 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6380 | `-._ `._ / _.-' | PID: 93825 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-'无论是否配置了后台运行,启动成功之后,我们可以新开一个命令行窗口来操作试试。
在命令窗口操作redis使用命令:telnet localhost 6379 来连接redis,或者你可以直接使用代码来连接测试。连接之后,看到如下信息:
Connected to localhost. Escape character is '^]'.我们输入几个命令试试:
set hello world 设置key-value get hello 获取key值 expire hello 10 设置10秒过期 ttl hello 查看过期时间 del hello 删除key如此,我们便体验了一把redis,可以说是非常简单了。刚才我们是使用命令行来操作redis的,下面我们来使用代码操作一下redis,以Java为例,我们使用一个开源的 java - redis客户端。
使用jedis客户端操作redis打开GitHub,搜索redis,进入到项目主页之后,我们可以看到使用方法:
加入jedis依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.0.0</version> <type>jar</type> <scope>compile</scope> </dependency>
编写代码如下
Jedis jedis = new Jedis("localhost",6379); jedis.set("hello", "world"); String value = jedis.get("hello"); System.out.println(value); // get world jedis.del("hello"); System.out.println(jedis.get("hello"));// get null 使用spring-redis操作上面jedis操作redis的例子很简单,除了使用jedis之外,还可以使用spring-redis。步骤如下
配置redis
<bean p:use-pool="true"/> <!-- redis template definition --> <bean p:connection-factory-ref="jedisConnFactory"/>
编写代码
public class Example { // inject the actual template @Autowired private RedisTemplate<String, String> template; // inject the template as ListOperations // can also inject as Value, Set, ZSet, and HashOperations @Resource(name="redisTemplate") private ListOperations<String, String> listOps; public void addLink(String userId, URL url) { listOps.leftPush(userId, url.toExternalForm()); // or use template directly redisTemplate.boundListOps(userId).leftPush(url.toExternalForm()); } } redis 主从上面我们启动了一台redis,并对其进行操作。当然这只是实验性的玩玩。假设我们生产环境使用了一台redis,redis挂了怎么办?如果等到运维重启redis,并恢复好数据,可能需要花费很长时间。那么在这期间,我们的服务是不可用的,这应该是不能容忍的。假设我们做了主从,主库挂了之后,运维让从库接管,那么服务可以继续运行,正所谓有备无患。
redis主从配置非常简单,过程如下(ps 演示情况下主从配置在一台电脑上):