您好,欢迎光临本网站![请登录][注册会员]  
文件名称: Redis使用lettuce和jedis.pdf
  所属分类: Redis
  开发工具:
  文件大小: 1mb
  下载次数: 0
  上传时间: 2019-07-01
  提 供 者: qq_37******
 详细说明:个人整理redis的基本的使用,参看spring-data-redis官方网站,和博客,以及luttuce的源码,以及其他文档接口 描述 密影类型架作 Cooperations Redis的地理空间操作的,比如 GEOADD, GEORADTUS Hashoperations Redis哈希操作 HyperLogLogoperations Redist的 HyperLogLog操作,例如PAD, PFCOUNT Listoperations Redis列表操作 setoperations Redis设置了操作 valueoperations Redis字符串(或值)操作 ZSetoperatio Redis zset(或排序集)操作 继绑定操作 BaundGeooperations Redis键绑定地理空间操作 BoundHashoperations Redis散列键绑定操作 BoundkeyOperations Redis键绑定操作 BoundListoperations Redis列出键绑定操作 Boundsetoperations Redis设置键绑定操作 BoundvalueOperations Redis字符串(或值)键绑定操作 Boundzsetoperations Redis zset(或有序集)键绑定操作 配置完成后,模板是线程安全的,可以跨多个实例重用。 Redisτ emplate在大多数操作中使用基于ava的序列化程序。这意味着模板编写或读取的仼任何对象都诵过」ava进行序列化和反 序列化。您可以更改模板上的序列化机制, Redis模块提供了多个实现,这些实现在 org. springframework.data. redis. seria1izer包中提供。有关更多信息,请参阅序列化器您还可以将任何序列化程序设置 为nu,并通过将 enableD faultserializer属性设置为将 RedisTemplate与原始字节数组起使用fa1se。请注意,模板要 求所有键都为非nul但是,只要底层序列化程序接受它们,值就可以为null阅读每个序列化程序的 avalon以获取更多信 对于需要特定模板视图的情况,请将视图声明为依赖项并注入模板。容器会自动执行转换,从而消除ρsF。r[Ⅺ调用,如以下 示例所示 <- redis template definition --> listops public void addLink(String userId, URL url)I listOps. leftPush(userId, url toExternal Form() RedisTemplate的使用功能: Redis Template是操作reds的一个APl先看下 RedisTemplate的原码:具体的方法使看原码中的注释 RedisTemplate帮助程序类,用于简化 ,redis数据访问代码。 在给定对象和 Redis存储中的基础二进制数据之间执行自动序列化/反序列化。默认情况下,它使用对象的Java序列化(通过 」 DKSerialldaseReDeseriaIZER)。对于字符串密集型操作,请考虑使用专用的 StringRedisTemplate 中心方法是执行 execute(,支持reds询问代码实现 redisallback接口。它提供了 redis connection处理,这样,无论是 redisallback实现还是调用代码都不需要显式地关心检索/关闭 redis连接,或者处理连接生命周期异常。对于典型的单步动作, 有各种方便的方法。 旦配置,这个类就是线程安全的 请注意,虽然模板是通用的,但要正确地将给定对象转换为二进制数据或从二进制数据转换为给定对象,则取决于序列化程 序/反序列化程序。 文章中的最主要的方法如下 在 Redis连接中执行给定的操作。只要可能,操作对象引发的应用程序异常就会传播到调用方(只能取消选中)。 Redis异 常被转换为适当的υA○异常。允许返回结果对象,即域对象彧域对象集合。对适合于 redis存储的二进制数据的給定对象执行 自动序列化反序列化。注意:回调代码不应该处理事务本身!使用适当的事务管理器。通常,回调代码不能接触仼何连接生 命周期方法,比如dose,以让模板完成其工作。 public T execute( Rediscallback action, boolean expose Connection, boolean pipeline)0 执行一个事务,使用默认的 Iredisserializer来反序列化任何属于 byte[]s或 byte[s或元组的集合或映射的结果。其他结果类型 (long、 boolean等)与转换后的结果相同。如果在 Rediseα cOnnection Factory中禁用了T结果的转换,则将返回exec的结 果,而不进行反序列化。此检查主要是为了与1.0向后兼容。 public List exec(0仆}执行事务,使用提供的 redisserializer反序列化任何字节为s的结果或字节为囗s的集合。如果结果是映 射,则提供的 Iredisserializer将用于键和值。其他结果类型(ong、 boolean等)与转换后的结果相同。元组结果将自动转换 yytypedtuples. public List exec(RedisSerializer valueSerializer)t] 删除 public Boolean delete(Kkey)仆 删除集合中的 key public Long delete( Collection keys){}确定给定的鍵是否存在。 public Boolean hasKey(Kkey){}为 给定的密钥设置生存时间。 public Boolean expire(Kkey, final long timeout, final Timeunit unit){} 为给定的密钥设置生存时间。 public Boolean expireAt( K key, final Date date) 将给定消息发布到给定通道。 public void convertAndSend( String channel, Object message){} 以秒为单位获得钥匙的生存时间。 public Long getExpire(Kkey){ 获取生存时间并将其转换为给定的时间单位。 public Long getExpire(Kkey, final TimeUnit timeUnit){} 查找与给定模式匹配的所有键。 public Set keys( K pattern){} 从给定的密钥中删除过期。 public Boolean persist(Kkey)0 将给定的键移动到具有索引的数据库。 public Boolean move(Kkey, final int dblndex)t} 从键空间返回随机键。 public K randomKey()仆 重命名 key public void rename( K oldKey, NeweY){} 仅当 newkey不存在时,才将 key olename重命名为 newkey。 public Boolean renamelfAbsent( K oldKey, NeweY)份 确定存储在键处的类型。 public dataType type(Kkey)(} 执行 redis dump命令并返回结果。reds使用非标准的序列化机制并包含校验和信息,因此返回原始字节,而不是使用 valueserializer进行反序列化。使用dump的返回值作为要还原的值参数 public bytel] dump(Kkey){} 执行reds还原命令。传入的值应该是从dump( object)返回的准确序列化数据,因为 redis使用非标准序列化机制。 public void restore(Kkey, final byte[l] value, long timeTOLⅳve, TimeUnit unit)标记事务块的开始命令将排队,然后可以通 过调用 Iredisperations.exec()或使用 redisperations. discard()回滚来执行。 public void mult({} 放弃在 redisperations. multi()之后发出的所有命令。 public void discard0{} 在用 gredisperations. multi()启动的事务期间,观察给定的键是否有修改。 public void watch(Kkey){} 刷新所有以前的重读操作。观察(对象)键。 public void unwatch(() 排序 为查询对元素排序。 public List sort( SortQuery query){ return sort(query, value Serializer);} 关闭由客户端中给定的 p port标识的给定客户端连接 public void killClient(final String host, final int port){}请求有关已连接客户端的信息和统计信息。 Override public List getClientList( return execute(RedisServer Commands: getclientList): 将reds复制设置更改为新的主服务器。 Override public void slaveof(final String host, final int port) 将服务器更改为主服务器。 public void slaveofNoone0{ 返回特定于群集的操作接口 Override public ClusterOperations ops For Cluster(){ 返回特定于地理空间的操作接口。 public Geooperations opsForGeoo() 返回绑定到给定键的特定于地理空间的操作接口。 public BoundGeoOperations bound GeoOps(Kkey)0 返回对哈希值执行的操作。 public HashOperations opsForHash0){} 返回对st值执行的操作。 public ListOperations ops ForList0 返回对绑定到给定键的列表值执行的操作。 public BoundListoperations boundListops(Kkey){ 返回对绑定到给定键的se值执行的操作。 public BoundsetOperations boundSetops(Kkey){ 返回对set值执行的操作。 public SetOperations ops Set(){} 返回对zSe值执行的操作。 public BoundZSetoperations boundzSetops(k key)0 测试 以下是方法的测试及结果 redis Template. opsForvalue(:/操亻 作字符串 redis Template. ops ForHash(: //1Fhash redisTemplate ops ForList;/操作lst redisTemplate. opsForset);/操作set redisTemplate。 opsForzset);/操作有序set set void set(K key, V value); C: redisTemplate opsForValue(). set("name","tom 结果: redisTemplate. opsForva1ue().get("name")输出结果为tom 2. set void set(K key, V value, long timeout, TimeUnit unit) E: redisTemplate opsForValue(). set("name","tom", 10, TimeUnit SECONDS); 结果: redisTemplate ops Forvalue()get("nane")由于设置的是18秒失效,十秒之内查询有结果,十秒之后返回为nu1 3. set void set(Kkey, V value, long offset;该方法是用vaue参数覆写 (overwrite)给定key所储存的字符串值,从偏移量 offset开始 史月: template. ops Rvalue0,set"key"," helloworld"); template. ops Forvalue(,set(”keg":" redis",6); Syatem,out.rinn(”******以*****”十 template.. ps Forvaiue(,set"khey")结果:**本**“****** helloredi 4. setlfAbsent Boolean setlfAbsent(k key, v value) 使用: System. out println( template, ops Forvalue(), setifabsent("mu1t11","mu1ti1")):// false mult1之前已经存在 System.out. printin( template. opsForva1ue(). setifabsent("mu1ti1111," multi111"));// true multi111之前不存在 结果: false true 5.multiset void multiSet(Map m) 为多个键分别设置它们的值 ltR: Map maps= new HashMap (): put( multil", multil maps. put("multi2","multi2"); put("multi","multi") template. opsForValue(). multiSet(maps); List keys new ArrayList(; keys. add(" multil") keys. add("multi2"; dd(" multi"); System. out. printin(template. opsForvalue().multiGet(keys)) 结果:[muti1, multi2,mu1ti3] 6. multi setlfabsent boolean multisetlfabsent(Map n)为多个键分别设置它们的值,如果 存在则返回 false,不存在返回true EF: Map maps new HashMap(; maps. put( multil1 maps. put("multi22","multi22) maps. put("multi33","mult133 ) Map maps2= new HashMap(; maps2. put( multil","multi1 ) maps2. put("multi2","multi2") 2. put( multi""multi") System. out. printin(template. opsForvalue(. multisetIfabsent(maps); System. out. printin(template. opsForvalue(. multisetIfAbsent(maps2)); 结果:true false 7.get V get(object key) 1E: template. opsForvalue(. set("key","hello world"); System.out. print⊥n("米*****米x**"+ template. opsForva⊥ue().get("key")) 结果:************he1 lo world 8. getAndSet v getAndSet(Kkey. value;设置键的字符串值并返回其旧值 HEF: template. ops ForValue().set("getSetTest","test") System. out. printIn(template. opsForvalue().getAndSet("getsetTest","test2")); 结果:test 9 multiget list multiget( Collection keys}为多个键分别取出它们的值 LEF: Map maps new HashMap< String, String>(; maps. put("multil","multil") ps put("multi2","multi2"); maps. put("multi","multi template. opsForvalue().multiSet(maps) List keys new ArrayList( dd("multi2") ys. add( "multi"); System. out. printin(template. opsForvalue(.multiGet(keys)) 结果:[ multi1, multi2,mu1ti3] 10. get string get(Kkey, long start; ong end)截取key所对应的 value字符串 使用: appendTest对应的 value为He1loor1d System. out. println("****k+template. ops Forvalue().get"appendTest,0,5)) 结果:*本**He110W EE: System. out. println("*****"+template. opsForValue(. get("appendTest"0,-1)); 结果:****He11wor1d 1E: System. out. println("*****+template. ops Forvalue(. get("appendTest",-3, -1)) 以字符串为中心的便捷类 由于Reds中存储的密钥和值非常常见java1ang. string,因此 Redis模块分别为(及其实现)提供了两个扩展, Redis connection并为密集的 String操作提供了方便的一站式解决方案。除了绑定到键之外,模板和连接使用底层,这意味着 存储的键和值是人类可读的(假设在Reds和您的代码中使用相同的编码)。以下列表显示了一个示例: RedisTemplate StringRedisConnection DefaultstringRedisconnection StringRedisTemplate' String StringRedisse ri彐⊥1Ze beansxmlns="http://www.springframework.org/schema/beans xmins:xsI="http://wwww.w3.org/2001/xmlschema-instance xmins:p=http://www.springframeworkorg/schema/p xsischemalocation="http://www.springframeworkorg/schema/bean nttp://www.springframework.org/schema/beans/spring-beans.xsd"> /beans> public class Example t Autowired private StringRedisTemplate redisTemplate public void addLink(String userId, URLurl)[ redisTemplate. opsForList(.leftPush(userId, url. toExternalformo); 由于与其他 Spring模板, RedisTemplate并 StringRedis Template让你直接通过交谈Redi的 Redisca1back界面。此功能为 您提供完全控制,因为它直接与您对话 DiscoNnection。请注意,回调接收使用 StringRedisConnection a时的实例 StringRedisTemplate。以下示例显示如何使用该 Rediscallback接口 public void useCallback()[ redis Template. execute(new Rediscallback object>()f public object doInredis( redisConnection connection throws DataAccessexception i Long size connection dbsize; // Can cast to stringRedisconnection if using a StringRedisTemplate ((StringRedisConnection)connection).set( key","value") 串行器 从框架的角度来看,存储在Reds中的数据只是字节数。虽然 Redis本身支持各种类型,但大多数情况下,这些类型指的是数据 的存储方式而不是它所代表的方式。由用户决定信息是否被翻译成字符串或任何其他对象 在 Spring Data中,用户(自定义)类型和原始数据之间的转换(反之亦然)在 org. spring+ ramework. data. redis. serializer包中处理Reds。 该软件包包含两种类型的序列化程序,顾名思义,它们负责序列化过程 基于的双向序列化器 器 Redisseria1 使用 RedisElementReade和的元素读者和作者 RediselementWriter 这些变体之间的主要区别在于, Redisserializer主要是byt[]在读者和作者使用时序列化 ByteBuffer 可以使用多种实现(包括本文档中已经提到的两种实现): ksenia1 ization Redisserializer,默认用于 Rediscache和 RedisTemplate 这个 StringRedisserializer 但是,可以0me1a1er通过 Spring oXM支持用于对象/M映射, Jacks0n2 JsonRedisSeria1i或者 GenericJackson2 J sonRedisserializer用于以SON格式存储数据。 请注意,存储格式不仅限于值。它可以用于键,值或哈希,没有任何限制 默认情况下, Rediscache并 RedisTemplate配置为使用ava本机序列化。众所周知,Java本机序列化允许由利 用易愛攻击的库和类注入未经验证的宇节码的有效负载引起的远程代码执行。在反序列化步骤中,操作输入可能 导致应用程序中不需要的代码执行。因此,请勿在不受信任的环境中使用序列化。通常,我们强烈建议使用任何 其他消息格式(例如JsoN)。如果您担心ava序列化导致的安全漏洞,请考虑核心VM级别的通用序列化过滤机 制,最初为DK9开发但向后移植到DK87和6:过滤传入的序列化数。JP290。 OWASP:不受信任数据的反 序列化。 哈希映射 可以使用Reds中的各种数据结构存储数据。 Jackson2 )sonRedisSer1a1zen可以转换ON格式的对彖。理想情况下,可以使 用普通键将」SoN存储为值。您可以使用 Redis哈希实现更复杂的结构化对象映射。sρriη g Data Rεdis提供了眢种将数据映射到 哈希的策略(取决于用例) 通过使用 Ha shoperations和序列化器直接映射 使用Reds存储库 使用 HashMapper和 HashOperations 哈希映射器 哈希映射器是地图对象到 a mapkk,V和back的转换器。 HashMapper适用于 Redis hashes。 有多种实现方式 BeanutilsHashMapper使用 spring的 Beanutils objectHashMapper使用对象哈希映射。 ackson2 HashMapper使用 asterXML jackson 以下示例显示了实现哈希映射的-种方法: oublic class Person i String firstname; String lastname; public class HashMapping i aAutowired Hashoperations hashOperations; HashMapper mapper= new objectHash Mapper(; public void writeHash(String key, Person person)i Map mappedHash =mapper. toHash(person); hashoperations putAll(key, mappedHash) public Person loadHash(String key)i Map loadedHash hashOperations entries(key "); return (Person)mapper. fromHash (loadedHash);
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: