Пример #1
0
        /// <summary>
        ///     出队
        /// </summary>
        /// <param name="listId"></param>
        /// <returns></returns>
        public string Dnqueue(string listId)
        {
            return(DoWithRetry(() =>
            {
                string result;
                using (var cnn = new SERedisConnection(_sectionName, _dbIndex))
                {
                    result = cnn.GetDatabase().ListRightPop(listId);

                    if (!string.IsNullOrEmpty(result))
                    {
                        return result;
                    }

                    // 在多写队列中, 比如F5后面挂了多个redis。
                    for (int i = 0; i < cnn.Pool.PoolSize - 1; i++)
                    {
                        result = cnn.GetDatabaseFromNextConnection().ListRightPop(listId);

                        if (!string.IsNullOrEmpty(result))
                        {
                            return result;
                        }
                    }

                    return null;
                }
            }));
        }