Java操作Redis数据

来源:互联网 发布:淘宝客链接批量转换 编辑:程序博客网 时间:2024/05/17 05:07

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


1.Key(键)

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.htmllog.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(字符串)

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, 0, 5);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(哈希表)

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(列表)

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(集合)

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(有序集合)

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(发布/订阅)

public class TopicTest extends RedisCommon {private static String topicName = "Topic:chat";@BeanRedisMessageListenerContainer 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;}@BeanMessageListenerAdapter listenerAdapter(Receiver receiver) {return new MessageListenerAdapter(receiver, "receiveMessage");}@BeanReceiver 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;@Autowiredpublic Receiver(String name) {this.name = name;}public void receiveMessage(String message) {log.info(name + " received <" + message + ">");}}}


源码请戳这里。

1 0
原创粉丝点击