/// <summary>
        /// Adds the specified geospatial members (latitude, longitude, object) to the specified key.
        /// </summary>
        /// <typeparam name="T">The member type</typeparam>
        /// <param name="key">The redis key.</param>
        /// <param name="members">The members to add.</param>
        /// <param name="tags">The tags to relate to the members.</param>
        /// <returns>The number of elements added to the sorted set, not including elements already existing.</returns>
        public int GeoAdd <T>(string key, GeoMember <T>[] members, string[] tags = null)
        {
            var db     = RedisConnection.GetDatabase();
            var values = new List <RedisValue>();

            foreach (var member in members)
            {
                values.AddRange(new RedisValue[]
                {
                    member.Position.Longitude,
                    member.Position.Latitude,
                    Serializer.Serialize(member.Value)
                });
            }
            int result = (int)db.ScriptEvaluate(LuaScriptResource.GeoAdd, new RedisKey[] { key }, values.ToArray());

            // Relate the tags (if any)
            if (tags != null && tags.Length > 0)
            {
                foreach (var member in members)
                {
                    _cacheProvider.AddTagsToSetMember(key, member.Value, tags);
                }
            }
            return(result);
        }
示例#2
0
        /// <summary>
        /// Adds the specified geospatial members (latitude, longitude, object) to the specified key.
        /// </summary>
        /// <typeparam name="T">The member type</typeparam>
        /// <param name="key">The redis key.</param>
        /// <param name="members">The members to add.</param>
        /// <param name="tags">The tags to relate to the members.</param>
        /// <returns>The number of elements added to the sorted set, not including elements already existing.</returns>
        public int GeoAdd <T>(string key, GeoMember <T>[] members, string[] tags = null)
        {
            var db     = RedisConnection.GetDatabase();
            var values = new GeoEntry[members.Length];

            for (int i = 0; i < values.Length; i++)
            {
                var member = members[i];
                values[i] = new GeoEntry(member.Position.Longitude, member.Position.Latitude, Serializer.Serialize(member.Value));
            }
            int result = (int)db.GeoAdd(key, values);

            // Relate the tags (if any)
            if (tags != null && tags.Length > 0)
            {
                foreach (var member in members)
                {
                    _cacheProvider.AddTagsToSetMember(key, member.Value, tags);
                }
            }
            return(result);
        }