redis操作测试

redisTemplate.opsForValue() 懂这些就够了 hello,我是小索奇,redisTemplate.opsForValue() 是 Spring Data Redis 提供的一个操作字符串类型数据的工具方法。通过这个方法,你可以获取一个 ValueOperations 对象,然后使用该对象进行对 Redis 中字符串类型数据的操作,比如存储、读取、删除等。下是 ValueOperations 的一些常用方法哈。 阅读详情
  1. package com.transn;  
  2.   
  3.   
  4. import java.util.ArrayList;  
  5. import java.util.HashMap;  
  6. import java.util.HashSet;  
  7. import java.util.List;  
  8. import java.util.Map;  
  9. import java.util.Set;  
  10. import java.util.concurrent.TimeUnit;  
  11. import java.util.concurrent.locks.Lock;  
  12.   
  13. import javax.annotation.Resource;  
  14.   
  15. import org.junit.Test;  
  16. import org.junit.runner.RunWith;  
  17. import org.springframework.beans.factory.annotation.Autowired;  
  18. import org.springframework.data.redis.core.HashOperations;  
  19. import org.springframework.data.redis.core.ListOperations;  
  20. import org.springframework.data.redis.core.RedisOperations;  
  21. import org.springframework.data.redis.core.SetOperations;  
  22. import org.springframework.data.redis.core.StringRedisTemplate;  
  23. import org.springframework.data.redis.core.ValueOperations;  
  24. import org.springframework.data.redis.core.ZSetOperations;  
  25. import org.springframework.data.redis.core.ZSetOperations.TypedTuple;  
  26. import org.springframework.test.context.ContextConfiguration;  
  27. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  28. import org.springframework.test.context.transaction.TransactionConfiguration;  
  29. import org.springframework.transaction.annotation.Transactional;  
  30.   
  31. import com.alibaba.fastjson.JSON;  
  32. import com.transn.common.rediscache.CacheOperator;  
  33. import com.transn.common.redislock.SimpleRedisLockFactoryBean;  
  34. import com.transn.customer.dao.CustomerMapper;  
  35. import com.transn.customer.model.Customer;  
  36. import com.transn.customer.model.Invoice;  
  37. import com.transn.message.model.MessageContent;  
  38. import com.transn.message.model.MessageInfo;  
  39. import com.transn.tr.sys.model.SysLan;  
  40. import com.transn.tr.sys.model.SysPriceRange;  
  41. import com.transn.tr.user.model.TruserInfo;  
  42.   
  43. @SuppressWarnings("deprecation")  
  44. @RunWith(SpringJUnit4ClassRunner.class) // 整合  
  45. @ContextConfiguration(locations={"classpath:spring.xml","classpath:spring-mybatis.xml"})  
  46. @TransactionConfiguration(defaultRollback = false)  
  47. @Transactional  
  48. public class RedisTest {  
  49.     @Autowired  
  50.     private StringRedisTemplate stringRedisTemplate;  
  51.       
  52.     //试试注入这个lockFactory  
  53. /*  @Resource 
  54.     private IRedisLockFactoryBean lockFactory;*/  
  55.     @Resource  
  56.     private SimpleRedisLockFactoryBean lockFactory;  
  57.       
  58.     @Resource(name= "stringRedisTemplate")  
  59.     private ValueOperations<String, String> opsForValue;  
  60.       
  61.     @Resource(name= "stringRedisTemplate")  
  62.     private HashOperations<String,String,String> opsForHash;  
  63.       
  64.     @Resource(name= "stringRedisTemplate")  
  65.     private ListOperations<String, String> opsForList;  
  66.   
  67.     @Resource(name= "stringRedisTemplate")  
  68.     private SetOperations<String,String> opsForSet;  
  69.   
  70.     @Resource(name= "stringRedisTemplate")  
  71.     private ZSetOperations<String,String> opsForZSet;  
  72.   
  73.      
  74.     @Resource  
  75.     private CustomerMapper mapper;  
  76.       
  77.     @Resource  
  78.     private CacheOperator cache;  
  79.       
  80.     @Test  
  81.     public void cacheInitTest() throws Exception {  
  82.         cache.initPriceRangeToRedisCashe();  
  83.         cache.initSysLanToRedisCashe();  
  84.         cache.initTrAbilityToRedisCashe();  
  85.     }  
  86.       
  87.     @Test  
  88.     public void cacheGetTest() throws Exception {  
  89.         SysLan sysLanFromRedisCashe = cache.getSysLanFromRedisCashe("en-GB");  
  90.         System.out.println(JSON.toJSONString(sysLanFromRedisCashe));  
  91.         String count = cache.getTrAbilityFromRedisCashe("zh-CN", "ja");  
  92.         System.out.println(count);  
  93.         Set<SysPriceRange> priceRangeFromRedisCashe = cache.getPriceRangeFromRedisCashe("CNY");  
  94.         System.out.println(JSON.toJSONString(priceRangeFromRedisCashe));  
  95.     }  
  96.       
  97.     @Test  
  98.     public void test() throws Exception {  
  99. /*      ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue(); 
  100.         HashOperations<String, Object, Object> opsForHash = stringRedisTemplate.opsForHash(); 
  101.         ListOperations<String, String> opsForList = stringRedisTemplate.opsForList(); 
  102.         SetOperations<String, String> opsForSet = stringRedisTemplate.opsForSet(); 
  103.         ZSetOperations<String, String> opsForZSet = stringRedisTemplate.opsForZSet();*/  
  104.           
  105.         Invoice invoice3 = new Invoice();  
  106.         invoice3.setCid("WE60000000CU");  
  107.         invoice3.setAmount(798d);  
  108.         invoice3.setCurrency("USD");  
  109.         invoice3.setTag("烽火集团");  
  110.         invoice3.setType("1");  
  111.         invoice3.setContent("2");  
  112.         invoice3.setAddress("高新四路");  
  113.         String invoice3String = JSON.toJSONString(invoice3);      
  114.         Boolean putIfAbsent = opsForHash.putIfAbsent("WETRANSN:INVOICE:CID", "WE60000000CU", invoice3String);  
  115.         System.out.println(putIfAbsent);  
  116.         String invoice = opsForHash.get("WETRANSN:INVOICE:CID", "WE60000000CU");  
  117.         Invoice parseObject = JSON.parseObject(invoice, Invoice.class);  
  118.         System.out.println(parseObject.getTag());  
  119.     }  
  120.       
  121.     @Test  
  122.     public void testOpsForValue() throws Exception {  
  123.         //测试分布式锁和opsForValue  
  124.         Lock lock = lockFactory.createLock("WETRANSN:LOCK:TEST");  
  125.         try {  
  126.             lock.lock();  
  127.             Customer customer = new Customer();  
  128.             customer.setCid("WE20000000CU");  
  129.             customer.setNickname("龙井");  
  130.             customer.setPwd("123456");  
  131.             customer.setPhone("15527411803");  
  132.             customer.setEmail("green.long@transn.com");  
  133.             customer.setCompanyName("传神语联网");  
  134.             customer.setBusiness("翻译软件");  
  135.             customer.setContacts("何恩培");  
  136.             customer.setInformation("027-59738888");  
  137.             customer.setcreateTime(1473734828l);  
  138.             customer.setLoginTime(1474943729l);  
  139.             customer.setSellId("WE16100036SA");  
  140.             customer.setCfrom("CHN");  
  141.             String customerString = JSON.toJSONString(customer);  
  142.             //mapper.insert(customer);  
  143.               
  144.             opsForValue.set("WETRANSN:CUSTOMER", customerString);  
  145.             //设置"WETRANSN:CUSTOMER:CONTACTS"的值为"何恩培",30秒后失效  
  146.             opsForValue.set("WETRANSN:CUSTOMER:CONTACTS", "何恩培", 30, TimeUnit.SECONDS);  
  147.             //=======暂时不知道含义=======  
  148.             opsForValue.set("WETRANSN:CUSTOMER:PHONE", "15527411803", 5l);  
  149.             //=======暂时不知道含义=======  
  150.             Boolean setBit1 = opsForValue.setBit("WETRANSN:CUSTOMER:PWD1", 0L, true);  
  151.             System.out.println("setBit1:"+setBit1);  
  152.             //=======暂时不知道含义=======  
  153.             Boolean setBit2 = opsForValue.setBit("WETRANSN:CUSTOMER:PWD2", 0L, false);  
  154.             System.out.println("setBit2:"+setBit2);  
  155.             //=======暂时不知道含义=======  
  156.             Boolean getbit = opsForValue.getBit("WETRANSN:CUSTOMER:PWD2", 0l);  
  157.             System.out.println("getbit:"+getbit);  
  158.               
  159.             //如果"WETRANSN:CUSTOMER"存在返回false;如果"WETRANSN:CUSTOMER"不存在,就存入reidis返回true  
  160.             Boolean setIfAbsent = opsForValue.setIfAbsent("WETRANSN:CUSTOMER2", customerString);  
  161.             System.out.println("setIfAbsent:"+setIfAbsent);       
  162.             //获取"WETRANSN:CUSTOMER"的值  
  163.             String get = opsForValue.get("WETRANSN:CUSTOMER");  
  164.             System.out.println("get:"+get);  
  165.             //获取"WETRANSN:CUSTOMER:CID"的值串的[2,5]  
  166.             String get2 = opsForValue.get("WETRANSN:CUSTOMER:CID", 2l, 5l);  
  167.             System.out.println("get2:"+get2);  
  168.             //如果有“WE20000000CU”就返回“WE20000000CU”,并且赋值为“15527411803”  
  169.             String getAndSet1 = opsForValue.getAndSet("WETRANSN:CUSTOMER:CID", "15527411803");  
  170.             System.out.println("getAndSet1:"+getAndSet1);  
  171.             //如果没有“张三”就返回null,并且赋值为“张三”  
  172.             String getAndSet2 = opsForValue.getAndSet("WETRANSN:CUSTOMER:NICKNAME", "张三");  
  173.             System.out.println("getAndSet2:"+getAndSet2);  
  174.             //Long类型的数值累加  
  175.             Long increment1 = opsForValue.increment("WETRANSN:CUSTOMER:CREATETIME", 1473734828l);  
  176.             System.out.println("increment1:"+increment1);  
  177.             //Double类型的数值累加  
  178.             Double increment2 = opsForValue.increment("WETRANSN:CUSTOMER:MONEY", 5600d);  
  179.             System.out.println("increment2:"+increment2);  
  180.             //字符串连接,返回增加到第几个字节  
  181.             Integer append1 = opsForValue.append("WETRANSN:CUSTOMER:COMPANYNAME", "chuanshen");  
  182.             System.out.println("append1:"+append1);  
  183.             Integer append2 = opsForValue.append("WETRANSN:CUSTOMER:COMPANYNAME", "yulianwang");  
  184.             System.out.println("append2:"+append2);  
  185.               
  186.         } finally {  
  187.             lock.unlock();  
  188.         }  
  189.     }  
  190.       
  191.     @Test  
  192.     public void testOpsForHash() throws Exception {  
  193.         //hashMap放入键值对  
  194.         Invoice invoice1 = new Invoice();  
  195.         invoice1.setCid("WE30000000CU");  
  196.         invoice1.setAmount(488d);  
  197.         invoice1.setCurrency("CHN");  
  198.         invoice1.setTag("语联网(武汉)信息技术有限公司");  
  199.         invoice1.setType("2");  
  200.         invoice1.setContent("1");  
  201.         invoice1.setAddress("光谷E城,E2栋5楼");  
  202.         String invoice1String = JSON.toJSONString(invoice1);  
  203.         Invoice invoice2 = new Invoice();  
  204.         invoice2.setCid("WE40000000CU");  
  205.         invoice2.setAmount(599d);  
  206.         invoice2.setCurrency("SGP");  
  207.         invoice2.setTag("天津蓝晶光电技术股份有限公司");  
  208.         invoice2.setType("1");  
  209.         invoice2.setContent("2");  
  210.         invoice2.setAddress("光谷大道");  
  211.         String invoice2String = JSON.toJSONString(invoice2);  
  212.         Invoice invoice3 = new Invoice();  
  213.         invoice3.setCid("WE50000000CU");  
  214.         invoice3.setAmount(788d);  
  215.         invoice3.setCurrency("USD");  
  216.         invoice3.setTag("湖北东风汽车有限公司");  
  217.         invoice3.setType("1");  
  218.         invoice3.setContent("2");  
  219.         invoice3.setAddress("神龙大道");  
  220.         String invoice3String = JSON.toJSONString(invoice2);      
  221.         opsForHash.put("WETRANSN:INVOICE:CID", "WE30000000CU", invoice1String);  
  222.         opsForHash.put("WETRANSN:INVOICE:CID", "WE40000000CU", invoice2String);  
  223.         //如果不存在则返回true,并且存入redis;如果存在则返回false  
  224.         Boolean putIfAbsent = opsForHash.putIfAbsent("WETRANSN:INVOICE:TAG", "WE30000000CU", "语联网(武汉)信息技术有限公司");  
  225.         System.out.println(putIfAbsent);  
  226.         Boolean putIfAbsent2 = opsForHash.putIfAbsent("WETRANSN:INVOICE:CID", "WE50000000CU", invoice3String);  
  227.         System.out.println(putIfAbsent2);  
  228.         //将map的键值对依次放入"WETRANSN:INVOICE:INVOICE"  
  229.         Map<String, String> allMap = new HashMap<String, String>();  
  230.         allMap.put("cid", "WE50000000CU");  
  231.         allMap.put("amount", "699");  
  232.         allMap.put("currency", "USD");  
  233.         allMap.put("tag", "华为科技");  
  234.         allMap.put("type", "1");  
  235.         allMap.put("content", "1");  
  236.         allMap.put("address", "未来城");     
  237.         opsForHash.putAll("WETRANSN:INVOICE:INVOICE", allMap);  
  238.         //根据redis标识和主键取值  
  239.         String get = opsForHash.get("WETRANSN:INVOICE:INVOICE", "address");  
  240.         System.out.println(get);  
  241.         //判断"WETRANSN:INVOICE:CID"中是否有存在的key  
  242.         Boolean hasKey = opsForHash.hasKey("WETRANSN:INVOICE:CID", "WE90000000CU");  
  243.         System.out.println(hasKey);  
  244.         //删除"WETRANSN:INVOICE:INVOICE"中Key为"content"的记录  
  245.         opsForHash.delete("WETRANSN:INVOICE:INVOICE", "content");  
  246.         //根据Collection类型的多个key,获取一个List集合的值  
  247.         List<String> cid = new ArrayList<String>();   
  248.         cid.add("WE30000000CU");  
  249.         cid.add("WE40000000CU");  
  250.         List<String> multiGet = opsForHash.multiGet("WETRANSN:INVOICE:CID", cid);  
  251.         System.out.println(multiGet);  
  252.         Set<String> cid2 = new HashSet<String>();  
  253.         cid2.add("WE30000000CU");  
  254.         cid2.add("WE40000000CU");  
  255.         List<String> multiGet2 = opsForHash.multiGet("WETRANSN:INVOICE:CID", cid2);  
  256.         System.out.println(multiGet2);  
  257.         //获取"WETRANSN:INVOICE:CID"下所有的key  
  258.         Set<String> keys = opsForHash.keys("WETRANSN:INVOICE:CID");  
  259.         System.out.println(keys);  
  260.         //获取"WETRANSN:INVOICE:CID"下所有的value  
  261.         List<String> values = opsForHash.values("WETRANSN:INVOICE:CID");  
  262.         System.out.println(values);  
  263.         //获取"WETRANSN:INVOICE:CID"的元素长度  
  264.         Long size = opsForHash.size("WETRANSN:INVOICE:CID");  
  265.         System.out.println(size);  
  266.         //获取形如:{WE30000000CU={"address":"光谷E城,E2栋5楼","amount":488,"cid":"WE30000000CU","content":"1","currency":"CHN","tag":"语联网(武汉)信息技术有限公司","type":"2"}, WE50000000CU={"address":"光谷大道","amount":599,"cid":"WE40000000CU","content":"2","currency":"SGP","tag":"天津蓝晶光电技术股份有限公司","type":"1"}, WE40000000CU={"address":"光谷大道","amount":599,"cid":"WE40000000CU","content":"2","currency":"SGP","tag":"天津蓝晶光电技术股份有限公司","type":"1"}}  
  267.         Map<String, String> entries = opsForHash.entries("WETRANSN:INVOICE:CID");  
  268.         System.out.println(entries);  
  269.         //累计long和double类型的数字  
  270.         Double increment = opsForHash.increment("WETRANSN:INVOICE:AMOUNT", "WE30000000CU", 699d);  
  271.         System.out.println(increment);  
  272.         Long increment2 = opsForHash.increment("WETRANSN:INVOICE:AMOUNT", "WE40000000CU", 788l);  
  273.         System.out.println(increment2);  
  274.         //org.springframework.data.redis.core.StringRedisTemplate@53dad875  
  275.         RedisOperations<String, ?> operations = opsForHash.getOperations();  
  276.         System.out.println(operations);  
  277.           
  278.     }  
  279.       
  280.       
  281.     @Test  
  282.     public void testOpsForList() throws Exception {  
  283.         TruserInfo user = new TruserInfo();  
  284.         user.setTr_id("WE16000159TR");  
  285.         user.setNickname("祝思");  
  286.         user.setPwd("e10adc3949ba59abbe56e057f20f883e");  
  287.         user.setPhone("18900000000");  
  288.         user.setEmail("juice.zhu@transn.com");  
  289.         user.setCreate_time(1471105486l);  
  290.         user.setCfrom("CHN");  
  291.         user.setCurrency("CNY");  
  292.         String userString = JSON.toJSONString(user);      
  293.         TruserInfo user2 = new TruserInfo();  
  294.         user2.setTr_id("WE16000160TR");  
  295.         user2.setNickname("熊晶");  
  296.         user2.setPwd("e10adc3949ba59abbe56e057f20f883e");  
  297.         user2.setPhone("19000000000");  
  298.         user2.setEmail("webb.xiong@transn.com");  
  299.         user2.setCreate_time(1471105486l);  
  300.         user2.setCfrom("CHN");  
  301.         user2.setCurrency("CNY");  
  302.         String user2String = JSON.toJSONString(user2);    
  303.         //放入"WETRANSN:TRUSER:TRID"集合,返回行数(不排重)  
  304.         Long leftPush = opsForList.leftPush("WETRANSN:TRUSER:TRID", userString);  
  305.         Long leftPush2 = opsForList.leftPush("WETRANSN:TRUSER:TRID", user2String);  
  306.         System.out.println(leftPush);  
  307.         System.out.println(leftPush2);  
  308.         //将N个值全部放入"WETRANSN:TRUSER:NICKNAME",返回总个数(不排重)  
  309.         Long leftPushAll = opsForList.leftPushAll("WETRANSN:TRUSER:NICKNAME", "祝思","熊晶","董畅");  
  310.         System.out.println(leftPushAll);  
  311.         List<String> phone = new ArrayList<String>();   
  312.         phone.add("18900000000");  
  313.         phone.add("19000000000");  
  314.         phone.add("19100000000");  
  315.         phone.add("19200000000");  
  316.         //将集合全部放入"WETRANSN:TRUSER:PHONE",返回总个数(不排重)  
  317.         Long leftPushAll2 = opsForList.leftPushAll("WETRANSN:TRUSER:PHONE", phone);  
  318.         System.out.println(leftPushAll2);  
  319.         //如果"WETRANSN:TRUSER:NICKNAME2"存在,则放入"WETRANSN:TRUSER:NICKNAME2"中,返回行数  
  320.         //如果"WETRANSN:TRUSER:NICKNAME2"不存在,则不操作,返回0  
  321.         Long leftPushIfPresent = opsForList.leftPushIfPresent("WETRANSN:TRUSER:NICKNAME2", "蒋汉华");  
  322.         System.out.println(leftPushIfPresent);  
  323.         //从左边开始删除值,返回删除的值  
  324.         String leftPop = opsForList.leftPop("WETRANSN:TRUSER:PHONE");  
  325.         System.out.println(leftPop);  
  326.         //删除超时弄不清楚  
  327.         String leftPop2 = opsForList.leftPop("WETRANSN:TRUSER:PHONE", 1, TimeUnit.NANOSECONDS);  
  328.         System.out.println(leftPop2);  
  329.         //取从左往右[0,1]的所有值的集合  
  330.         List<String> range = opsForList.range("WETRANSN:TRUSER:NICKNAME", 0, 1);  
  331.         System.out.println(range);  
  332.         //获取"WETRANSN:TRUSER:NICKNAME"的个数  
  333.         Long size = opsForList.size("WETRANSN:TRUSER:NICKNAME");  
  334.         System.out.println(size);  
  335.         //删除除了[0,1]以外的所有元素  
  336.         opsForList.trim("WETRANSN:TRUSER:NICKNAME", 0, 1);  
  337.         //更新已有的元素(从0开始),如果没有则会出现越界异常,如果没有这个元素的key,也会出现找不到key的异常  
  338.         opsForList.set("WETRANSN:TRUSER:NICKNAME", 0, "龙津");  
  339.         opsForList.set("WETRANSN:TRUSER:NICKNAME2", 1, "明正");  
  340.         //删除N个元素值为“XXXX”,返回删除的个数;如果没有这个元素则返回0  
  341.         Long remove = opsForList.remove("WETRANSN:TRUSER:NICKNAME", 3, "龙津");  
  342.         System.out.println(remove);  
  343.         //列出index行的值,从0开始  
  344.         String index = opsForList.index("WETRANSN:TRUSER:PHONE", 0);  
  345.         System.out.println(index);  
  346.         //将源key的队列的右边的一个值删除,然后塞入目标key的队列的左边,返回这个值  
  347.         String rightPopAndLeftPush = opsForList.rightPopAndLeftPush("WETRANSN:TRUSER:PHONE", "WETRANSN:TRUSER:NICKNAME");  
  348.         System.out.println(rightPopAndLeftPush);  
  349.     }  
  350.       
  351.     @Test  
  352.     public void testOpsForSet() throws Exception {  
  353.         SysLan sysLan = new SysLan();  
  354.         sysLan.setCnname("中文");  
  355.         sysLan.setCode("zh-CN");  
  356.         sysLan.setEnname("Simplified Chinese");  
  357.         sysLan.setId("100000");  
  358.         String sysLanString = JSON.toJSONString(sysLan);  
  359.         SysLan sysLan1 = new SysLan();  
  360.         sysLan1.setCnname("英语");  
  361.         sysLan1.setCode("en");  
  362.         sysLan1.setEnname("English");  
  363.         sysLan1.setId("100001");  
  364.         String sysLan1String = JSON.toJSONString(sysLan1);  
  365.         SysLan sysLan2 = new SysLan();  
  366.         sysLan2.setCnname("法语");  
  367.         sysLan2.setCode("fr");  
  368.         sysLan2.setEnname("French");  
  369.         sysLan2.setId("100002");  
  370.         String sysLan2String = JSON.toJSONString(sysLan2);  
  371.         SysLan sysLan3 = new SysLan();  
  372.         sysLan3.setCnname("德语");  
  373.         sysLan3.setCode("de");  
  374.         sysLan3.setEnname("German");  
  375.         sysLan3.setId("100003");  
  376.         String sysLan3String = JSON.toJSONString(sysLan3);  
  377.         //如果不存在这个字符串,将字符串存入set集合,返回存入元素的个数;如果存在这个字符串就不操作,返回0;  
  378.         Long add = opsForSet.add("WETRANSN:SYSLAN2", sysLan3String);  
  379.         Long addmore = opsForSet.add("WETRANSN:SYSLAN", sysLanString, sysLan1String, sysLan2String,sysLan3String);  
  380.         System.out.println(add);  
  381.         System.out.println(addmore);  
  382.         //列出key为"WETRANSN:SYSLAN"的所有set集合  
  383.         Set<String> members = opsForSet.members("WETRANSN:SYSLAN");  
  384.         System.out.println(members);  
  385.         //随机取key为"WETRANSN:SYSLAN"的一个set元素  
  386.         String randomMember = opsForSet.randomMember("WETRANSN:SYSLAN");  
  387.         System.out.println(randomMember);  
  388.         //随机取N次key为"WETRANSN:SYSLAN",组成一个list集合,可以重复取出  
  389.         List<String> randomMembers = opsForSet.randomMembers("WETRANSN:SYSLAN", 3);  
  390.         System.out.println(randomMembers);  
  391.         //随机取N次key为"WETRANSN:SYSLAN",组成一个set集合,不可以重复取出  
  392.         Set<String> distinctRandomMembers = opsForSet.distinctRandomMembers("WETRANSN:SYSLAN", 2);  
  393.         System.out.println(distinctRandomMembers);  
  394.         //sysLan1String字符串是否是key为"WETRANSN:SYSLAN"set集合的元素  
  395.         Boolean member = opsForSet.isMember("WETRANSN:SYSLAN", sysLan1String);  
  396.         System.out.println(member);  
  397.         //将字符串sysLanString从key为"WETRANSN:SYSLAN"的集合,移动到key为"WETRANSN:SYSLAN2"的集合,返回是否移动成功  
  398. //      Boolean move = opsForSet.move("WETRANSN:SYSLAN", sysLanString, "WETRANSN:SYSLAN2");  
  399. //      System.out.println(move);  
  400.         //删除key为"WETRANSN:SYSLAN"的元素sysLan1String、sysLan2String的字符串,返回删除的个数  
  401. //      Long remove = opsForSet.remove("WETRANSN:SYSLAN", sysLan1String, sysLan2String);  
  402. //      System.out.println(remove);  
  403.         //从左侧依次删除元素  
  404. //      String pop = opsForSet.pop("WETRANSN:SYSLAN");  
  405. //      System.out.println(pop);  
  406.         //返回集合长度  
  407.         Long size = opsForSet.size("WETRANSN:SYSLAN");  
  408.         System.out.println(size);  
  409.         //difference(K key, K otherKey);  
  410.         //比较key与otherKey的set集合,返回与otherKey集合不一样的set集合  
  411.         Set<String> difference = opsForSet.difference("WETRANSN:SYSLAN","WETRANSN:SYSLAN2");  
  412.         System.out.println(difference);  
  413.         Set<String> difference2 = opsForSet.difference("WETRANSN:SYSLAN2","WETRANSN:SYSLAN");  
  414.         System.out.println(difference2);  
  415.         //differenceAndStore(K key, K otherKey, K destKey);  
  416.         //比较key与otherKey的set集合,取出与otherKey的set集合不一样的set集合,并存入destKey的set集合中,返回存入个数  
  417.         Long differenceAndStore = opsForSet.differenceAndStore("WETRANSN:SYSLAN","WETRANSN:SYSLAN2", "WETRANSN:SYSLAN3");  
  418.         System.out.println(differenceAndStore);  
  419.         //intersect(K key, K otherKey);  
  420.         //比较key与otherKey的set集合,取出二者交集,返回set交集合  
  421.         Set<String> intersect = opsForSet.intersect("WETRANSN:SYSLAN","WETRANSN:SYSLAN2");  
  422.         System.out.println(intersect);  
  423.         Set<String> intersect2 = opsForSet.intersect("WETRANSN:SYSLAN2","WETRANSN:SYSLAN");  
  424.         System.out.println(intersect2);  
  425.         //intersectAndStore(K key, K otherKey, K destKey);  
  426.         //比较key与otherKey的set集合,取出二者交集,并存入destKey集合,返回null  
  427.         Long intersectAndStore = opsForSet.intersectAndStore("WETRANSN:SYSLAN","WETRANSN:SYSLAN3", "WETRANSN:SYSLAN4");  
  428.         System.out.println(intersectAndStore);  
  429.         //union(K key, K otherKey)  
  430.         //比较key与otherKey的set集合,取出二者并集,返回set并集合  
  431.         Set<String> union = opsForSet.union("WETRANSN:SYSLAN","WETRANSN:SYSLAN2");  
  432.         System.out.println(union);  
  433.         //unionAndStore(K key, K otherKey, K destKey)  
  434.         //比较key与otherKey的set集合,取出二者并集,并存入destKey集合,返回destKey集合个数  
  435.         Long unionAndStore = opsForSet.unionAndStore("WETRANSN:SYSLAN", "WETRANSN:SYSLAN2", "WETRANSN:SYSLAN5");  
  436.         System.out.println(unionAndStore);  
  437.     }  
  438.       
  439.     @Test  
  440.     public void testOpsForZSet() throws Exception {  
  441.         MessageContent message1 = new MessageContent();  
  442.         message1.setMsgId(1);  
  443.         message1.setMsgContent("内容1");  
  444.         message1.setReceiverType("TR");  
  445.         message1.setCfrom("CHN");  
  446.         String message1String = JSON.toJSONString(message1);  
  447.         MessageContent message2 = new MessageContent();  
  448.         message2.setMsgId(2);  
  449.         message2.setMsgContent("内容2");  
  450.         message2.setReceiverType("TQ");  
  451.         message2.setCfrom("USD");  
  452.         String message2String = JSON.toJSONString(message2);  
  453.         MessageContent message3 = new MessageContent();  
  454.         message3.setMsgId(3);  
  455.         message3.setMsgContent("内容3");  
  456.         message3.setReceiverType("ZJ");  
  457.         message3.setCfrom("SGP");  
  458.         String message3String = JSON.toJSONString(message3);  
  459.         MessageContent message4 = new MessageContent();  
  460.         message4.setMsgId(4);  
  461.         message4.setMsgContent("内容4");  
  462.         message4.setReceiverType("RT");  
  463.         message4.setCfrom("CVB");  
  464.         String message4String = JSON.toJSONString(message4);  
  465. //      Set<String> messageSet = new HashSet<String>();  
  466. //      messageSet.add(message1String);  
  467.         //存入字符串和排序号到zset  
  468.         Boolean add = opsForZSet.add("WETRANSN:MESSAGE2", message1String, 1);  
  469.         Boolean add2 = opsForZSet.add("WETRANSN:MESSAGE2", message2String, 3);  
  470.         Boolean add3 = opsForZSet.add("WETRANSN:MESSAGE2", message3String, 5);  
  471.         Boolean add4 = opsForZSet.add("WETRANSN:MESSAGE2", message4String, 9);  
  472.         System.out.println(add);  
  473.         //取key为"WETRANSN:MESSAGE1"集合,从0到1,返回取出来的集合;0到-1是取全部;  
  474.         Set<String> range = opsForZSet.range("WETRANSN:MESSAGE1",0,1);  
  475.         System.out.println(range);  
  476.         //删除一个或多个值,返回删除个数  
  477. //      Long remove = opsForZSet.remove("WETRANSN:MESSAGE1", message3String);  
  478. //      System.out.println(remove);  
  479.         //删除[M,N]行号的值,返回删除个数  
  480. //      Long removeRange = opsForZSet.removeRange("WETRANSN:MESSAGE2", 0, 1);  
  481. //      System.out.println("removeRange:"+removeRange);  
  482.         //删除[M,N]序列号的值,返回删除个数  
  483. //      Long removeRangeByScore = opsForZSet.removeRangeByScore("WETRANSN:MESSAGE2", 0, 4);  
  484. //      System.out.println("removeRangeByScore:"+removeRangeByScore);  
  485.         //取行号,从0开始  
  486.         Long rank = opsForZSet.rank("WETRANSN:MESSAGE1", message3String);  
  487.         System.out.println(rank);  
  488.         //取反转行号,与rank相反  
  489.         Long reverseRank = opsForZSet.reverseRank("WETRANSN:MESSAGE1", message3String);  
  490.         System.out.println(reverseRank);  
  491.         //取double类型的序列号  
  492.         Double score = opsForZSet.score("WETRANSN:MESSAGE1", message3String);  
  493.         System.out.println(score);  
  494.         //列出序列号从[N,M]的元素个数  
  495.         Long count = opsForZSet.count("WETRANSN:MESSAGE1", 0, 3);  
  496.         System.out.println(count);  
  497.         //返回集合的长度  
  498.         Long size = opsForZSet.size("WETRANSN:MESSAGE2");  
  499.         System.out.println(size);  
  500.         //返回集合的长度  
  501.         Long zCard = opsForZSet.zCard("WETRANSN:MESSAGE2");  
  502.         System.out.println(zCard);  
  503.       
  504.       
  505.       
  506.       
  507.     }  
  508.       
  509. } 
第3章 信息技术服务(一) 对 第三章 《信息技术服务》中第一、二、三节 <内涵与外延、原理与组成、服务生命周期>进行总结、归纳 阅读详情

相关推荐

日前日内多阶段多时间尺度源荷储协调调度(matlab代码)

多阶段多时间尺度的协调调度的优势是考虑新能源出力的波 动性与随机性,需求响应负荷的不确定性会对电网制定的日前调度计划准确性造成影响,也就是能够更加精准的进行调度和分析,优化结果的可用性更强。在这方面论文里面,金力的《考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略》就考虑了日前日内实时三个阶段调度,每个阶段考虑了不同负荷需求响应策略,同时考虑了负荷波动性的影响,具有很强的参考意义。 目录 一、模型 二、程序运行 三、程序链接 一、模型 负荷需求响应考虑电价型和激励型两种,电.

zhangxd212489的博客 7915

Redis 计数器 高并发的应用

计数器的基本使用 /** * redis计数器 * @param key 键 * @return */ public Long test(String key){ //key为key,delta为递增数目,返回值为增长后的数量。 Long increment = redisTemplate.opsForV...

xzh_blog 4773

用示波器抓一次MIPI D-PHY的波形,手把手教你读懂HS模式和LP模式的切换时序

本文详细解析了MIPI D-PHY信号的双模切换机制,包括高速模式(HS)和低功耗模式(LP)的波形捕获与诊断技巧。通过示波器设置、关键状态分析和实战案例,帮助工程师快速定位信号完整性问题,提升调试效率。

weixin_30696427的博客 456

stringRedisTemplate之opsForValue使用说明

这个是针对字符串的存储,若是存对象,请使用redisTemplate 1、 set(K key, V value) 新增一个字符串类型的值,key是键,value是值。 stringRedisTemplate.opsForValue().set("stringValue","bbb"); 2、get(Object key) String stringValue = stringRedisTemplate.opsForValue().get("key") 3、append(K key, String v

qq_43409811的博客 1万+

当GO.db安装失败时,生物信息学新手应该知道的5个底层逻辑

本文为生物信息学新手提供了解决GO.db安装失败的5个关键底层逻辑,包括网络连接与镜像源设置、版本兼容性检查、依赖关系管理、SQLite存储机制理解以及调试技巧。特别针对Bioconductor的GO.db包安装问题,详细介绍了如何通过切换国内镜像、管理版本冲突和解决依赖问题来成功安装,帮助用户高效克服常见安装障碍。

weixin_29062823的博客 407

树莓派与无人机协同实战:基于OpenCV的地标识别优化策略

本文深入探讨了基于树莓派与无人机的协同系统,重点分享了利用OpenCV优化地标识别以实现精准降落的实战策略。内容涵盖从应对复杂光照的图像预处理、鲁棒的轮廓几何过滤,到通过ROS进行稳定通信,以及实现分层控制与状态机设计,旨在提升系统在真实环境中的可靠性与性能。

y2z3a4b5c的博客 1086

redisTemplate.opsForValue().increment

redis

weixin_50733737的博客 2万+

MagicDraw-用例图

MagicDraw-用例图

木头征的博客 3129

redisTemplate.opsForValue()中方法讲解

查看源码可以看到redisTemplate.opsForValue()中的方法都定义在ValueOperations<K, V> 中,该接口中一共有17个方法: public interface ValueOperations<K, V> { void set(K key, V value); void set(K key, V value, long timeout, TimeUnit unit); Boolean setIfAbsent(K key, V value);

FighterLiu的专栏 3万+

OFDM接收机同步——分组检测

上一篇讲了OFDM发射机中的长短训练序列生成原理,基于此可以得到长短训练序列的准确数值,为接收机中的符号同步中的相关运算提供基础。 进入符号同步前,首先来看OFDM接收机中的第一步——分组检测。分组检测就是检测突发传输方式的信道上是否有新的数据到达,算法的好坏直接影响着接收机的后续工作性能。 一、本文意义 基于《基于xilinx fpga 的ofdm的通信系统基带设计》这本教材中分组检测算法原理,通过matlab编程仿真验证“延时相关+保持长度”分组检测算法的有效性。同时,通过仿真证明教材上的判决公式的问题

boayel的博客 2201

Spring AI 实战:第七章、Spring AI Advisor机制之记忆大师

从金鱼到最强大脑通过 Spring AI 的记忆功能,我们成功让 AI:记住了用户身份实现了多用户隔离做到了持久化存储最终效果用户:“和上次一样” → AI 秒懂用户:“你知道我的名字吗?” → AI:“当然,张三!AI的进化路线🐟金鱼脑 →🧠最强大脑 →🏛️记忆宫殿管理员。

liaokailin的专栏 1516

基于java操作redis的测试[RedisTemplate对redis的操作]

先打开在redis.conf文件中: 1.注释掉 #bind 127.0.0.1 -::1 2.protected-mode yes改为no 3.重新启动一下redis 1:首先先配置操作redis所需要的依赖 <dependencies> <!-- web启动器--> <dependency> <groupId>org.springframework.boot</g...

asmall_cat的博客 2129

3.1 5分钟搞定!Claude Code接入国产大模型完整教程(附代码)

摘要 本文提供了一份5分钟快速为Claude Code接入国产大模型的完整教程。首先介绍了系统环境要求(Windows/macOS/Linux、Node.js 18+、Python 3.8+),然后详细说明了三种安装Claude Code的方式(npm/yarn/pnpm)。重点讲解了两种国产大模型接入方案:通义千问(推荐)和文心一言,包括获取API密钥、安装SDK、创建MCP服务器、配置Claude Code等步骤。文中提供了详细的代码示例和配置文件模板,确保开发者能快速完成国产大模型的接入,降低使用成本

yonggeit的博客 7926

Redis介绍、操作及相关测试点

大家好,我们平时测试的应用程序中,应该会大量使用缓存机制来提高程序效率与响应速度,常见的缓存数据库有Redis、Memcached等,如果应用程序中有使用到缓存数据库,那么在测试用例设计以及测试过程中,我们就需要考虑缓存相关的场景,例如操作缓存过期时间使缓存过期、缓存存储的数据是否正确、当缓存读取不到时是否有降级策略等,接下来,给大家介绍一下Redis的使用场景、基本操作以及在测试过程中我们需要关注的点。

若不知道要驶向哪个码头,那么任何风都不会是顺风。 1848

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java单元测试:使用embedded-redis库完成Redis的操作mock

单元测试第三篇,演示在单元测试时,在没有安装Redis服务时,如果对Redis操作进行mock。 相关代码已经放在Github上:源代码 注:有些资料说,embedded-redis存在一些问题,我在具体使用中,因为只使用了基本的key value操作,暂时未发现。 下面简述开发过程: 1、首先,还是正常建立项目,并有常规的REDIS操作的业务逻辑; 2、项目添加mock库的引用,打开pom.xml,添加: <dependency> <groupId>it.ozimov&lt

北亮的专栏 7360

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux操作Redis的安装,测试

Redis的相关操作 1.下载和安装 1.上传redis安装包(个人比较喜欢使用xshell,直接进入到指定的文件夹下面,拖拽进去即可) 2.解压redis:tar -xvf redis-5.0.tar.gz 3.编译和安装: ​ 要求:在redis根目录中执行(此处解压过之后的文件夹已经被我修改成redis) ​ 编译:make ​ 安装:make install 4.修改redis配置文件...

a_rukh的博客 400

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Redis-操作测试

Jedis所需要的jar包 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency> 连接Redis注意事项 禁用Linux的防火墙:Linux(CentOS7)里执行命令 systemctl stop/disable firewalld.

Knight 142

FunTester框架Redis性能测试之list操作

今天分享一下FunTester测试框架对Redis数据库key-list数据操作的性能测试,分为添加、删除和组合测试。 场景 线上分成了三个测试场景: 往Redis添加一批key-list数据,然后并发去往每个key-list中添加元素。 基于1中的数据,并发去从key-valu中,获取并删除元素。 同时想Redis的key-list数据中添加和删除元素。(其中包含从列表头和列表尾添加和删除元素),思路中详细说明。 思路 由于测试Redis服务性能比较差,之前文章实测也就100 ~ 150的QPS,本.

人生不怕起点低,就怕没追求 479

mac远程redis_macOS上Redis的安装与测试操作

Redis简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis运行在内存中,同时支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Why Redis?作为key-value型数据库,Redis:性能极...

weixin_35135480的博客 252

SpringBoot集成redis,redis操作工具类以及测试,fastjson序列化

前言 redis作为一个高性能的缓存服务器,支持多种数据格式的存取,使用范围十分广泛,在web后台缓存界中有不可动摇的地位。 redis的优势就是,单节点能支持超大的并发量(数万乃至数十万),性能强劲。通常的用法就是将数据库中的热点数据,存放到redis中,减少数据库的压力,增强系统的稳定性。且支持各种集群模式,所以将redis操作好,相当于系统多了好几条命。 操作起来 1 docker安装redis 这里我使用docker安装一个redis,非常方便快捷。没用过的朋友可以下载redis的window

qq_36655073的博客 606

《Redis操作Python系列、python对redis字符串操作效率 vs mysql测试|优快云创作打卡》

本次python操作redis,对比mysql直接操作。 效果mysql速度更快。 下次我会做一个【python操作redis】与【python操作mysql】对照测试。 python对redis字符串操作效率 vs mysql测试 redis到底有多快,总得有个对照。那么就对照一 先set一万次试试 import redis import time start = time.time() r = redis.Redis(host='localhost', port=6379, decod

小雨下雨的雨 632

C++ 操作Redis数据库VS2013测试Demo及redis sdk

C++ 操作Redis数据库VS2013测试Demo及redis sdk 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了在Windows平台下,使用Visual Studio 2013编译的C++操作Redis数据库的完整demo示例。该示例包含了全部的源代码以及与Redis相关的SDK文件,旨在帮助开发者更好地理解和应用C++操作Redis数据库的技术。 此示例涵...

gitblog_06715的博客 329

【入门】测试redis操作

最近才想发一篇关于redis对数据的一些简单操作,也是做一些记录,这里不记录如何安装redis,闲话不多说,直接开干! 先做准备工作:连接redis: import org.junit.Before; import org.junit.Test; import redis.client...

chifu0955的博客 189

redis学习之jedis操作(使用Java代码测试连接redis)

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

qq_39746820的博客 1665

Go基础(四)之单元测试、反射、网络编程、操作Redis、操作MySQL

Go基础(四)之单元测试、反射、网络编程、操作Redis、操作MySQL一、单元测试二、反射2.1 两个重要函数和类型2.2 类型(Type)与种类(Kind)2.3 通过反射获取值信息2.3.1 从反射值对象获取值2.3.2 通过反射访问结构体成员的值2.3.3 判断反射值的空和有效性2.3.4 通过反射修改变量的值2.3.5 通过类型信息创建实例2.3.6 通过反射调用函数2.3.7 通过反射调用方法三、网络编程3.1 TCP通信3.2 UDP通信四、Golang操作Redis4.1 安装redigo库

weixin_44630656的博客 1352

redis 写操作性能测试 (单机)

redis 写操作性能测试 (单机版)测试目的 熟悉jedis操作redis 对redis大量写操作性能指标有个大概认知 测试环境 ubuntu 机器双核4G内存普通机 外网流量4M redis版本: 3.2.6 redis 和测试服务程序在一台服务器上 redis 配置 添加密码 注释了bind:127.0.0.1, maxmemory 3gb 遇到问题问题一再插入300万数据的时候,报错// r

白日梦 1万+
上一篇: 如何使用RedisTemplate访问Redis数据结构
下一篇: C语言函数传递指针参数的问题
TuxedoLinux
博客等级 码龄9年 268粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值