redis是近几年比较流行的基于内存的高性能key-value持久化非关系型数据库,redis也可与spring结合做异步消费发布监听系统
redis下载地址:
https://download.csdn.net/download/higherzjm/10762200
解压即可使用,点开redis-server.exe即做服务,点开redis-cli.exe即做客户端命令窗口
1.1 info 获取Redis的相关信息
1.2 keys * 获取当前redis数据库中所有的key名称
1.3 select 1 切换数据库,1 是数据库索引
1.4 设置和获取普通的key-value值
命令设置: set name "Saturday"
命令获取: get name
使用Java设置:redisTemplate.opsForValue().set("name","sunday") (redisTemplate初始化方式后面会说明)
使用java获取:redisTemplate.opsForValue().get("name");
1.5 设置或获取set值
命令设置:sadd set_123 aaaa bbbb cccc (set_123 是key名称)
命令获期:smembers set_123
使用Java设置:redisTemplate.opsForSet().add("set_123", "set1","set2","set3")
使用java获取:redisTemplate.opsForSet().members("set_123")
1.6 设置或获取list值
命令设置:lpush mylist list1 list2 list3 (mylist 是key名称)
命令获期:lrange mylist 0 -1 (第二个数值表示结束的索引,如果为-1表示所有)
使用Java设置:redisTemplate.opsForList().leftPush("mylist ", String.valueOf(Arrays.asList("list1","list2","list3")) );
使用java获取:redisTemplate.opsForList().leftPop("mylist ");
1.7 设置或获取lHash值(其实这边所说的hash值就是我们日常遇到的key-value键值对)
命令设置:hmset myhash k1 "v1" k2 "v2" (k1,k2是key名称)
命令获期:hmget myhash k1 k2(获取k1,k2键的值)
使用Java设置:
Map
map.put("key1","value1"); map.put("key2","value2");
map.put("key3","value3"); map.put("key4","value4");
redisTemplate.opsForHash().putAll("map",map);
使用java获取:redisTemplate.opsForHash().entries("map")
消息发送监听系统主要spring结合redis异步推送消息到redis队列,并进行监听处理
2.1 xml配置: 初始化redisTemplat和其他监听信息
spring-data-redis配置
redis.properties
redis.host=127.0.0.1
#redis的服务端口
redis.port=6379
#客户端超时时间单位是毫秒
redis.timeout=100000
#最大连接数
redis.maxTotal=300
#最大空闲数
redis.maxIdle=100
#最大建立连接等待时间
redis.maxWait=1000
2.2 从control实际运用
@Controller
@RequestMapping(value ="/send_redis_merssagecontroller")
public class Send_REDIS_MessageController {
@Resource(name="redisTemplate")
private RedisTemplate redisTemplate;
/**
*
* @param channel 监听的channel名称
* @param message 监听的消息内容
*/
public void sendMessage(String channel, Serializable message) {
//channel消息监听名称必须与配置文件配置的一样
redisTemplate.convertAndSend(channel, message);
}
//http://localhost:8080/repository2018_2/send_redis_merssagecontroller/sendmsg.do
@RequestMapping(value = "sendmsg")
@ResponseBody
public String sendMsg() {
try {
MessageVo messageVo = new MessageVo();
messageVo.setDate("20171207");
messageVo.setKey("tuofuwebservices");
List webmatids = new ArrayList();
webmatids.add("123");
webmatids.add("456");
Map> webmaidmtaids = new HashMap>();
webmaidmtaids.put("1147", webmatids);
messageVo.setWebsitematids(webmaidmtaids);
//异步发送短信到redis队列
sendMessage("msgname", messageVo);
return "消息发送成功";
}catch (Exception e){
e.printStackTrace();
return "消息发送失败";
}
}
}
2.3 监听类
@Component("adapterMessageDelegateListener")
public class AdapterMessageDelegateListener {
//监听Redis消息,监听方法名称需要与配置的一样
public void handleMessage(Serializable message){
System.out.println("消息监听----redis消息队列接收消息");
if(message instanceof MessageVo){
MessageVo messageVo = (MessageVo) message;//强制转化为发送的消息model
System.out.println(messageVo.getKey()+":"+messageVo.getDate());
Map> webmatids= messageVo.getWebsitematids();
for (Map.Entry> data:webmatids.entrySet()){
System.out.println(data.getKey());
System.out.println(data.getValue());
}
}
}
}
model 类
public class MessageVo implements Serializable {
private String key;
private String date;
private Map> websitematids;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public Map> getWebsitematids() {
return websitematids;
}
public void setWebsitematids(Map> websitematids) {
this.websitematids = websitematids;
}
}
以上讲的两部分内容更偏向于实际应用,因研究有限,原理性的东西没有进一步阐述,如阅读到此博文的博友们发现有讲得不到位,或讲错的部分,敬请谅解,同时麻烦指出来