目录
redis是基于key-value来保存数据的,key的类型是字符串类型,value的数据类型比较丰富,可以是:字符串、哈希、列表、集合、有序集合。
字符串类型
String类型既可以保存普通文字,也可以保存序列化的二进制数据【例如保存图片数据等等】。
String类型最多可以保存512M的数据。
存储、获取、删除的时候,key、value可以用""或''引起来也可以不用。
存储:set key value
获取:get key
删除:del key
getrange:获得截取字符串内容
getrange key start_index end_index:截取key对应的value从[start_index, end_index]的值。下标从0开始,start_index代表起始下标,end_index代表结束下标非偏移量。当end_index为-1时,表示从起始下标一直取到结尾。
例如:key email 对应的value为xx@qq.com,则getrange email 0 3,得到"xx@q";getrange email 1 3,得到"x@q"。
strlen: 获得key对应的value的长度
set key,例如:strlen email 得到 9
setex:设置带有过期时间(秒)的key-value
setex key seconds value
psetex key milliseconds value: 前面加p设置过期时间以毫秒为单位
mset:设置多个key-value,每个key后面跟着对应的value,不同的key-value直接用空格分割
mset key1 value1 key2 value2 key3 value3
mget:获得多个key对应的value,不同的key用空格分割。
mget key1 key2 key3
append:用于在字符串结尾追加内容
append key value,当redis中存在该key,则将value的内容追加到原来的value的后面,若不存在,则类似set的功能,相当于将key的value设置为现在的值
举例:set hello "hello" append hello ", redis" 则get hello 得到"hello, redis"
运算
incr:数字自增加1、incrby:数字加上指定的整数值、incrbyfloat:数字加上指定的浮点数
对照:decr、decrby,但是没有float类型的,不过我们可以通过给incr_*传入负数实现减法
incr num,则get num是"1",继续incr num,再次get是"2"
incrby num 2,num 和 2都必须是整数,哪怕将2写成2.0也不行。
incrbyfloat num 2.0,num可以是整数也可以是小数,相加后会舍弃小数点后无意义的0,例如num若是2,则执行后num是4,get num得到"4",后续可以incr num也可以incrby num 2,但若num是2.0【set num 2.0 get num 得到"2.0"】,则只能用incrbyfloat num 2,此时再get num依旧得到"4"
哈希类型
这边的哈希类型只是为了能保存复杂的结构化数据。其实redis就是key-value的形式进行存储的,这边是将value再变成key-value的形式。
hset[hmset 在6.2.6版本中 hset 也可以同时设置多个 field value],设置哈希表子段
hset key field value [field value ...]
例:hset 1000 ename huahua deptno 20 age 30 job salesman
hget | hmget 获取哈希表字段值
hget key field | hmget key field [field ...],注意,要想同时取多个field的value,只能使用hmget。
hget 1000 age 得到 "30"
hgetall | hkeys | hvals: 获取哈希表该key所有的字段的值| 获取哈希表该key所有field的值|获取哈希表该key所有的value的值
hgetall key | hkeys key | hvals key
hlen:获取哈希表该key的field的个数, hlen key
hexists: 判断哈希表该key是否存在所给的field的字段, hexists key
hdel:删除哈希表该key所给的字段,可以删除多个, hdel key field [field ...]
运算
hincrby | hincrbyfloat:将哈希表该key对应的字段加给定数值和string类型的类似
hincrby key field intnum | hincrbyfloat key field num
列表类型
列表可以用来向value中保存序列化的数据。
rpush | lpush:从右 | 左 侧向value中添加数据,即在 末尾| 开头 添加,可以同时添加多个数据。
rpush | lpush key element [element ...]
注意,lpush,当用lpush一次性插入多个element时,先向开头插入element1,再向开头插入element2,则此时element2就在开头,element1在第二个位置,如下图:
lset:修改列表中对应下标【下标从0开始】的element的值
lset key index element
lrange :获取key中的下标从start到stop【包含】的元素,当stop=-1 或 大于等于列表长度,会直接从起始下标取到末尾
lrange key start stop
llen:获取key对应的所有元素的长度。
llen key
lindex:获取key对应下标的元素
lindex key index
linsert:向指定下标位置【通过元素值指定,从左往右的第一个遇到的元素的前后】插入元素,若不存在,则插入失败。
linsert key before | after 已存在的element 待插入的element
lpop | rpop:从列表的开头 | 末尾 弹出指定数目的元素,若不指定数目则弹出一个元素。
lpop | rpop key [count]
lrem:删除指定元素,从左往右删除count个,若一共也没有count个该元素,则该元素值全删,不存在该元素,则不删不会报错。
lrem key count element
集合类型
若要求value中的元素不可重复,可以使用集合类型,集合中元素的顺序不一定是插入元素的顺序。
sadd:向集合中添加元素,一次可以添加多个,添加的元素如果存在于集合中,则忽略,其他元素正常添加。
sadd key member [member ...]
smembers:查看集合中的所有元素
smembers key
scard:获取集合中成员的数目
scard key
sismember:判断集合是否含有某个成员
sismember key member
srem:删除集合中的成员,可以一次删除多个元素,若删除的成员不存在,则无法删除但不报错
srem key member [member ...]
spop:随即删除并返回集合的某个成员,随即删除可以一次性删除多个,删除多个也会返回多个,若删除的个数超出集合长度,则删除集合中所有成员并返回但不会报错。
spop key [count]
srandmember: 随机返回集合中的成员,可以返回多个,默认返回一个,最多返回所有成员,即若count超出了集合的长度,也只会返回所有值
srandmember key [count]
有序集合
redis要求有序集合中的元素除了有元素值还要有分数值,有序集合就是通过对分数值的排序实现对元素的排序。
有序集合是带有排序功能的集合,redis会按照元素分数值排序,其是集合故不存在重复元素,因其有序,所以其中的元素是有索引编号的。
zadd:增加元素
zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]
zincrby:对分数值进行加法运算
zincrby key increment member
127.0.0.1:6379> zadd keyword 0 luhan 0 zhangchaoyang 0 mayun
(integer) 3
127.0.0.1:6379> zrevrange keyword 0 -1
1) "zhangchaoyang"
2) "mayun"
3) "luhan"
127.0.0.1:6379> zincrby keyword 1 luhan
"1"
127.0.0.1:6379> zincrby keyword 5 mayun
"5"
127.0.0.1:6379> zincrby keyword 2 zhangchaoyang
"2"
127.0.0.1:6379> zrevrange keyword 0 -1
1) "mayun"
2) "zhangchaoyang"
3) "luhan"
zrevrange:获得有序集合下标在[start, stop]的内容【降序】,若带上WITHSCORES,则也会显示分数值,不带的话不显示
zrevrange key start stop [WITHSCORES]
zrange:获得有序集合的内容【升序】
zrange key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
zcard:获取有序集合长度
zcard key
zcount:查询某个分数范围内的元素数量,min | max表示最低最高分数值,均包含。
zcount key min max
zscore:返回元素的分数值
zscore key member
zrangebyscore:获得分数值区间[min, max]的内容【升序】,包含min和max,若要不包含在前面添加(。还有+inf 和 -inf。
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
zrevrangebyscore:获得分数值区间[min, max]的内容【降序】
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> zrangebyscore keyword 2 (5
1) "zhangchaoyang"
127.0.0.1:6379> zrangebyscore keyword (2 5
1) "mayun"
127.0.0.1:6379> zrangebyscore keyword 2 +inf
1) "zhangchaoyang"
2) "mayun"
127.0.0.1:6379> zrevrangebyscore keyword 5 2
1) "mayun"
2) "zhangchaoyang"
127.0.0.1:6379> zrevrangebyscore keyword 5 10
(empty array)
127.0.0.1:6379> zrevrangebyscore keyword 1 -inf
1) "luhan"
127.0.0.1:6379> zrevrangebyscore keyword (2 -inf
1) "luhan"
zrank:获得元素的升序排名(从0开始)
zrank key member
zrevrank:获得元素的降序排名(从0开始)
zrevrank key member
zrem:删除有序集合中的元素,zrem key member [member ...]
zrem keyword mayun zhangchaoyang
zremrangebyscore:删除分数值区间[start, stop]包含的元素,zremrangebyscore key min max
zremrangebyscore keyword 2 5
zremrangebyrank:删除排名区间[start, stop]的元素,包含,升序,从0开始, zremrangebyrank key start stop
127.0.0.1:6379> zrevrange keyword 0 -1 WITHSCORES
1) "mayun"
2) "5"
3) "zhangchaoyang"
4) "2"
5) "luhan"
6) "1"
127.0.0.1:6379> zremrangebyrank keyword 0 1
(integer) 2
127.0.0.1:6379> zrevrange keyword 0 -1 WITHSCORES
1) "mayun"
2) "5"
127.0.0.1:6379> zadd keyword 1 luhan 2 zhangchaoyang 5 mayun 7 liyanhong 0 hhh
(integer) 4
127.0.0.1:6379> zrevrange keyword 0 -1 WITHSCORES
1) "liyanhong"
2) "7"
3) "mayun"
4) "5"
5) "zhangchaoyang"
6) "2"
7) "luhan"
8) "1"
9) "hhh"
10) "0"
127.0.0.1:6379> zremrangebyrank keyword 0 -3 只保留最高的俩
(integer) 3
127.0.0.1:6379> zrevrange keyword 0 -1
1) "liyanhong"
2) "mayun"