Redis不是一个普通的键-值存储引擎,它实际上是一个数据结构服务器,支持不同类型的值。不仅限于简单的字符串,还可以包含更复杂的数据结构。以下是Redis支持的所有数据结构。
1. String:(二进制安全的字符串)。
2.Lists: 根据插入顺序排列的字符串元素的列表(类似php的非关联数组),本质上是链表。
3.Sets: 唯一的,无序的字符串元素的集合。
4.Sorted sets: 类似于集合,但每个字符串元素都关联一个浮点数值,称为分数(score)。元素总是按照它们的分数排序, 因此与集合不同,它可以检索指定范围内的元素。
5.Hashes: 字段和值构成的映射(类似php的关联数组),字段和值都是字符串。
6. Bit arrays (or bitmaps): 采用比特位数组来存储字符串,可以对单个比特位置0或1,可以统计所有置为1的比特位数量,可 以查看第一个为1或0的比特位,等等。
7. HyperLogLogs: 这是一个概率数据结构,用于快速估算集合的基数。
Redis keys(键)
Redis键是二进制安全的,这意味着可以使用任何二进制序列作为键,从字符串“foo”到JPEG文件的内容。空字符串也是一个有效的键。
a. 键不是越长越好。比如,一个1024字节的键不仅在耗内存,而且在数据集中比对键的的花销也更大。如果手头的任务是匹配一个大的值,使用哈希(例如使用SHA1)是一个更好的主意,特别是从内存和带宽的角度来看。
b. 键也不是越短越好。比如,"user:1000:followers"做键的可读性就比"u:1000:flw"要好的多,占用的空间也不是特别多;虽然短键显然会消耗更少的内存,但需要找到正确的平衡。
c. 键应该遵循一个模式。例如,“object-type:id”是一个好主意,如,“user:1000”。点(.)或破折号(-)通常用于多词字段,如“comment:1234:reply”。或“comment:1234:reply.to”。
d. 键不能超过512Mb。
Redis Strings
Redis字符串类型是可以与Redis键关联的最简单的值类型。它是Memcached唯一的数据类型。
因为Redis键是字符串,所以当我们使用字符串类型作为值时,就是将字符串映射到另一个字符串。字符串数据类型对于很多情况都很有用,比如缓存HTML片段或页面。值可以是各种类型的字符串(包括二进制数据),例如,可以在值中存储jpeg图像。一个值不能大于512Mb。
常用命令:
set key value 设置键值对(无论键是否存在,都生效)
set key value nx 键不存在时生效
set key value xx 键存在时生效
get key 获取键的值
mset key1 value1 key2 value2 设置多个键值对
mget key1 key2 获取多个键的值
incr key 键的值自增1(当值(字符串)可以转换成整数才有效)。类似的,incrby key 10
decr key 键的值自减1(当值(字符串)可以转换成整数才有效)。类似的,decrby key 10
incr,decr的操作是原子性的,也就是说,即使多个客户端对同一个键进行INCR操作,永远不会出现这种情况:客户端1读取到“10”,客户端2同时读“10”,两者都增加到11,并将新值设置为11。事实上最终值将始终为12。
通用命令:
exists key 键是否存在
del key 删除键和值
type key 值的数据类型
TTL(Time to live)键的生存时间:
TTL可以使用秒或毫秒进行设置。
然而,过期时间解析总是精确到1毫秒。
关于生存时间的信息会被复制并持久化到磁盘上。(这意味着Redis会保存每个键的过期时间)。
常用命令:
expire key1 10 指定键key1的生存时间为10秒(key1以存在)
set key value ex 10 设置键值对并指定生存时间(秒)
ttl key 查看key剩余的生存时间(秒)
pexpire key1 1000 指定键key1的生存时间为1000毫秒
set key1 value px 1000 设置键值对并指定生存时间(毫秒)
pttl key1 查看key1剩余的生存时间(毫秒)
persist key 指定键永久有效
网友评论