欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

网站消息实时推送与缓存处理

程序员文章站 2022-03-25 09:12:25
...
一:在rails5中推出了ActionCable来实现消息的websoket推送
参考链接
https://ruby-china.org/topics/28935
https://ruby-china.org/topics/30494
https://ruby-china.org/topics/28480

二:在某些使用场景下页可以考虑js定时轮询刷新的方式去做。(比如强制点击处理,消息才会不再弹出。)

下边分享一段,用redis缓存消息记录,当点击才会取消显示,但只有真正处理才会改变状态的代码。

# 数据库查询消息
def not_opration_message
	_employee_id=current_employee.id
	@not_opration_message = Message.where("employee_id=? and state=0",_employee_id) #查询所有未处理的消息
	render :layout=> false
end

# 数据库处理消息
def deal_with_system_message
    _employee_id=current_employee.id
    _messages=Message.where("id=?",params[:id]) #查询所有未处理的消息
    _message.update_all(:state=>1) #已处理
    render :json => true
end

# 缓存处理消息
def delete_system_message
    _employee_id=current_employee.id
    redis=Redis::HashKey.new("user_#{_employee_id}")
    redis.delete(params[:url])
    render :json => true
end

# 缓存个人所有消息
def system_message
    _employee_id=current_employee.id
    redis=Redis::HashKey.new("user_#{_employee_id}")
    if redis.blank?
      render :json=> nil
    else
      render :json=> redis.to_json
    end
end

#订单确认通知,创建消息并缓存
def self.tell_customer_order_confirm customer_order
  customer_order_detail = customer_order.order_details_userful
  customer_order_detail.each do |detail|
    Message.create(message:"#{customer_order.order_no} 客户订单已确认,通知供应商发货", url:"/admin/order_list?order_no=#{customer_order.order_no}",state:0,employee_id:detail.emp)
    message_hash = Redis::HashKey.new("user_#{detail.emp}")
    message_hash["/admin/order_list?order_no=#{customer_order.order_no}"] = "#{customer_order.customer_order_no} 客户订单已确认,通知供应商发货"
  end
end
相关标签: redis rails