Java操作Redis数据

xiaoxiao2021-02-28  15

Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。下面是使用spring-data-redis分别针对key和value的操作。

Redis技术学习 https://www.itkc8.com

1.Key(键)

 

[java] view plain copy

public class KeysTest extends RedisCommon {      private static StringRedisTemplate template;      private static String key = "key1";        public static void main(String[] args) {          log.info("-----------Starting Redis keys testing-----------");          ApplicationContext ctx = SpringApplication.run(KeysTest.class, args);          template = ctx.getBean(StringRedisTemplate.class);          KeysTest keysTest = ctx.getBean(KeysTest.class);          keysTest.initValue();            log.info("KeysTest @##@ randomKey: " + template.randomKey());            keysTest.expireKey(key, 2);          // keysTest.persistKey(key, 2);            String newkey = "newKey";          // template.rename(key, newkey);          template.renameIfAbsent(key, newkey);            Set<String> keys = template.keys("*");          log.info("KeysTest @##@ keys:" + keys);          for (String key : keys) {              log.info("KeysTest @##@ " + key + " expire:"                      + template.getExpire(key));              // template.getExpire(key, TimeUnit.SECONDS);          }            int dbIndex = 1;// ref:http://redisdoc.com/key/move.html          log.info("KeysTest @##@ move " + key + " to db" + dbIndex + ": "                  + template.move(key, 1));            // template.delete(key);          template.delete(keys);          log.info("KeysTest @##@ delete keys: " + keys);            // template.exec();          // template.multi();          // template.discard();            // template.slaveOf(host, port);          // template.slaveOfNoOne();            // template.watch(key);          // template.watch(keys);          // template.unwatch();          log.info("-----------End Redis keys testing-----------");      }        public void initValue() {          String value = "hello,redis";          template.opsForValue().set(key, value);          Set<String> keys = new HashSet<String>() {              private static final long serialVersionUID = -4402948387930279259L;              {                  this.add("key2");                  this.add("key3");                  this.add("key4");              }          };          try {              byte[] bytes = template.dump(key);              log.info("KeysTest # key dump:" + new String(bytes));              for (String k : keys) {                  template.restore(k, bytes, 0, TimeUnit.SECONDS);              }          } catch (Exception e) {              e.printStackTrace();          }      }        public boolean expireKey(String key, long expiretime) {          log.info("KeysTest @##@ has " + key + " : " + template.hasKey(key));          log.info("KeysTest @##@ expire " + key + " for " + expiretime                  + " seconds : "                  + template.expire(key, expiretime, TimeUnit.SECONDS));          // template.expireAt(key, new Date());          try {              Thread.sleep((expiretime + 1) * 1000);          } catch (InterruptedException e) {              e.printStackTrace();          }          boolean result = template.hasKey(key);          log.info("KeysTest @##@ has " + key + " : " + result);          return result;      }        public boolean persistKey(String key, long expiretime) {          log.info("KeysTest @##@ has " + key + " : " + template.hasKey(key));          log.info("KeysTest @##@ expire " + key + " for " + expiretime                  + " seconds : "                  + template.expire(key, expiretime, TimeUnit.SECONDS));          log.info("KeysTest @##@ persist " + key + " : " + template.persist(key));          try {              Thread.sleep((expiretime + 1) * 1000);          } catch (InterruptedException e) {              e.printStackTrace();          }          return template.hasKey(key);      }    }  

 

 

2.String(字符串)

 

[java] view plain copy

public class StringsTest extends RedisCommon {      private static StringRedisTemplate template;      private static String key = "strKey";            public static void main(String[] args) throws InterruptedException {          log.info("-----------Starting Redis Strings testing-----------");          ApplicationContext ctx = SpringApplication.run(StringsTest.class, args);          template = ctx.getBean(StringRedisTemplate.class);          StringsTest stringsTest = ctx.getBean(StringsTest.class);                    String value = "hello, redis";          template.opsForValue().set(key, value);          log.info("StringsTest @##@ " + key + "'s value: " + template.opsForValue().get(key));          log.info("StringsTest @##@ " + key + "'s size: " + template.opsForValue().size(key));                    stringsTest.getRange(key, 05);                    template.opsForValue().getAndSet(key, "hello, redis world");          log.info("StringsTest @##@ " + key + "'s value after getAndSet: " + template.opsForValue().get(key));                    stringsTest.multiOperation();                    stringsTest.incrementDouble();                    stringsTest.incrementLong();      }            public void getRange(String key, int start, int end){          log.info("StringsTest @##@ " + key + "'s value: " + template.opsForValue().get(key));          log.info("StringsTest @##@ " + key + " range from "+start +" to " + end +" value is: " + template.opsForValue().get(key, start, end));      }            public void multiOperation(){          Map<String, String> m = new HashMap<>();          Set<String> keys = new HashSet<>();          for(int i=0;i< 4;i++){              m.put("key" + i, "value" + i);              keys.add("key" + i);          }          template.opsForValue().multiSet(m);          log.info("StringsTest @##@ multiSet : done.");          log.info("StringsTest @##@ multiGet : " + template.opsForValue().multiGet(keys));      }        public void incrementDouble() {          String hashKey = UUID.randomUUID().toString();          Double value1 = template.opsForValue().increment(hashKey, 30.5d);          log.info(hashKey + " has value :" + value1);          double d = 30.2d;          Double value2 = template.opsForValue().increment(hashKey, d);          log.info(hashKey + " has value: " + value2 + ", after increment " + d);      }        public void incrementLong() {          String hashKey = UUID.randomUUID().toString();          long value1 = template.opsForValue().increment(hashKey, 30l);          log.info(hashKey + " has value :" + value1);          long l = 25l;          long value2 = template.opsForValue().increment(hashKey, l);          log.info(hashKey + " has value: " + value2 + ", after increment " + l);      }  }  

 

3.Hash(哈希表)

 

 

[java] view plain copy

public class HashTest extends RedisCommon {      private static RedisTemplate<String, Map<String, UserInfo>> userTemplate;      private static RedisTemplate<String, Map<String, Double>> doubleTemplate;      private static RedisTemplate<String, Map<String, Long>> longTemplate;      private static String key = "UserInfo";        public static void main(String[] args) throws InterruptedException {          log.info("-----------Starting Redis hash testing-----------");          ApplicationContext ctx = SpringApplication.run(HashTest.class, args);          RedisConnectionFactory connectionFactory = ctx                  .getBean(RedisConnectionFactory.class);          userTemplate = new RedisTemplate<>();          userTemplate.setConnectionFactory(connectionFactory);          userTemplate.setKeySerializer(userTemplate.getStringSerializer());          userTemplate.setHashKeySerializer(userTemplate.getStringSerializer());          userTemplate                  .setHashValueSerializer(new JacksonJsonRedisSerializer<UserInfo>(                          UserInfo.class));          userTemplate.afterPropertiesSet();            doubleTemplate = new RedisTemplate<>();          doubleTemplate.setConnectionFactory(connectionFactory);          doubleTemplate.setKeySerializer(doubleTemplate.getStringSerializer());          doubleTemplate.setHashKeySerializer(doubleTemplate.getStringSerializer());          doubleTemplate.setHashValueSerializer(doubleTemplate.getDefaultSerializer());          doubleTemplate.afterPropertiesSet();            longTemplate = new RedisTemplate<>();          longTemplate.setConnectionFactory(connectionFactory);          longTemplate.setKeySerializer(longTemplate.getStringSerializer());          longTemplate.setHashKeySerializer(longTemplate.getStringSerializer());          longTemplate.setHashValueSerializer(new LongSerializer());          longTemplate.afterPropertiesSet();            HashTest hashTest = ctx.getBean(HashTest.class);          // hashTest.insert();          // hashTest.batchInsert();          // hashTest.insertIfAbsent();          // hashTest.findAll();          // hashTest.findOne();          // hashTest.findAllKeys();  //      hashTest.incrementDouble();          hashTest.incrementLong();      }        public void insert() {          UserInfo info = new UserInfo();          info.setName("Tomy");          info.setAge(20);          info.setBirthday(new Date());          info.setId(UUID.randomUUID().toString());          userTemplate.opsForHash().put(key, info.getId(), info);          log.info("insert User[" + info + "] success!");          log.info("User Hash size is : " + userTemplate.opsForHash().size(key));      }        public void batchInsert() {          Map<String, UserInfo> users = new HashMap<>();          for (int i = 1; i <= 3; i++) {              UserInfo info = new UserInfo();              info.setName("Tomy" + i);              info.setAge(20 + i);              info.setBirthday(new Date());              info.setId(UUID.randomUUID().toString());              users.put(info.getId(), info);          }          userTemplate.opsForHash().putAll(key, users);          log.info("batchInsert Users[" + users + "] success!");          log.info("User Hash size is : " + userTemplate.opsForHash().size(key));      }        public void insertIfAbsent() {          UserInfo info = new UserInfo();          info.setName("Tomy4");          info.setAge(20);          info.setBirthday(new Date());          info.setId(UUID.randomUUID().toString());          userTemplate.opsForHash().putIfAbsent(key, info.getId(), info);          log.info("insertIfAbsent User[" + info + "] success!");          log.info("User Hash size is : " + userTemplate.opsForHash().size(key));      }        public void findAll() {          Map<Object, Object> users = userTemplate.opsForHash().entries(key);          log.info("All User[" + users + "]");          log.info("findAll User size is : " + users.size());      }        public UserInfo findOne() {          String hashKey = "2ca66275-88ab-49e5-8651-b987e55d9347";          Object userInfo = userTemplate.opsForHash().get(key, hashKey);          // boolean have = userTemplate.opsForHash().hasKey(hashKey, hashKey);          log.info("find one : " + userInfo);          return userInfo != null ? (UserInfo) userInfo : null;      }        public Set<Object> findAllKeys() {          Set<Object> users = userTemplate.opsForHash().keys(key);          log.info("find : " + users.size() + " users :" + users);          return users;      }        public void scan() {          userTemplate.opsForHash().scan(key, ScanOptions.NONE);      }        public void incrementDouble() {          String hashKey = UUID.randomUUID().toString();          Double value1 = doubleTemplate.opsForHash().increment(key, hashKey,                  Double.valueOf("30"));          log.info(key + ":" + hashKey + " has value :" + value1);          Double delta = Double.valueOf("30.3");          Double value2 = doubleTemplate.opsForHash().increment(key, hashKey, delta);          log.info(key + ":" + hashKey + " has value: " + value2 + ", after increment " + delta);      }        public void incrementLong() {          String hashKey = UUID.randomUUID().toString();          long value1 = doubleTemplate.opsForHash().increment(key, hashKey, 30l);          log.info(key + ":" + hashKey + " has value :" + value1);          long delta = 20l;          long value2 = doubleTemplate.opsForHash().increment(key, hashKey, delta);          log.info(key + ":" + hashKey + " has value: " + value2 + ", after increment " + delta);      }    }  

 

 

 

4.List(列表)

 

[java] view plain copy

public class ListsTest extends RedisCommon {      private static RedisTemplate<String, UserInfo> userTemplate;        public static void main(String[] args) throws InterruptedException {          log.info("-----------Starting Redis Lists testing-----------");          ApplicationContext ctx = SpringApplication.run(ListsTest.class, args);          RedisConnectionFactory connectionFactory = ctx                  .getBean(RedisConnectionFactory.class);          userTemplate = new RedisTemplate<>();          userTemplate.setConnectionFactory(connectionFactory);          userTemplate.setKeySerializer(userTemplate.getStringSerializer());          userTemplate.setValueSerializer(new JacksonJsonRedisSerializer<UserInfo>(                  UserInfo.class));          userTemplate.afterPropertiesSet();                    String key = "UserInfo";                    ListsTest listsTest = ctx.getBean(ListsTest.class);          listsTest.leftpush(key);          listsTest.leftpushBatch(key);          listsTest.leftpop(key);          listsTest.rightPopAndLeftPush(key);      }        public void leftpush(String key) {          int size = 10;          for(int i = 0; i < size; i++){              UserInfo info = new UserInfo();              info.setName("Tomy" + i);              info.setAge(20 + i);              info.setBirthday(new Date());              info.setId(UUID.randomUUID().toString());              userTemplate.opsForList().leftPush(key, info);              //userTemplate.opsForList().leftPush(key, pivot, value)              //userTemplate.opsForList().leftPushIfPresent(key, value)              //userTemplate.opsForList().rightPush(key, pivot, value)              //userTemplate.opsForList().rightPushIfPresent(key, value)          }          log.info("insert [" + size + "] User success! " + key + "'s size is:" + userTemplate.opsForList().size(key));      }            public void leftpushBatch(String key){          int size = 20;          List<UserInfo> users = new ArrayList<>();          for(int i = 10; i < size; i++){              UserInfo info = new UserInfo();              info.setName("Tomy" + i);              info.setAge(20 + i);              info.setBirthday(new Date());              info.setId(UUID.randomUUID().toString());              users.add(info);          }          userTemplate.opsForList().leftPushAll(key, users.toArray(new UserInfo[users.size()]));          //userTemplate.opsForList().rightPushAll(key, (UserInfo[])users.toArray());          log.info("batchinsert [" + users.size() + "] User success! " + key + "'s size is:" + userTemplate.opsForList().size(key));      }        public void leftpop(String key){          UserInfo userInfo = userTemplate.opsForList().leftPop(key, 2, TimeUnit.SECONDS);          //userTemplate.opsForList().leftPop(key);          AtomicInteger ai = new AtomicInteger(0);          while(userInfo != null){              ai.incrementAndGet();              userInfo = userTemplate.opsForList().leftPop(key, 2, TimeUnit.SECONDS);          }          log.info("pop [" + ai.get() + "] Users from " + key);      }            public void rightPopAndLeftPush(String srcKey){          String destinationKey = "destinationKey";          log.info("srcKey [" + srcKey + "]'s size : " + userTemplate.opsForList().size(srcKey));          log.info("destKey [" + destinationKey + "]'s size : " + userTemplate.opsForList().size(destinationKey));          UserInfo userInfo = userTemplate.opsForList().rightPopAndLeftPush(srcKey, destinationKey);          while(userInfo != null){              userInfo = userTemplate.opsForList().rightPopAndLeftPush(srcKey, destinationKey, 2, TimeUnit.SECONDS);          }          log.info("After rightPopAndLeftPush destKey [" + destinationKey + "]'s size : " + userTemplate.opsForList().size(destinationKey));      }        }  

 

 

 

5.Set(集合)

 

[java] view plain copy

public class SetTest extends RedisCommon {        public static void main(String[] args) throws InterruptedException {          log.info("-----------Starting Redis Set testing-----------");          ApplicationContext ctx = SpringApplication.run(SetTest.class, args);          StringRedisTemplate st = ctx.getBean(StringRedisTemplate.class);          String key = "SetKey";          String destKey = "DestKey";          String[] values = new String[]{"value1","value2","value3","value4","value5","value6","value7"};          log.info("SetKey add [" + st.opsForSet().add(key, values ) + "] values ");          log.info("SetKey's member " + st.opsForSet().members(key));          String value5 = "value5";          log.info(value5 + " is member of SetKey's : " + st.opsForSet().isMember(key, value5));          log.info("SetKey's randomMember [" + st.opsForSet().randomMember(key) + "]");          log.info("SetKey's size: " + st.opsForSet().size(key));                    String[] subValues = new String[]{"value1","value2","value3"};          log.info("SetKey remove " + st.opsForSet().remove(key, subValues) + " members");          log.info("SetKey's size: " + st.opsForSet().size(key));                    log.info("SetKey move to DestKey: " + st.opsForSet().move(key, value5, destKey));          log.info("SetKey's size: " + st.opsForSet().size(key));          log.info("DestKey size: " + st.opsForSet().size(destKey));                    String popValue = st.opsForSet().pop(key);          log.info("SetKey move to DestKey: " + st.opsForSet().move(key, popValue, destKey));          log.info("SetKey's size: " + st.opsForSet().size(key));          log.info("DestKey size: " + st.opsForSet().size(destKey));                    //st.opsForSet().difference(key, destKey);          //st.opsForSet().differenceAndStore(key, otherKeys, destKey);                    //st.opsForSet().intersect(key, destKey);          //st.opsForSet().intersectAndStore(key, otherKey, destKey);      }    }  

 

6.SortedSet(有序集合)

 

[java] view plain copy

public class ZSetTest extends RedisCommon {        public static void main(String[] args) throws InterruptedException {          log.info("-----------Starting Redis ZSet testing-----------");          ApplicationContext ctx = SpringApplication.run(ZSetTest.class, args);          StringRedisTemplate st = ctx.getBean(StringRedisTemplate.class);          String key = "ZSetKey";          Set<TypedTuple<String>> values = new HashSet<>();          for (int i = 0; i < 10; i++) {              TypedTuple<String> tuple = new DefaultTypedTuple<String>("value-"                      + i, 12d + i);              values.add(tuple);          }  //      log.info("SetKey add [" + st.opsForZSet().add(key, values) + "] values");          //st.opsForZSet().add(key, value, score)          //st.opsForZSet().incrementScore(key, value, delta)          log.info("SetKey has [" + st.opsForZSet().size(key) + "] values");                    double start = 15d;          double end = 18d;          log.info("SetKey between " + start + " and " + end + " have " + st.opsForZSet().count(key, start, end));                    long s = 1;          long e = 5;          log.info("SetKey range from " + s + " to " + e + " have " + st.opsForZSet().range(key, s, e));          //st.opsForZSet().rangeByScore(key, min, max, offset, count)          //st.opsForZSet().rangeByScoreWithScores(key, min, max)          //st.opsForZSet().rangeByScoreWithScores(key, min, max, offset, count)          //st.opsForZSet()                    String member = "value-5";          log.info(member + "'s rank is " + st.opsForZSet().rank(key, member) + " in SetKey.");                     log.info("Remove " + member + " from SetKey : " + st.opsForZSet().remove(key, member));            //      st.opsForZSet().removeRange(key, start, end)  //      st.opsForZSet().removeRangeByScore(key, min, max)  //      st.opsForZSet().reverseRange(key, start, end)  //      st.opsForZSet().reverseRangeByScore(key, min, max)  //      st.opsForZSet().reverseRangeByScoreWithScores(key, min, max)  //      st.opsForZSet().reverseRank(key, o)  //      st.opsForZSet().unionAndStore(key, otherKeys, destKey)  //      st.opsForZSet().unionAndStore(key, otherKey, destKey)      }    }  

 

7.Pub/Sub(发布/订阅)

 

[java] view plain copy

public class TopicTest extends RedisCommon {      private static String topicName = "Topic:chat";        @Bean      RedisMessageListenerContainer container(              RedisConnectionFactory connectionFactory,              MessageListenerAdapter listenerAdapter) {          RedisMessageListenerContainer container = new RedisMessageListenerContainer();          container.setConnectionFactory(connectionFactory);          container.addMessageListener(listenerAdapter, new PatternTopic(topicName));          //container.addMessageListener(listenerAdapter, new ChannelTopic(topicName));          return container;      }        @Bean      MessageListenerAdapter listenerAdapter(Receiver receiver) {          return new MessageListenerAdapter(receiver, "receiveMessage");      }        @Bean      Receiver receiver(@Value("Receiver-1") String name) {          return new Receiver(name);      }        public static void main(String[] args) throws InterruptedException {          log.info("-----------Starting Redis Topic testing-----------");          ApplicationContext ctx = SpringApplication.run(TopicTest.class, args);          StringRedisTemplate template = ctx.getBean(StringRedisTemplate.class);          template.convertAndSend(topicName, "Hello from Redis!");      }        static class Receiver {          private String name;            @Autowired          public Receiver(String name) {              this.name = name;          }            public void receiveMessage(String message) {              log.info(name + " received <" + message + ">");          }      }    }  

Redis技术学习 https://www.itkc8.com

转载请注明原文地址: https://www.6miu.com/read-2630822.html

最新回复(0)