jedis

【NoSql】Redis实践篇-简单demo实现(一)

做~自己de王妃 提交于 2019-12-07 12:17:53
Redis是一个key-value存储系统。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用 Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset--有序集合)和hash(哈希类型)。这些数据类型支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从复制)。 Memcache 与 Redis 区别 Memcache 提供的数据类型少,只有键值对, Redis 提供的数据类型相对较多 Memcache 关机就没了,数据全部存到内存当中,但是没有提供故障恢复, Redis 可以将数据存储到磁盘中 redis 提供主从复制, Memcache 无 Memcache 是多线程的(使用协议解决的), redis 是单线程 Windows下Redis的安装使用 1 ,安装 Redis

使用Redis实现异步消息队列

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-07 12:15:28
前言 在后端编程时,对需要立即返回的数据我们应当立刻返回,而对于可以慢慢处理而业务复杂的我们可以选择延迟返回。这个实现使用到了异步消息队列。 异步消息队列 主要用于实现生产者-消费者模式。也就是说,这个队列应当是可以阻塞的,否者会带来大量的性能浪费。 生产者-消费者模式 更加 详细的介绍我找到了一篇博客,讲得挺好的,我就不详细说了。 生产者消费者模式-Java实现 实现 1.定义事件类型 -- 定义Enum类 -- EnumType 用于表示该事件的类型 public enum EventType { //这里列举了四种类型 LIKE(0), COMMENT(1), LOGIN(2), MAIL(3); private int value; EventType(int value) { this.value = value; } public int getValue() { return value; } } 2.定义事件的实体 -- EventModel 这里说明一下entityOwnerId的必要性。举个例子,当我们给一个人点赞时,系统要给那个人(也就是entityOwnerId)发送一个站内信,通知那个人他被点赞了。当然,我们也可以把entityOwnerId包装在exts里,但因为几乎每一个事件都需要这个字段,所以这里我们开一个字段给他。 public class

JedisSentinelPool的相关配置与操作

橙三吉。 提交于 2019-12-07 10:35:34
前面文章 《一步步实现redis+sentinel双机热备》 中已经分享了如何配置使用redis自带监听程序sentinel实现双机热备,这篇文章将继续分享,客户端程序需要做哪些调整。 Spring配置文件 <context:property-placeholder ignore-unresolvable="true" location="classpath:redis.properties" /> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.maxTotal}" /> <property name="minIdle" value="${redis.minIdle}" /> <property name="maxWaitMillis" value="${redis.maxWaitTime}" /> <property name="maxIdle" value="${redis.maxIdle}" /> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> <property name="testOnReturn" value="true" /

7、redis主从复制和sentinel配置高可用

五迷三道 提交于 2019-12-07 10:35:22
一:redis主从配置 1、环境准备 master : 192.168.50.10 6179 slave1: 192.168.50.10 6279 slave2: 192.168.50.10 6379 2、redis.conf配置文件配置 master port 6179 requirepass 123456 #密码认证,可以不设置 dir "/var/redis/6179" #工作目录,dump.rdb会保留在这个目录 slave1 port 6279 slaveof 192.168.50.10 6179 #master的ip和端口,不能使用127.0.0.1 6179 masterauth 123456 #如果master设置了requirepass,则这里需要配置 slave-read-only yes #默认就是yes dir "/var/redis/6279" slave2 port 6379 slaveof 192.168.50.10 6179 #master的ip和端口,不能使用127.0.0.1 6179 masterauth 123456 #如果master设置了requirepass,则这里需要配置 slave-read-only yes #默认就是yes dir "/var/redis/6379" 注意:如果slaveof 127.0.0.1 6179

How to get multiple list values in one single call in RedisTemplate of Jedis Client

自闭症网瘾萝莉.ら 提交于 2019-12-07 07:05:32
问题 I am using RedisTemplate to get and store data as a list. When I am storing data - I store it as redisTemplate.opsForList().rightPush("key1", "value11"); redisTemplate.opsForList().rightPush("key1", "value12"); redisTemplate.opsForList().rightPush("key2", "value21"); redisTemplate.opsForList().rightPush("key2", "value22"); Now I want to get the list values for both the keys in one single call I can get individually by redisTemplate.opsForList().range("key1", 0, -1); redisTemplate.opsForList()

how to store an image to redis using java / spring

允我心安 提交于 2019-12-07 05:30:25
问题 I'm using redis and spring framework on my image upload server. I need to store the images to redis. I have found the following question but it was for python. how to store an image into redis using python / PIL I'm not sure if it's the best way but I would like to know how to do it in java (preferably using spring framework). I'm using spring-data-redis which uses jedis. I would like to know if it is a good strategy to store images in redis. 回答1: Redis is binary safe so, in the case of Jedis

Redis发布与订阅——PUBLISH & SUBSCRIBE

我的梦境 提交于 2019-12-07 02:58:39
Redis发布与订阅——PUBLISH & SUBSCRIBE 一般来说,发布与订阅(又称pub/sub)的特点是订阅者(listener)负责订阅频道(channel),发送者(publisher)负责向频道发送二进制字符串消息(binary string message)。每当有消息发送至给定频道时,频道的订阅者都会收到消息。我们也可以把频道看作是电台,其中订阅者可以同时收听多个电台,而发送者则可以在任何电台发送消息。 发布与订阅的模式 Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。 作为例子, 下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系: 当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端: 发布与订阅相关命令 订阅和发布 首先打开一个cli,订阅一个频道,如下, 127.0.0.1:7000> subscribe mychannel Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "mychannel" 3) (integer) 1

Using jedis How to cache Java object

怎甘沉沦 提交于 2019-12-06 20:00:00
问题 Using Redis Java client Jedis How can I cache Java Object? 回答1: you should convert your object as a json string to store it, then read the json and transform it back to your object. you can use Gson in order to do so. //store Gson gson = new Gson(); String json = gson.toJson(myObject); jedis.set(key,json); //restore String json = jedis.get(key); MyObject object=gson.fromJson(json, MyObject.class); 回答2: You can't store objects directly into redis. So convert the object into String and then put

SpringBoot2.0学习笔记:(十) Spring Boot中集成Redis

*爱你&永不变心* 提交于 2019-12-06 17:52:20
一、关于Lettuce 关于在SpringBoot2.0.x版本中集成Redis,我们先看一下官方的迁移文档有什么说的: Spring Boot2.0迁移指南 当你使用spring-boot-starter-redis的时候,Lettuce现已取代Jedis作为Redis驱动。当你使用更好级别的Spring数据结构时,你会发现变化时清晰的。我们仍然支持Jedis,并且你可以任意切换依赖机制,通过排除io.lettuce:lettuce-core和添加redis.clients.jedis的方式。 Lettuce现已取代Jedis作为Redis驱动 。 那Lettuce又是个什么呢?与Jedis又有何区别呢? Lettuce 是一个可伸缩的线程安全的 Redis 客户端,支持同步、异步和响应式模式。多个线程可以共享一个连接实例,而不必担心多线程并发问题。它基于优秀 Netty NIO 框架构建,支持 Redis 的高级功能,如 Sentinel,集群,流水线,自动重新连接和 Redis 数据模型 Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接 Lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问

How to read erlang term from redis by using java client?

孤者浪人 提交于 2019-12-06 16:38:33
e.g. I save the tuple T = {k1, v1, k2, v2} to the redis by jedis: eredis:q(Conn, ["SET", <<"mykey">>, term_to_binary(T)]). I am trying to use the code below to read this erlang term: Jedis j = Redis.pool.getResource(); byte[] t = j.get("mykey").getBytes(); OtpInputStream ois = new OtpInputStream(t); System.out.println(OtpErlangObject.decode(ois)); The error is: com.ericsson.otp.erlang.OtpErlangDecodeException: Uknown data type: 239. So how can I get the erlang term correctly? Erlang side: term_to_binary({k1, v1, k2, v2}). <<131,104,4,100,0,2,107,49,100,0,2,118,49,100,0,2,107,50, 100,0,2,118,50