
Redis是目前互联网应用中使用最广泛的一个NoSQL数据库,是基于C开发的键值对存储数据库(Key-Value形式)。Redis主要用作缓存,在分布式领域有极大作用,如限流、分布式锁等。
Redis特点: - 支持数据持久化 - 支持多种数据结构类型之间的映射 - 支持主从模式的数据备份 - 自带发布订阅系统 - 定时器、计数器
Redis五种基本数据类型
String
String是Redis中是最简单的一种数据结构,在redis中,所有的key都是字符串,但不同的key对应的value可以有不同的数据结构,所谓五种数据类型主要指的就是value的数据类型。
Redis中的字符串是动态字符串,内部是可以修改的,像Java中的StringBuffer,采用分配冗余空间的方式减少内存的频繁分配。在Redistribution内部,一般实际分配内存会大于需要的内存,当字符串小于1M时,扩容都是在现有的空间基础上加倍,扩容每次分配1M空间,最大可达到512M。
常见操作命令 - set:给一个key赋值
- get:获取key的值
- append:使用append命令时,若key已经存在,则直接在对应value后追加值,否则创建新的键值对。
- decr:可以实现对value的“-1”操作(前提是value为一个数字),若不为数字则会报错。若key不存在,则会给出一个默认值为0,在默认值的基础上-1。
-incr:可以实现对value的“+1”操作。
- decrby:和decr类似,但可以自己设置步长,用法"decrby key decrement" decrement代表步长。(decr默认-1,decrby可以自己设置减少值)。
- incrby:给某个key的值自增,可以自己设置步长。
- incrbyfloat:和incr类似但自增的步长可以设置为浮点数。
- getrange:可以用于返回key对应的value的子串,类似Java中的substr()方法。用法 "getrange key start end",start、end表示字符在字符串中的位置(0表示第一个字符,1表示第二个字符,-1表示最后一个字符,-2表示倒数第二个字符,以此类推。)
- mget和mget:批量获取和批量存储。用法"mset key value [key value...]","mget key [key...]"
- ttl:查看key的有效期(-1代表key不会过期,-2表示key已经过期)
- setex:用于给key设置value同时设置过期时间,单位为秒。用法"setex key seconds value "
- psetex :用于给key设置value同时设置过期时间,单位为毫秒。
-setnx:默认情况下,set命令会覆盖已经存在的key,setnx则不会。(若要设置的key已经存在,则不做任何修改)
- msetnx:批量设置,若有一个设置未生效,则其他设置也不会执行。
- setrange:覆盖一个已存在的key的value,用法"setrange key offset value",offset为修改起始位置的偏移值,若offset的值超过了字符串的最大长度,中间的位置会用0补齐
- strlen:查看字符串长度。
BIT命令 在Redis中字符串以二进制的方式存储,BIT相关的命令就是用于对二进制进行操作。
-getbit:key对应的value在offset处的对应bit值,用法"getbit key offset"。
- setbit:修改key对应的value在offset处的bit值。
- bitcount:统计二进制数据中1的个数。
List
List指数据库中key对应的Value为列表形式,redis中的列表为简单的字符串列表,按照插入顺序排序。可以在列表的头部(左边)或者尾部(右边)添加元素,一个列表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
常见操作命令
- lpush:表示将元素从左到右的顺序插入列表表头,相当于进栈操作,先进入的元素会被压到栈底,用法"lpush key value [value...]"。
- rpush:与lpush相反,元素从右往左的顺序插入表头
- lrange:返回列表指定区间内的元素,用法 "lrange key start stop",start和stop为指定区间的开始和结束。
如:创建列表lpush k1 111 222 333 444
,查询列表k1中头两个元素就可以使用lrange k1 0 1
,得到结果为“444”和“333”。 创建列表rpush k1 111 222 333 444
,查询列表k1中头两个元素就可以使用lrange k1 0 1
,得到结果为“111”和“222”
- rpop:移除并返回列表的尾元素,相当于对rpush的列表进行出栈操作,后进先出,用法"rpop key"。
- lpop:移除并返回列表的头元素,相当于对lpush的列表进行出栈操作,用法"lpop key"
- lindex:返回列表中下标为index的元素,用法"lindex key index"
- ltirm:对列表进行截取,保留指定区间内的列表元素,类似Java中的字符串截取substr()方法,用法"lindex key start stop",start和top为截取起始位置和终止位置的下标。
-blpop:阻塞式弹出,相当于lpop的阻塞版。当列表中没有元素可供弹出时,命令将会被阻塞,直至列表中有元素插入时继续执行。用法"blpop key [key...] timeout",timeout为设置的阻塞时间,在这个时间段内,若向指定的key中插入列表元素,则元素则会立即被抛出,阻塞时间过后回复正常。
Hash
Hash就像是一个微型的redis,key对应的value也是键值对类型的值。Hash是一个string 类型的field和value的映射表,适合用于存储对象。
常见操作命令 - hset:添加值,用法"hset key field value"。
-hget:获取值,用法"hget key field"。
- hmset:批量添加,用法"hmset key field value [field value ...]"。
-hmget:批量获取,用法"hgset key field [field ...]" 。
- hdel:删除一个指定的field,用法"hdel key field [field ...]"
- hsetnx:默认情况下若hash表中存在相同的field,执行hset会覆盖掉已有field的value,而hsetnx则是只有在field不存在时才会生效。
- hvals:获取所有value
- hkeys:获取所有field
-hgetall:同时获取所有field-value
- hexists:查询field是否存在,若存在返回1,否则返回0,用法"hexists key field"。
- hincrby:为指定field的value自增一个指定整数,用法"hincrby key field increment"
- hincrbyfloat:为指定field的value自增一个浮点数,用法"hincrbyfloat key field
- hlen:返回某个key中value的数量
- hstrlen:返回某个key中的某个field的值的字符串长度
Set
Set与List类似,但Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,存放多个相同元素时Set中只能存入一个。
常见操作命令
- sadd:添加一个元素到key中,用法"sadd key member [member...]"。
- smembers:获取一个key下的所有元素,用法"smembers key"。
- srem:用于移除集合中的一个或多个元素,不存在的元素会被忽略,用法"srem key member [member...]"
- sismember:返回某个成员元素是否在集合中 ,若存在返回1,否则返回0,用法"sismember key member"。
- scard:统计集合的元素并,返回集合的数量,用法"scard key"。
- srandmember:随机返回集合中的一个(或多个)元素,用法"srandmember key [count]",若不给出count的值,则默认返回一个元素。
- spop:随机返回一个(或多个)集合中的元素并将它从集合中移除,用法"spop key [count]",若不给出count的值,则默认返回一个元素。
- smove:把一个元素从一个集合移动到另一个集合中去用法"spop source destination member",source和destination分别为原集合和目的集合的key值。
- sdiff:返回两个集合的差集,比较时以第一个key为准,用法"sdiff key [key]"。
- sinter;返回两个集合的交集,用法"sinter key [key]"。
- sunion:返回两集合的并集,用法"sunion key [key]"。
- sdiffstore、sinterstore、sunionstore:类似于sdiff、sinter、sunion,但计算出的结果将会保存在一个新的集合中,用法"sdiffstore destination key [key]",destination为返回结果保存的key的值。
ZSet
ZSet为有序集合,和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
常见操作命令
- zadd:添加一个元素至有序集合中,用法"zadd key score member [score member]"。
- zscore:返回一个member对应score的值,用法"zscore key member"。
- zrange:根据元素在集合中的下表返回集合中的一组元素,用法"zrange key start stop [WITHSCORES]",添加withscores属性后可以同时返回member和对应score的值。
- zrevrange:倒序返回集合中的一组元素 ,用法"zrevrange key start stop [WITHSCORES]"。
- zcard:返回有序集合中元素个数,用法 "zcard key"。
- zcount:返回某个score区间内的所有元素个数,用法"zcount key min max",min和max为score值的区间。
- zrangebyscore:按照score的范围返回元素,可以利用withscore属性同时返回各个元素的score的值,用法"zrangebyscore key min max [WITHSCORE] [LIMIT offset count]"。
- zrank、zrevrank:返回元素的排名zrank(从大到小)、zrevrank(从小到大),用法"zrank key member"。
- zincrby:score自增,用法"zincrby key increment member"。
- zinterstore:计算给定的有序集合的交集并将结果集存储在新的有序集合 key 中,用法"zinterstore destination numkeys key [key...]",numkeys为相加有序集合的个数,取并集后相同元素score的值取和保存在新的有序集合中。
- zrem:弹出一个指定元素,用法"zrem key member"。
- zlexcount:计算有序集合中成员数量,用法"zlexcount key min max",可以根据元素值统计"-"表示最小值,"+"最大值,也可以在元素值钱加中括号表示检索范围。
- zrangebylex:返回指定区间内的成员,用法"zrangebylex key min max"。
对key的操作
key的命令用于管理 redis 的键。
常见操作命令
- del:删除一个key/value。
- dump:序列化给定的key并返回给定的值。
- exists:判断一个key是否存在,若存在返回1,否则返回0。
- ttl:查看一个key的有效期,-1表示不过期,-2表示已经过期。
- expire:给一个key设置有效期。
- persist:移除一个key的过期时间。
- keys *:查看所有的key
- pttl:和ttl一样,不过返回的时间单位为毫秒