values scan keys hkeys hget example commands and all f# stackexchange.redis

f# - keys - redis scan example



¿Cómo llamo a Redis StringSet() desde F# (1)

Estoy usando StackExchange.Redis para acceder a una instancia de Redis.

Tengo el siguiente código de C # en funcionamiento:

public static void Demo() { ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("xxx.redis.cache.windows.net,ssl=true,password=xxx"); IDatabase cache = connection.GetDatabase(); cache.StringSet("key1", "value"); }

Aquí está lo que yo esperaría sería el código F # equivalente:

let Demo() = let cx = ConnectionMultiplexer.Connect @"xxx.redis.cache.windows.net,ssl=true,password=xxx" let cache = cx.GetDatabase() cache.StringSet("key1", "value") |> ignore

Sin embargo, esto no compila: ''Ninguna sobrecarga coincide con el método StringSet''. El método StringSet espera argumentos de tipo RedisKey y RedisValue, y parece que hay algo de magia de compilación en C # para convertir las cadenas en el código de llamada a RedisKey y RedisValue. La magia no parece existir en F #. ¿Hay alguna manera de lograr el mismo resultado?


Aquí está el código de trabajo, muchas gracias a @Daniel:

open StackExchange.Redis open System.Collections.Generic let inline (~~) (x:^a) : ^b = ((^a or ^b) : (static member op_Implicit: ^a -> ^b) x) let Demo() = let cx = ConnectionMultiplexer.Connect @"xxx.redis.cache.windows.net,ssl=true,password==xxx" let cache = cx.GetDatabase() // Setting a value - need to convert both arguments: cache.StringSet(~~"key1", ~~"value") |> ignore // Getting a value - need to convert argument and result: cache.StringGet(~~"key1") |> (~~) |> printfn "%s"