啰里吧嗦redis
- linux的直接去官网下载就行了,下面都有介绍,通过make命令进行安装,看不懂英语的百度下如何使用chrome自带的翻译插件
- 下载完毕后解压,随便找个redis版本,比如redis-windows-master\redis-windows-master\downloads\redis64-3.0.501.zip解压后放到自己合适的目录下, 例E:\redis64-3.0.501
- 在解压目录下,按住shift , 鼠标右击, 选中在此处打开命令窗口, 输入命令
目录结构
E:\redis\redis64-3.0.501-6379
在此目录下 新建一个txt @echo off
redis-server.exe redis.windows.conf
@pause 重命名为startRedisServer.bat
bat结尾的是windows可识别的批处理程序 可以直接执行命令窗口的命令
@echo off DOS批处理中的,
不想显示器显示 dos批处理中 的 每条命令 , 加 echo off
“echo off”也是命令,它本身也会显示,如果连这条也不显示,就在前面加个“@”。 @本身就是一条指令,意思是跟在它后面的指令的执行及结果都不会在DOS界面上显示出来 pause暂停命令
运行该命令时,将显示消息:请按任意键继续 . . .,一般用于看清楚屏幕上显示的内容 然后新建一个txt,在E:\redis目录下
@echo off
cd redis64-3.0.501-6379
startRedisServer.bat 重命名为start6379.cmd cmd开启客户端
@echo off
cd redis64-3.0.501-6379
redis-cli
@pause

添加描述
设置服务命令 redis-server --service-install redis.windows-service.conf --loglevel verbose 卸载服务:redis-server --service-uninstall 开启服务:redis-server --service-start 停止服务:redis-server --service-stop
通过右击计算机---计算机管理--服务和应用程序--服务可查看多出了一个redis服务

添加描述
首先在pom.xml文件添加依赖,因为我用的spring框架,所以导了一个spring-data-redis,jackson包是为了能保持对象 <dependencies> <dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.6.2.RELEASE</version>
</dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.1.0</version>
</dependency> </dependencies>
#访问地址
redis.host=127.0.0.1
#访问端口
redis.port=6379
#注意,如果没有password,此处不设置值,但这一项要保留
redis.password= #最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
redis.maxIdle=300
#连接池的最大数据库连接数。设为0表示无限制
redis.maxActive=600
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWait=1000
#在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;
redis.testOnBorrow=true

目录结构
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd "> <!-- 如果在多个spring配置文件中引入<context:property-placeholder .../>标签,
最后需要加上ignore-unresolvable="true",否则会报错。 ignore-unresolvable="true"
在加载第一个property-placeholder时出现解析不了的占位符进行忽略掉 -->
<!-- 连接池基本参数配置,类似数据库连接池 -->
<context:property-placeholder location="classpath:redis.properties"
ignore-unresolvable="true" /> <!-- redis连接池 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.maxActive}" />
<property name="maxIdle" value="${redis.maxIdle}" />
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean> <!-- 连接池配置,类似数据库连接池 -->
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="${redis.host}"></property>
<property name="port" value="${redis.port}"></property>
<!-- <property name="password" value="${redis.pass}"></property> -->
<property name="poolConfig" ref="poolConfig"></property>
</bean> <!--redis操作模版,使用该对象可以操作redis -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
<property name="connectionFactory" ref="jedisConnectionFactory" />
<!--如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!! -->
<property name="keySerializer" >
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer" >
<bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
</property>
<!--开启事务 -->
<property name="enableTransactionSupport" value="true"></property>
</bean > <!-- 下面这个是整合Mybatis的二级缓存使用的
<bean id="redisCacheTransfer" class="cn.qlq.jedis.RedisCacheTransfer">
<property name="jedisConnectionFactory" ref="jedisConnectionFactory" />
</bean>--> </beans>
package com.one.redis; import java.io.InputStream;
import java.util.*; import javax.annotation.Resource; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import redis.clients.jedis.Jedis; @RunWith(SpringJUnit4ClassRunner.class)
// @ContextConfiguration("classpath:applicationContext-*.xml")
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
// 加载配置文件
@SuppressWarnings("all")
public class RedisTest { // @Autowired
// private RedisUtil redisUtil; // 1.导包
// applicationContext.xml <import resource="classpath*:conf/beans-*.xml"/>
// beans-redis.xml
// <bean id="redisTemplate"
// class="org.springframework.data.redis.core.RedisTemplate" >
@Resource(name = "redisTemplate")
private RedisTemplate redisTemplate; @Test
public void testSpringRedis() {
// stringRedisTemplate的操作
// String读写
redisTemplate.delete("myStr");
redisTemplate.opsForValue().set("myStr", "skyLine");
System.out.println(redisTemplate.opsForValue().get("myStr"));
System.out.println("---------------");
// org.springframework.data.redis.RedisConnectionFailureException:
// Cannot get Jedis connection; nested exception is
// redis.clients.jedis.exceptions.JedisConnectionException: Could not
// get a resource from the pool // List读写
redisTemplate.delete("myList");
redisTemplate.opsForList().rightPush("myList", "T");
redisTemplate.opsForList().rightPush("myList", "L");
redisTemplate.opsForList().leftPush("myList", "A");
List<String> listCache = redisTemplate.opsForList().range("myList", 0,
-1);
for (String s : listCache) {
System.out.println(s);
}
System.out.println("---------------"); // Set读写
redisTemplate.delete("mySet");
redisTemplate.opsForSet().add("mySet", "A");
redisTemplate.opsForSet().add("mySet", "B");
redisTemplate.opsForSet().add("mySet", "C");
redisTemplate.opsForSet().add("mySet", "C");
Set<String> setCache = redisTemplate.opsForSet().members("mySet");
for (String s : setCache) {
System.out.println(s);
}
System.out.println("---------------");// ABC // Hash读写
redisTemplate.delete("myHash");
redisTemplate.opsForHash().put("myHash", "BJ", "北京");
redisTemplate.opsForHash().put("myHash", "SH", "上海");
redisTemplate.opsForHash().put("myHash", "HN", "河南");
Map<String, String> hashCache = redisTemplate.opsForHash().entries(
"myHash");
for (Map.Entry entry : hashCache.entrySet()) {
System.out.println(entry.getKey() + " - " + entry.getValue());
}
System.out.println("---------------"); // Redis Incrby 命令将 key 中储存的数字加上指定的增量值,如果 key 不存在,那么 key 的值会先被初始化为 0
// ,然后再执行 INCR 操作
double stringValueDouble = redisTemplate.opsForValue().increment(
"doubleValue", 5);
System.out.println("通过increment(K key, double delta)方法以增量方式存储double值:"
+ stringValueDouble);
// incrBy:将 key 所储存的值加上给定的增量值(increment) 。
Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.incrBy("key3", 5);
String v3 = jedis.get("key3");
System.out.println("结果:" + v3); }
@Test
public void delete() { redisTemplate.delete("myStr");
redisTemplate.delete("mySet");
redisTemplate.delete("myHash");
redisTemplate.delete("key3"); String str = "string";// 1.字符串
redisUtil.set("str", str);
System.out.println(redisTemplate.opsForValue().get("str"));
} @Autowired
private RedisUtil redisUtil; @Test
public void testSpringRedis2() {
String str = "string";// 1.字符串
List<String> list = new ArrayList<String>();// list
list.add("0");
list.add("中国");
list.add("2");
Set<String> set = new HashSet<String>();// set
set.add("0");
set.add("中国");
set.add("2");
Map<String, Object> map = new HashMap();// map
map.put("key1", "str1");
map.put("key2", "中国");
map.put("key3", "str3"); redisUtil.del("myStr", "str");// 删除数据 // 1.字符串操作
System.out.println(str); redisUtil.set("str", str);
redisUtil.expire("str", 120);// 指定失效时间为2分钟
String str1 = (String) redisUtil.get("str"); System.out.println(redisTemplate.opsForValue().get("str")); System.out.println("str1= " + str1); // 2.list操作
redisUtil.lSet("list", list);
redisUtil.expire("list", 120);// 指定失效时间为2分钟
List<Object> list1 = redisUtil.lGet("list", 0, -1);
System.out.println(list1); // 3.set操作
redisUtil.sSet("set", set);
redisUtil.expire("set", 120);// 指定失效时间为2分钟
Set<Object> set1 = redisUtil.sGet("set");
System.out.println(set1); // 3.map操作
redisUtil.hmset("map", map);
redisUtil.expire("map", 120);// 指定失效时间为2分钟
Map<Object, Object> map1 = redisUtil.hmget("map");
System.out.println(map1); } // TODO 哨兵集群 // TODO CDN
}
<properties> <junit.version>4.9</junit.version>
<spring-version>3.1.2.RELEASE</spring-version>
</properties> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-version}</version>
</dependency>
- 先来看redis集群,简单来说就是master-slave,主从复制, slave同步master的数据, 用于读写分离和容灾恢复
参考https://blog.csdn.net/u010648555/article/details/79427606 这么操作
1.先将E:\redis\redis64-3.0.501复制三份,分别命名为redis64-3.0.501-6379,redis64-3.0.501-6379,
redis64-3.0.501-6381 2.修改6380 6381下的redis.windows.conf文件,改成各自对应的端口号,都做6379的从节点 port 6380 # slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379 3.通过上面介绍的cmd脚本形式启动6379, 然后启动6380,然后启动6379客户端,看下图
命令info replication
- redis主从复制的缺点: 每次slave断开重连后,都要重新全部同步一遍, 复制延迟,如果master不能写入,会导致业务出错,可用性不高,所以采用哨兵模式
- 接着上文的基础看redis-sentinel模式的配置,已经有了主从配置,E:\redis\redis64-3.0.501-6379在每个文件夹下添加一个sentinel.conf的配置文件,这个文件在官网下载linux版本目录下直接有
可以在redis解压目录下 通过redis-server.exe redis.windows.conf
redis-server.exe sentinel.conf --sentinel 命令, 先启动Redis集群,再启动哨兵实例 也可以像之前那样,写个脚本执行 示例文件做了详细的配置说明,启动不了,估计是里面哪里配置有误,懒得找了,用下面的简化版sentinel.conf
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 10000
sentinel config-epoch mymaster 0 执行后你会发现该文件有变化,写入了从服务器的信息
# Generated by CONFIG REWRITE
dir "E:\\redis\\redis64-3.0.501-6379"
sentinel leader-epoch mymaster 0
sentinel known-slave mymaster 127.0.0.1 6380
sentinel known-slave mymaster 127.0.0.1 6381
sentinel current-epoch 0 如果报Invalid argument during startup: Failed to open the .conf file:
一般都是配置文件的问题,把它从其他地方关闭

生成哨兵ID(Sentinel ID),并自动识别主服务器和从服务器
- Redis 有哪些类型
- Redis 内部结构
- 聊聊 Redis 使用场景
- Redis 持久化机制
- Redis 如何实现持久化
- Redis 集群方案与实现
- Redis 为什么是单线程的
- 缓存崩溃
- 缓存降级
- 使用缓存的合理性问题
啰里吧嗦redis的更多相关文章
- 啰里吧嗦CountDownLatch
java.util.concurrent Class CountDownLatch 目录 CountDownLatch 是什么 CountDownLatch是一个同步工具类,它允许一个或多个线程一直等 ...
- 啰里吧嗦jvm
一.为什么要了解jvm 有次做项目的时候,程序run起来的时候,总是报OutOfMemoryError,有老司机教我们用jconsole.exe看内存溢出问题 就是这货启动jconsole后,发现一个 ...
- 啰里吧嗦kafka
1.kafka是什么 kafka官网: http://kafka.apache.org/ kafka是一种高吞吐量的分布式发布订阅消息系统,用它可以在不同系统中间传递分发消息 2.zookeeper是 ...
- 啰里吧嗦式讲解java静态代理动态代理模式
一.为啥写这个 文章写的比较啰嗦,有些东西可以不看,因为想看懂框架, 想了解SSH或者SSM框架的设计原理和设计思路, 又去重新看了一遍反射和注解, 然后看别人的博客说想要看懂框架得先看懂设计模式,于 ...
- 一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“啰里啰嗦版”)
该篇为“啰里啰嗦版”,另有相应的“精简版”供参考 “不到长城非好汉:不做OS,枉为程序员” OS之于程序员,如同梵蒂冈之于天主教徒,那永远都是块神圣的领土.若今生不能亲历之,实乃憾事! 但是,圣域不是 ...
- .netcore里使用StackExchange.Redis TimeOut 情况解决方法
在用StackExchange.Redis这个组件时候,时不时会出现异常TimeOut解决方法如下, 解决方法: 在Program的Main入口方法里添加一句话: System.Threading.T ...
- java里常用的redis客户端简介
Redis的各种语言客户端列表,请参见Redis Client.其中Java客户端在github上start最高的是Jedis和Redisson.Jedis提供了完整Redis命令,而Redisson ...
- Redis(六):java里常用的redis客户端(Jedis和Redisson)
Redis的各种语言客户端列表,请参见Redis Client.其中Java客户端在github上start最高的是Jedis和Redisson.Jedis提供了完整Redis命令,而Redisson ...
- 啰哩吧嗦式讲解在windows 家庭版安装docker
1.docker是什么,为什么要使用docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中, 然后发布到任何流行的 Linux 机器上,也可以实 ...
随机推荐
- 【cocos2d-x 仙凡奇缘-网游研发(1) 登录&注册】
转载请注明出处:http://www.cnblogs.com/zisou/p/xianfan01.html 公司的项目总算告一段落了,年前憋到年后,总算要上线了,所以我也有了时间来搞我自己的游戏项目了 ...
- day74天中间件介绍
一. importlib settings 执行结果: 两个process_request process_response按照注册顺序的倒叙进行执行 PROCESS_VIEW Process_v ...
- Cordova - 解决升级NDK之后无法编译!
先前Cordova工作正常,今天升级了一下Android Studio,随后发现NDK也有升级包了,于是顺利升级了NDK!升级完毕发现,无法正常编译了,错误提示如下: No toolchains fo ...
- arya-sites模块的主要类
Site类,生成路由, - 方法:url,get_urls, register, login,logout - 字段:_registry = {} Config,基础配置类,主要用 ...
- 频繁项集挖掘之apriori和fp-growth
Apriori和fp-growth是频繁项集(frequent itemset mining)挖掘中的两个经典算法,虽然都是十几年前的,但是理解这两个算法对数据挖掘和学习算法都有很大好处.在理解这两个 ...
- 下载一个vue项目执行npm install 后运行项目npm run dev后出错 - 问题解决
在SVN上拉下来一个vue项目,上面没有提交项目里面的node_modules文件夹,所以要自己执行 npm install 安装,但安装完后运行项目后却报错了: $ npm run dev > ...
- 【BZOJ3456】轩辕朗的城市规划 EGF+多项式求ln
我们构造$f(i)$和$g(i)$. 其中$f(x)$表示由$x$个节点构成的无向简单连通图的个数. $g(x)$表示有$x$个节点构成的无向简单图(不要求连通)的个数. 显然,由$x$个节点构成的无 ...
- vue微信分享链接添加动态参数
微信分享时 分享链接携带参数可能不是固定的 需要在分享的前一刻才知道 这里就是动态设置分享链接的基本写法 代码不是那么详尽 但大致流程如下 1.安装引用jssdk npm install --save ...
- C语言 for循环次数
for (i = 0;i < n;i++) 则循环次数是N,而循环结束以后,i的值是n.循环的控制变量i,是选择从0开始还是从1开始,是判断i<n 还是i <= n,对循环的次数,循 ...
- (转)Python3.5——装饰器及应用详解
原文:https://blog.csdn.net/loveliuzz/article/details/77853346 Python3.5——装饰器及应用详解(下)----https://blog.c ...