Redis支持五种数据类型:
string,hash,list,set, zset(sorted set:有序集合)等
1. String
1.1 简介
string是redis最基本的类型,一个key对应一个value。
string类型是二进制安全的,意思是redis的string可以包含任何数据。比如jpg图片或者序列化对象。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
- 二进制安全是指,在传输数据时,保证二进制数据的信息安全,也就是不被篡改、破译等,如果被攻击,能够及时检测出来。
-二进制安全特点:
1.编码、解码发生在客户端完成,执行效率高
2.不需要频繁的编解码,不会出现乱码
1.2 String命令
赋值命令
SET KEY_NAME VALUE
Redis SET 命令用于设置给定key的值。如果key已经存储值,SET就覆写旧值,且无视类型
SETNX KEY VALUE
只有在key不存在时设置key的值,SETNX(set if not exists)命令在指定的key不存在时,为key设置指定的值
MSET KEY VALUE [key value...]
同时设置一个或多个key-value对
取值语法:
GET KEY NAME
Redis Get命令用于获取指定key的值。如果key不存在,返回nil。若不是字符串类型,返回一个错误。
__GETRANGE KEY START END __
用于获取存储在指定key中字符串的子字符串。字符串的截取范围由start和end两个偏移量界定(包括start和end在内)
GETBIT KEY OFFSET
对key所存储的字符串值,获取指定偏移量上的位(bit)
MGET KEY1 [key2...]
获取所有(一个或多个)给定key的值
getset key_name value
getset命令用于设置指定key的值,并返回key的旧值,当key不存在时,返回nil
STRLEN KEY
返回key所存储的字符串值的长度
删除语法
DEL KEY_NAME
删除指定的key,如果存在,返回值数字类型。
自增/自减
INCR KEY_NAME
incr命令将key中存储的数字值增1,如果key不存在,那么key的值会先被初始化为0,然后再执行Incr操作。
自增:INCRBY KEY_NAME 增量值
Incrby命令将key中存储的数字加上指定的增量值
自减:DECR KEY_NAME 或 DECYBY KEY_NAME 减值
decr命令将key中存储的数字减1
字符串拼接:APPEND KEY_NAME VALUE
Append命令用于 为指定的key追加至末尾,如果不存在,为其赋值
1.3 应用场景
1.3.1 String通常用于保存单个字符串或JSON字符串数据
1.3.2 因String是二进制安全的,所以可以把一个图片文件的内容作为字符串来存储
1.3.3 计数器(常规key-value缓存应用。常规计数:微博数,粉丝数)Incr,INCRBY,DECR,DECRBY等指令具有原子操作的特性,所以常用来实现原子计数效果。如:某场景下,3个用户读取了mynum的值2,然后同时进行了+1操作,那么最后mynum的值一定是5.
2.hash
2.1 应用场景
2.1.1. 对数据量大的集合数据删减
列表数据显示,关注列表,粉丝列表,留言评价。。。分页,热点新闻(Top5)等。
利用LRANGE还可以很方便的实现分页的功能,在博客系统中,每篇博文的评价也可以存入一个单独的list中。
2.1.2. 任务对列功能
- (list通常用来实现一个消息队列,而且可以确保先后顺序,不必像Mysql那样还需要通过ORDER BY来进行排序)
- 任务队列介绍(生产者和消费者模式):
在处理Web客户端发送的命令请求时,某些操作的执行时间可能会比我们预期的更长一些,通过将待执行任务的相关信息放入队列里面,并在之后对队列进行处理,用户可以推迟执行那些需要一段时间才能完成的操作,这种将工作交给任务处理起来执行的做法被称为任务队列(task queue).
PROPLPUSH SOURCE DESTINATION
一处列表的最后一个元素,并将该元素添加到另一个列表并返回
常用案例:
订单系统的下单流程,用户系统登陆注册短信等
3.set
应用场景
常用于:对两个集合间的数据进行交集,并集,差集计算。
- 以非常方便的实现如共同关注,共同喜好,二度好友等功能。对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是从一个集合到一个新的集合。
- 利用唯一性,可以统计访问网站的所有独立IP。
4.zset
应用场景
- 排行榜