原文:http://tianyalong.icu/content.html?id=44
什么是hash?
- redis的
hash
数据结构,其实就是String
的升级版,把string
的key
、value
中的value
类型升级为了hash
。 - 每个hash的存储大小:可以存储(1[HTML_REMOVED][HTML_REMOVED]32) - 1方的键值对(40+亿)
场景一:存储对象
type Product struct{
id uint
name string
price int
detail string
}
-
HSET key field value
hsetproduct:100
name iphone,设置产品id为100的name
字段为iPhone -
HGET key field
hgetproduct:100
name,获取id为100的产品的name
字段 -
HMSET key field1 value1 field2 value2 ...
hmset product:100 price 5000 detail “wdnmd” -
HMGET key field1 field2 ...
hmget product:100 name price detail -
HKEYS key
返回该key的所有字段 -
HVALS key
返回该key的所有value -
HGETALL key
获取指定hash中所有的field和value -
HLEN key
返回key中field的数量 -
HINCRBY key field num(int)
给key的某一个字段(整型)加上num -
HINCRBYFLOAT key field num(float)
给key中的某一个字段加上浮点数num -
HEXITSTS key field
检测key中是否存在field -
HDEL key field1 field2 ...
删除key中的某一个字段field
存储对象,什么时候使用string,什么时候使用hash?
存储对象一般是使用string
和hash
两种
string
存储通常用于频繁的读操作
,将对象序列化为json
字符串,存入redis。
hash存储通常用于频繁的写操作
,不适用string因为其不够灵活,每次修改都需要先进行序列化操作。使用hash可以针对某个属性单独操作,不需要序列化修改整个对象。例如
:商品库存、价格、关注数、评价等经常变动,就使用hash存储。
场景二:短链接
像是有一些短信发过来的连接会特别的短,可能只有十几个字符,但是打开之后的url却会变成上百个字符,这就是短链接的作用:缩短链接长度。
好处:
- 节省网址长度,便于社交交流
- 方便后台跟踪点击量、统计
短链接算法:
- md5加密(加密串key)和url生成32个字符的hash值
- 将32个字符拆成4段
- 将每一段8个字节看做2进制的串,与30位1进行与操作,提取最后30位
- 分六次提取这30位,每次提取5位,与操作上0x0000003D,即111101,六位的二进制数据,与计算后的结果对应数组下标id,通过字符数组转换为char(chars[id])。
- 分成的4段8字节最终生成4个短链接,随便取出一个使用即可
原理:
- 长链接转换为短链接加密串key,然后存储于redis的hash结构中。
- 通过加密串key到redis中找出原始url,然后重定向出去。
白嫖y总服务器hhhh