window下redis的常用命令、spring结合redis实现消息发布监听系统

     redis是近几年比较流行的基于内存的高性能key-value持久化非关系型数据库,redis也可与spring结合做异步消费发布监听系统

redis下载地址:

https://download.csdn.net/download/higherzjm/10762200

解压即可使用,点开redis-server.exe即做服务,点开redis-cli.exe即做客户端命令窗口

 

1 redis常用命令

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=new HashMap<>();

          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")

    

2  redis 与spring结合实现消息发送监听系统

      消息发送监听系统主要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;
    }
}

      以上讲的两部分内容更偏向于实际应用,因研究有限,原理性的东西没有进一步阐述,如阅读到此博文的博友们发现有讲得不到位,或讲错的部分,敬请谅解,同时麻烦指出来

你可能感兴趣的:(window下redis的常用命令、spring结合redis实现消息发布监听系统)