jedis

【转】Redis概念原理、redis面试

≡放荡痞女 提交于 2020-04-23 13:10:12
1.Redis基础教程学习 1.1.Redis数据库概述 1.1.1. 什么是Redis 1.1.2. Redis有哪些优缺点? 1.1.3. 为什么要用 Redis /为什么要用缓存? 1.1.4. 为什么要用 Redis 而不用 map/guava 做缓存? 1.1.5. Redis为什么这么快? 1.2.Redis数据类型 1.2.1.Redis有哪些数据类型? 1.2.2.Redis的应用场景 1.3.Redis持久化 1.3.1.什么是Redis持久化? 1.3.2.Redis 的持久化机制是什么?各自的优缺点? 1.3.3.如何选择合适的持久化方式? 1.3.4.Redis持久化数据和缓存怎么做扩容? 1.4.Redis过期键的删除策略 1.4.1.Redis的过期键的删除策略 1.4.2.Redis key的过期时间和永久有效分别怎么设置? 1.4.3.我们知道通过expire来设置key 的过期时间,那么对过期的数据怎么处理呢? 1.5.Redis内存相关 1.5.1.MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据? 1.5.2.Redis的内存淘汰策略有哪些? 1.5.3.Redis主要消耗什么物理资源? 1.5.4.Redis的内存用完了会发生什么? 1.5.5.Redis如何做内存优化? 1.6

springboot 整合 redis

安稳与你 提交于 2020-04-19 23:41:08
.pom 文件 引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.1.8.RELEASE</version> </dependency> reids 的配置类 @Slf4j @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Serializable> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate redisTemplate = new RedisTemplate(); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 设置value的序列化规则和 key的序列化规则 redisTemplate.setValueSerializer

淘宝购物车是怎么用Spring Boot+Redis 扛住瞬间千次重复提交的?

℡╲_俬逩灬. 提交于 2020-04-18 17:34:44
在实际的开发项目中,一个对外暴露的接口往往会面临,瞬间大量的重复的请求提交,如果想过滤掉重复请求造成对业务的伤害,那就需要实现幂等! 我们来解释一下幂等的概念: 任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重复处理。 如何保证其幂等性,通常有以下手段: 1、数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据 2、token机制,每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证,如果验证通过删除token,下次请求再次判断token 3、悲观锁或者乐观锁,悲观锁可以保证每次for update的时候其他sql无法update数据(在数据库引擎是innodb的时候,select的条件必须是唯一索引,防止锁全表) 4、先查询后判断,首先通过查询数据库是否存在数据,如果存在证明已经请求过了,直接拒绝该请求,如果没有存在,就证明是第一次进来,直接放行。 redis实现自动幂等的原理图: 搭建Redis的服务Api 1、首先是搭建redis服务器。 2、引入springboot中到的redis的stater,或者Spring封装的jedis也可以,后面主要用到的api就是它的set方法和exists方法

基于redis的限流

守給你的承諾、 提交于 2020-04-16 08:47:07
【推荐阅读】微服务还能火多久?>>> /** * 基于redis的限流 * @author: whh * @date: 2020.03.19 **/ public class RedisRateLimitUtil { public static final Logger LOGGER = LoggerFactory.getLogger(RedisRateLimitUtil. class ); @Resource(name = "anticheatRedisClient" ) private RedisClient anticheatRedisClient; public boolean tryAcquire(String key, int timeWindow, int limitNum) { boolean acquireResult = anticheatRedisClient.execute(key, new JedisAction<Boolean> () { @Override public Boolean action(Jedis jedis) { try { String setNxResult = jedis.set(key, "1", "NX", "EX" , timeWindow); if ("OK" .equals(setNxResult)) { return

Redis面试题,个个都是经典,希望有你想要的

白昼怎懂夜的黑 提交于 2020-04-15 08:59:49
【推荐阅读】微服务还能火多久?>>> 分享分享自己收藏的学习资料,有需要的朋友可以找我获取 根据自身面试经历整理以及不断收集的(珍藏版) 【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> https://www.cnblogs.com/xiaogeng88/p/12692306.html 1、什么是Redis?简述它的优缺点? Redis的全称是:Remote Dictionary.Server,本质上是一个Key-Value类型的内存数据库,很像 memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘 上进行保存。 因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的 Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限 制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。 比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高 性能的tag系统等等。 另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的 memcached来用。

jedis操作Lua脚本测试

时光怂恿深爱的人放手 提交于 2020-04-12 11:39:13
import static org.hamcrest.CoreMatchers.equalTo; import java.util.ArrayList; import java.util. List ; import org.hamcrest.CoreMatchers; import org.hamcrest.Matcher; import org.junit.Test; import redis.clients.jedis.BinaryJedis; import redis.clients.jedis.Jedis; import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.jedis.tests.utils.ClientKillerUtil; import redis.clients.util.SafeEncoder; public class ScriptingCommandsTest extends JedisCommandTestBase { @SuppressWarnings( "unchecked" ) @Test public void

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

╄→гoц情女王★ 提交于 2020-04-11 16:36:56
使用redis连接池,每隔一段时间就报错 redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at redis.clients.util.Pool.getResource(Pool.java:22) at com.derbysoft.jredis.longkeytest.BorrowObject.run(BorrowObject.java:22) at java.lang.Thread.run(Thread.java:662) Caused by: java.util.NoSuchElementException: Timeout waiting for idle object at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1134) at redis.clients.util.Pool.getResource(Pool.java:20) 原因是没有回收资源导致 正确的做法是 ShardedJedis jedis = shardedJedisPool.getResource(); try { jedis.set(key,

redis随笔

与世无争的帅哥 提交于 2020-04-11 14:47:23
redis redis的安装一 安装的准备 首先得买一个服务器(我买的阿里云ecs轻量级); 再下载远程客户端(我用的Xshell,Xftp); 打开Xftp将下载好得redis压缩包传输Xftp中,在进入Xshell中Linux命令安装; rides安装 下载地址:https://redis.io/ 安装: 1,Linux进入redis所在目录; 2,执行命令:tar -zxvf redis-3.2.10.tar.gz //个人建议将软件安装在/usr/local目录下,执行命令:tar -zxvf redis-3.2.10.tar.gz -C /usr/local/redis,当然解压完了move也可以; 3,进入解压后的目录进行编译,cd redis-3.2.10. 执行命令:make ,make命令后可能报错,如果报错,解决如下: 报错一:那可能是没有gcc (linux下的一个编译器,是c,c++程序的编译器) 使用命令yum进行安装,yum -y install gcc 报错二:error:jemalloc/jemalloc.h:No such file or disectoty //可能找不到c语言中的头文件 执行 make MALLOC = libc 4,安装完gcc之后,make distclean 清理下上次make后产生的文件,再make redis启动:

redis分布式锁

二次信任 提交于 2020-04-09 18:04:10
我感觉写的不错的一篇文章。 基于Redis实现分布式锁 前言 分布式锁一般有三种实现方式:1.数据库乐观锁;2、基于Redis的分布式锁;3.基于Zookeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis的实现分布式锁。 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能正常加锁。 具有容错性。只要大部分的Redis节点,客户端就可以加锁和解锁。 解铃还须系铃人。加锁和解锁必须是在同一个客户端,客户端自己不能把别人加的锁给解了。 代码实现 组件依赖 首先我们通过Maven引入Jedis开源组件,在pom.xml文件加入下面的代码; < dependency > < groupId > redis.clients </ groupId > < artifactId > jedis </ artifactId > < version > 2.9.0 </ version > </ dependency > 加锁代码 正确姿势 先展示代码,再带大家慢慢解释为什么 public class RedisTool { private static final String LOCK_SUCCESS = "OK" ;

阿里云-Redis-Help-连接实例-Redis客户端连接:Jedis客户端

无人久伴 提交于 2020-04-08 09:40:26
ylbtech-阿里云-Redis-Help-连接实例-Redis客户端连接:Jedis客户端 1. 返回顶部 1、 Jedis客户端 Jedis客户端访问云数据库Redis版服务,有以下 两种方法 : Jedis单链接 JedisPool连接池连接 操作步骤如下: 下载并安装Jedis客户端,详细步骤请参见 Jedis使用说明 。 Jedis单连接示例 打开Eclipse客户端,创建一个Project,输入如下代码段: import redis.clients.jedis.Jedis; public class jedistest { public static void main(String[] args) { try { String host = "xx.kvstore.aliyuncs.com";//控制台显示访问地址 int port = 6379; Jedis jedis = new Jedis(host, port); //鉴权信息 jedis.auth("password");//password String key = "redis"; String value = "aliyun-redis"; //select db默认为0 jedis.select(1); //set一个key jedis.set(key, value); System.out