导读 谁有好用的Java使用redis的封装的示例? Java连接redis的使用示例 redisclient下载 redis安装包下载 Redis是开源的key-value存储

谁有好用的Java使用redis的封装的示例?

Java连接redis的使用示例

redisclient下载 redis安装包下载redisclient下载 redis安装包下载


Redis是开源的key-value存储工具,redis通常用来存储结构化的数据,因为redis的key可以包含String、hash、listset和sorted list。

Redisclient支持多种语言,包括:c、C++、C#、php、java、python、go等语言,根据自己的开发语言,选择合适的redis client版本类型即可。我是使用java语言开发的,针对java语言,redis client也提供了多种客户端支持,按照推荐类型依次是:Jedis、Redisson、JRedis、JDBC-Redis、RJC、redis-protocol、aredis、lettuce。前两种类型是比较推荐的,我们采用了Redisson类型版本作为redisclient的使用。

Redisson版的redis可发工程搭建

1. 新建maven工程

2. 在pom.xml文件的dependencies节点下增加如下内容:

org.redisson

redisson

1.0.2

org.slf4j

slf4j-log4j12

1.7.7

3. 保存pom.xml后,等eclispe工程构建完成后即可进行开发了

开发示例

下面是演示连接redis服务器、保存读取concurrentMap对象、保存读取set对象和保存读取Queue对象的示例代码,代码比较简单,这里就不再详细讲解了,代码如下:

[java] view plaincopy

package com.my.test.redis;

import java.util.Queue;

import java.util.Set;

import java.util.concurrent.ConcurrentMap;

import org.redisson.Config;

import org.redisson.Redisson;

public class RedisExample {

/**

* @param args

*/

public static void main(String[] args) {

// 1.初始化

Config config = new Config();

config.setConnectionPoolSize(10);

config.addAddress("127.0.0.1:6379");

Redisson redisson = Redisson.create(config);

System.out.println("reids连接成功...");

// 2.测试concurrentMap,put方法的时候就会同步到redis中

ConcurrentMap map = redisson.getMap("FirstMap");

map.put("wuguowei", "男");

map.put("zhangsan", "nan");

map.put("lisi", "女");

ConcurrentMap resultMap = redisson.getMap("FirstMap");

System.out.println("resultMap==" + resultMap.keySet());

// 2.测试Set集合

Set mySet = redisson.getSet("MySet");

mySet.add("wuguowei");

mySet.add("lisi");

Set resultSet = redisson.getSet("MySet");

System.out.println("resultSet===" + resultSet.size());

//3.测试Queue队列

Queue myQueue = redisson.getQueue("FirstQueue");

myQueue.add("wuguowei");

myQueue.add("lili");

myQueue.add("zhangsan");

myQueue.peek();

myQueue.poll();

Queue resultQueue=redisson.getQueue("FirstQueue");

System.out.println("resultQueue==="+resultQueue);

// 关闭连接

redisson.shutdown();

}

}

如何在中安装redis组件

Redis安装与启动

1. 下载Redis

Redis本身没有提供Windows版本的,并且在Windows上也不太稳定,一般都将其部署到Linux环境下,Redis可以在其官网上下载,MSOpenTech中提供了Windows版本,这里为了学习安装这一版本。

点击跳转到Github后,直接点击Zip下载。下载后根据自己计算机的版本选择32位或者64位进行安装。我将64位的解压后放到D:\Redis文件夹下,同时将文件夹内的redis.conf也拷贝到该目录下,这个是redis的配置信息:

2. 启动Redis

在Windows下面启用Redis和启动MogoDB一样,需要使用命令行启动,首先定位到该目录,运行如下命令:

D:\Redis>redis-server.exe redis.conf

因为是在本机运行的,这里要注意端口号,同时要保持端口不要关闭。

当然您也可以将Redis作为Windows服务在后台一直开启。

3. 使用

现在再开一个控制台应用程序连接之前启动的Redis,如下:

D:\Redis>redis-cli.exe -h 172.16.147.121 -p 6379

其中 –h后面是本机的ip地址,后面的是端口。

然后就可以执行set 给key为city赋值:

redis 172.16.147.121:6379> set city Shanghai

通过get可以获取指定key为city的值了。

redis 172.16.147.121:6379> get city

同时,在我们往redis上写数据的时候,Redis服务也会定时的往文件中写数据

这里仅简单的介绍了get和set命令,更多命令可以查看

.初探Redis

下载ServiceStack.Redis

和MongoDB一样,在.NET中使用Redis其实也是使用第三方驱动,官网推荐的是使用ServiceStack.Redis 下载后解压得到如下dll

.NET项目中使用Redis

新建一个Console程序,引用上一步骤解压的四个dll。

做一个简单的例子,在.NET中获取之前我们设置的city的值。

class Program

{

static RedisClient redisClient = new RedisClient("172.16.147.121", 6379);//redis服务IP和端口

static void Main(string[] args)

{

Console.WriteLine(redisClient.Get("city"));

Console.ReadKey();

}

}

首先通过 static RedisClient redisClient = new RedisClient("172.16.147.121", 6379);

建立连接 ,然后就可以直接用redisClient里面的Get方法获取 key为city的值了。

在前面的命令行中,我们网city中存入了Shanghai,现在我们获取到了这个值。

ServerStack中有很多方法可以在.NET中调用,其类结构图如下:

总结

本文简单介绍了Redis,Redis如何在Windows下安装,以及如何在.NET中使用访问和使用Redis,希望对您有所帮助,下文将讲解如何在.NET中网Redis中读写复杂对象。

redis客户端选型-Jedis、lettuce、Redisson

1.背景

研发部门对于客户端选型比较广泛和随意,依赖的分支也不统一,感觉就像百度到一个就直接用,或者是有一个功能满足就换,没有考虑到其他组的使用情况以及集中维护。

另外一个是如果作为公司pom脚手架的基本组成部分,需要考虑统一成一个还是多个并存的问题,现在有两个考量:如果性能不是大问题,建议统一集中为一个就行; 如果需要多个并存,至少不能多于2个客户端。

2.比较

官方推荐的java客户端只有Jedis、lettuce、Redisson,所以这次分析只针对这三个进行。

2.1.概述

Jedis: redis的Java实现客户端,提供了比较全面的Redis命令的支持。

lettuce: Lettuce is a scalable thread-safe Redis client for synchronous, asynchronous and reactive usage. Multiple threads may share one connection if they avoid blocking and transactional operations such as BLPOP and MULTI/EXEC. Lettuce is built with netty. Supports advanced Redis features such as Sentinel, Cluster, Pipelining, Auto-Reconnect and Redis data models.

Redisson: Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。

lettuce: 直接看官网的:

2.2.性能

Jedis的性能比lettuce和Redisson都要差一点,三者的主要差异在于以下:

1.Jedis使用同步和阻塞IO的方式,不支持异步;lettuce和Redisson支持异步,底层是基于netty框架的事件驱动作为通信层。

2.Jedis设计上就是基于线程不安全来设计,一个连接只能被一个线程使用,但是可以结合连接池来提高其性能;lettuce和Redis基于线程安全来设计的,一个连接是被共享使用的,但是也提供了连接池,主要用于事务以及阻塞操作的命令。

3.lettuce和Redisson支持异步流的方式。

一些公开的benchmark结果:

Redisson和Jedis:

Jedis和lettuce:

上面的测试结果都是比较久远的,没找到三者共同参与的性能测试结果。

没有做三者的性能基准测试,主要是无目的性、无针对性的条件限制(并发数、数据量、指令kv的大小范围),很难去做定量和可对比的基准测试(主要是我懒)。

2.3.功能

Jedis: 提供比较全面的redis原生指令的支持,上层封装比较弱,集群特性支持度非常低,高级特性几乎没有。

lettuce: 高级redis客户端,支持各种模式的redis连接和操作,高级特性几乎没有。

Redisson: 高级redis客户端,支持各种模式的redis连接和操作,同时提供一大堆的实用功能。

Jedis和lettuce没什么功能,就简单的操作,连分布式锁都需要自己实现,所以先聊聊Redisson的高级功能,中间偶尔会用Jedis和lettuce做对比。

1.十几种编码方式。

Redisson是基于对象的操作,对于key对象和value对象可用不同的高级编码方式:

JsonJacksonCodec、AvroJacksonCodec、SmileJacksonCodec、CborJacksonCodec、MsgPackJacksonCodec、IonJacksonCodec、KryoCodec、SerializationCodec、FstCodec、LZ4Codec、SnappyCodec、CompositeCodec

和四种基本的编码方式:

JsonJacksonMapCodec、StringCodec、LongCodec、ByteArrayCodec

而Jedis操作只针对字节数组, lettuce支持ByteArrayCodec、StringCodec、CipherCodec、CompressionCodec四种。

按需使用,没有编码方式的比对。

2.分布式集合。

把大集合拆分并均匀分布到各个节点上,集合包括Set、Map、BitSet、Bloom Filter、Spring Cache和Hibernate Cache,并且支持本地缓存。(只有专业版才能用)分布式锁。

各种各样的分布式锁: 可重入锁ReentrantLock、公平锁FairLock、联锁MultiLock、红锁RedLock、读写锁ReadWriteLock、信号量Semaphore、可过期的信号量PermitExpirableSemaphore、计数器CountDownLatch

3.RPC

4.分布式调度任务服务

5.分布式MR

6.复杂多维对象结构和对象引用的支持

7.集群pipeline

lettuce也支持。

jedis不支持,jedis连多key(分布在不同节点的)操作都不支持。

8.事务

提供了XA Transactions标准的实现,可以集成到Spring中。(只有专业版才能用)

9.集群管理工具

(只有专业版才能用)

10.限流器

分布式的限流工具(有timeout功能)。

11.自增/分布式ID

12.BloomFilter

13.延迟队列

2.4.选型

Spring最早是默认以Jedis作为客户端, 但是后来改为了lettuce, lettuce与Jedis相比比较明显的特点是异步和线程安全, 底层是netty大杀器作为通信层, 性能比Jedis的线程不安全+连接池要好。

Redisson是以其强大的功能以及面向对象的设计优于其他两者。

根据我们的业务需要:

1.限流

2.分布式锁

3.缓存

4.GID生成

5.延时队列

6.lua脚本

7.请求合并

Redisson都能满足,实际上单是使用Redisson作为Spring的客户端就足够了。

个人倾向lettuce + Redisson。

redis 实现并发锁go

锁的作用是:当多个线程竞争一个资源时,会出现资源被干掉或者资源重置为另一个值,这时锁的作用就出现了,锁住当前的资源,其他线程就不会修改此数据了。

使用redis锁的思想是:将资源作为一个独立标识,然后放在字符串里面,并且使用过期时间来声明锁:

也可以手动释放,才去循环设置超时时间

SetNX 这个命令就很好地作为资源声明,创建一个锁:

import (

"context"

"go-redis/client"

"time"

""

""

)

var ctx = context.TODO()

func Lock(lockname string, locktime int64) string {

u, _ := uuid.NewUUID()

ustr := u.String()

end := time.Now().Unix() + locktime

for {

if time.Now().Unix() < end {

client.RedisClient().SetNX(ctx, "lock:"+lockname, ustr, time.Hour)

return ustr

}

}

}

而释放锁,一般是两步合并的操作,因为它会减少IO操作。

两步分为:

获取资源

如果有此资源,释放锁(删除资源uuid)

package redislock

import (

"context"

"go-redis/client"

"time"

""

""

)

var ctx = context.TODO()

// 释放锁

func Release(lockname string, indetifier string) bool {

pipline := client.RedisClient().TxPipeline()

lockname = "lock:" + lockname

for {

pipline.Get(ctx, lockname).Val()

cmders, _ := pipline.Exec(ctx)

perm, _ := cmders[0].(*redis.StringCmd).Result()

if perm == indetifier {

pipline.Del(ctx, lockname) // 删除锁

pipline.Exec(ctx)

return true

}

}

}

wcf怎么和redis缓存结合

Redis是一个不错的缓存数据库,读取数据速度效率都很不错。今天大家共同研究下redis的用法。结合网上的资料和自己的摸索,先来看下安装与配置把。咱们主要看在WINDOWS上怎样使用REDIS数据库。

下载地址:

1. 选择一个版本进行下载,我们这里使用Redis-2.1.5 - Win32版本的。下载解压后的文件如下图:

2. 在D建立一个redis 文件夹(当然建在其他盘也可以),然后把上面解压的32bit文件夹下面的所有文件拷贝到redis文件夹里面。

3.打开服务器端

通过CMD命令行打开服务器端,首先通过命令行转到d:\redis文件夹,然后输入如下命令 redis-server.exe

4.打开客户端

服务器端的CMD命令行不要关闭,再单独打开一个CMD命令行,切换到d:\redis文件夹,输入如下命令:redis-cli.exe -h 127.0.0.1 -p 6379

然后输入 set pwd 123456

get pwd

获取返回值成功,说明服务器端配置成功,

5.NET中怎样使用Redis存储数据.

在.net中比较常用的客户端类库是ServiceStack,看下通过servicestack怎样存储数据。

DLL下载:

6.示例代码

Redis中包括四种数据类型,Strings, Lists, Sets, Sorted Sets接下来我们一一看这四种类型的用法。

[csharp] view plaincopy

private void Redis()

{

RedisClient client = new RedisClient("127.0.0.1", 6379);

client.Set("username", "郭靖");

client.Set("pwd", 123456);

string username = client.Get("username");

int pwd = client.Get("pwd");

Response.Write("读取缓存," + "姓名:" + username + ",密码:" + pwd + "
");

}

private void RedisForManyServer()

{

using (var manager = new PooledRedisClientManager("127.0.0.1", "192.1680.30.90"))

{

IRedisClient iclient = manager.GetClient();

UserInfo user = new UserInfo();

user.Name = "杨过";

user.Age = 18;

iclient.Set("user", user);

UserInfo user2 = iclient.Get("user");

Response.Write("读取分布式缓存集群," + "姓名:" + user2.Name + ",年龄:" + user2.Age + "
");

}

}

【go-redis】Client

NewClient 根据 Options 指定的 Redis Server 返回一个客户端。

NewClusterClient 返回一个 Redis 集群客户端

NewFailoverClient 返回一个使用 Redis Sentinel 进行自动故障转移的 Redis 客户端。 多个 goroutine 并发使用是安全的。

NewFailoverClusterClient 返回一个支持将只读命令路由到从节点的客户端。

SentinelClient is a client for a Redis Sentinel.

NewUniversalClient 返回一个新的多客户端。

返回客户端的类型取决于以下条件: