<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def read(self, count=None, block=None, last_id=None):
 """ Monitor stream for new data. :param int count: limit number of messages returned :param int block: milliseconds to block, 0 for indefinitely :param last_id: Last id read (an exclusive lower-bound). If the '$' value is given, we will only read values added *after* our command started blocking. :returns: a list of (message id, data) 2-tuples. """

        if last_id is None: last_id = '0-0'
        resp = self.database.xread({self.key: _decode(last_id)}, count, block)

            # resp is a 2-tuple of stream name -> message list.
        return resp[0][1] if resp else []