Redis是一种常用的非关系型数据库,以键值对(K-V)的形式存储数据,Redis中主要有以下几种数据类型:
- String
- List
- Set
- Zset
- Hash
以及如下几种新的数据类型:
- Bigmap
- HyperLogLog
- Geospatial
下面将介绍各种数据类型的特性和常用命令
String
简单的字符串存储,底层结构为简单动态字符串SDS,类似于Arraylist,是可以修改的字符串(与java不同),采用预分配冗余空间的方式减少内存的频繁分配。常用的命令(Linux下)
- set k1 value :设置k1的值为value,如果k1之前已经设置过值,将用新值替换旧值
- get k1 :获取键k1存储的数据
- setnx k1 :与set命令类似,作用都是设置数据的值,但不同的是,本条命令只有在k1不存在时才能设置成功(可用于在多线程情况下保证线程安全)
- mset k1 value1 k2 value.... :同时设置多个值,可通过mget k1 k2命令同时获取。类似的msetnx命令可保证原子性的前提下同时设置多个键值,但如果多个键值中存在一个设置失败,则整条命令执行失败
- setex k1 times value :设置值的时候同时设置键的过期时间为times(-1表示永不过期,-2表示已经过期)。此命令的必要性:为了防止redis缓存中长期存放不使用的数据占用内存空间,需要及时清除一些数据。
- getset k1 newvalue :返回k1的值同时用newvalue将其替换
List
list数据结构底层采用双向链表进行存储,添加删除操作简单,性能也高,简单理解列表就是一个键值存储了多个数据,常用命令如下:
- lpush|rpush k1 v1 v2 v3.... :按方向往列表插入数据(v3->v2->v1|v1->v2->v3)
- lrange k start end :从在范围取值(注:lrange k1 0 -1 是取列表中的所有值)
- lpop|rpop k :按方向弹出一个值
- lindex k index :获取指定下标的值
- lset index v :设置下表index处的值为v
- llen k :获取列表的长度(元素个数)
Set
set是无序不可重复的列表,具有自动去重功能,常用命令:
- sadd k v1 v2 v3... :设置值
- smembers k :获取列表k中存储的所有值
- sismember k v:判断k中是否存储值v
- srem k v1 v2...:删除k中的值v1 v2...
- spop k :随机弹出一个值(注意List中是按顺序弹出)
- set集合可进行取交集、并集、差集运算:sinter k1 k2、sunion k1 k2、sdiff k1 k2
Hash表
- 一种较为特殊的数据结构,value字段存储的是field->value的映射表,适合存储对象
- hset user1 name haha :设置一个用户user1,其属性name的值为haha
- hget user name :获取user的名字
- hmset user1 name haha age 18..... :同时设置多个属性值
- hkeys user1:获取user1具有的所有属性
- hvals user1 :获取user的所有属性值
- hsetnx user1 field value :当user不具备属性field时为其添加该属性和值
Zset
有序的set,其中的元素有序,可以存储重复数据,增加了一个表示数据顺序的字段(score)常用命令
- zadd k score1 v1 score2 v2... :添加数据
- zrange k 0 -1:默认按score值从小到大输出所有的值v
- zcount k min max :计算score值在min和max之间的数据个数
- zrank k v1 :输出v1按score在列表中的排名
Bigmap
存储二进制0、1的数组,数组的下标叫做偏移量,可进行位操作,常用命令:
- setbit key index v :设置偏移量index的值为v
- getbit key offset :获取偏移量为offset的值
- bitop and|or|not|xor destkey key :两数组按位进行与或非异或操作
HyperLogLog
做基数统计算法(计算不重复元素的个数),常用命令如下:
- pfadd k element1 element2.... :添加元素
- pfcount key :统计元素个数(基数个数)
Geospatial
操作经纬度的数据类型(坐标)
- geoadd k 经度值 纬度值 地标名称
- geodist key 名称1 名称2 m|km单位 :计算两地距离
- georadius key 经度 纬度 radius m|km单位 :以该经纬位中心半径位radius为圆范围内元素个数