NoSQL Redis缓存技术-运维篇(二)老男孩教育

    /    2019-08-19

6、Redis数据类型(笔试):

## 6.1 介绍
String :      字符类型
Hash:         字典类型
List:         列表     
Set:          集合 
Sorted set:   有序集合

6.2 KEY的通用操作

KEYS *   keys a  keys a*    查看已存在所有键的名字   ****
TYPE                        返回键所存储值的类型     ****
EXPIREPEXPIRE             以秒\毫秒设定生存时间       ***
TTLPTTL                   以秒\毫秒为单位返回生存时间 ***
PERSIST                     取消生存时间设置            ***
DEL                         删除一个key
EXISTS                      检查是否存在
RENAME                      变更KEY
---例子:
127.0.0.1:6379set name zhangsan 
127.0.0.1:6379EXPIRE name 60
(integer) 1
127.0.0.1:6379ttl name
(integer) 57
127.0.0.1:6379set a b ex 60
OK
127.0.0.1:6379ttl a
127.0.0.1:6379PERSIST a
(integer) 1
127.0.0.1:6379ttl a
(integer-1

6.3 Strings

应用场景
session 共享
常规计数:微博数,粉丝数,订阅、礼物
key:value
----------
(1)
 set name zhangsan  
2
 MSET id 101 name zhangsan age 20 gender m
 等价于以下操作:
 SET id 101 
 set name zhangsan 
 set age 20 
 set gender m
3)计数器
每点一次关注,都执行以下命令一次
127.0.0.1:6379> incr num
显示粉丝数量:
127.0.0.1:6379get num
暗箱操作:
127.0.0.1:6379> INCRBY num 10000
(integer10006
127.0.0.1:6379get num
"10006"
127.0.0.1:6379> DECRBY num 10000
(integer6
127.0.0.1:6379get num
"6"

6.4 hash类型(字典类型)

应用场景:
存储部分变更的数据,如用户信息等。
最接近mysql表结构的一种类型
主要是可以做数据库缓存。
存数据:
hmset stu  id 101 name zhangsan age 20 gender m
hmset stu1 id 102 name zhangsan1 age 21 gender f
取数据:
HMGET stu id name age gender
HMGET stu1 id name age gender
select concat("hmset city_",id," id ",id," name ",name," countrycode ",countrycode," district ",district," population ",population) from city limit 10 into outfile '/tmp/hmset.txt'
---------------------更多的例子

hset myhash field1 "s"    
若字段field1不存在,创建该键及与其关联的Hashes, Hashes中,key为field1 ,并设value为s ,若存在会覆盖原value
hsetnx myhash field1 s    
若字段field1不存在,创建该键及与其关联的Hashes, Hashes中,key为field1 ,并设value为s, 若字段field1存在,则无效
hmset myhash field1 "hello" field2 "world       一次性设置多个字段
删hdel myhash field1                      删除 myhash 键中字段名为 field1 的字段
del myhash                              删除键
改  hincrby myhash field 1                  给field的值加1
查hget myhash field1                      获取键值为 myhash,字段为 field1 的值
hlen myhash                             获取myhash键的字段数量
hexists myhash field1                   判断 myhash 键中是否存在字段名为 field1 的字段
hmget myhash field1 field2 field3       一次性获取多个字段
hgetall myhash                          返回 myhash 键的所有字段及其值
hkeys myhash                            获取myhash 键中所有字段的名字
hvals myhash                            获取 myhash 键中所有字段的值

6.5 LIST(列表)

应用场景
消息队列系统
比如sina微博
在Redis中我们的最新微博ID使用了常驻缓存,这是一直更新的。
但是做了限制不能超过5000个ID,因此获取ID的函数会一直询问Redis。
只有在start/count参数超出了这个范围的时候,才需要去访问数据库。
系统不会像传统方式那样“刷新”缓存,Redis实例中的信息永远是一致的。
SQL数据库(或是硬盘上的其他类型数据库)只是在用户需要获取“很远”的数据时才会被触发,
而主页或第一个评论页是不会麻烦到硬盘上的数据库了。
微信朋友圈:
127.0.0.1:6379> LPUSH wechat "today is nice day !"
127.0.0.1:6379> LPUSH wechat "today is bad day !"
127.0.0.1:6379> LPUSH wechat "today is good  day !"
127.0.0.1:6379> LPUSH wechat "today is rainy  day !"
127.0.0.1:6379> LPUSH wechat "today is friday !"
[5,4,3,2,1]
 0 1 2 3 4 
[e,d,c,b,a]
0 1 2 3  4
127.0.0.1:6379> lrange wechat  0 0
1"today is friday !"
127.0.0.1:6379> lrange wechat  0 1
1"today is friday !"
2"today is rainy  day !"
127.0.0.1:6379> lrange wechat  0 2
1"today is friday !"
2"today is rainy  day !"
3"today is good  day !"
127.0.0.1:6379> lrange wechat  0 3
127.0.0.1:6379> lrange wechat  -2 -1
1"today is bad day !"
2"today is nice day !"

(0)

分享至