AFAIK, there is only one difference: key_id must be int, and key_name must be a string. Are there any other practice restrictions using key_id vs key_name?
You are correct that the only difference is the type (1! = '1'). Please note that this affects the ordering of the results, if you sort by key (as you would expect) - integers are sorted before the lines.
The key is a unique object in all applications, such as "ag5kZXZ-ZmVlbG1hcmtldHIRCxILU3RvY2tQcmljZXMYZgw"
Entity "john" "mart"