Redis五大数据类型
- String、List、Set、Hash、Zset
- 官方文档
String(字符串)
append 追加字符串
语法:append key value
- key 存在 --> 追加字符串
- key 不存在 --> 新建一个
key value
,相当于set key value
,但又有些不同:新建的key的位置永远在原来第一个key的后面
strlen 查看key的长度
语法:strlen key
incr 自增 i++
语法:incr key
**
- key中的value必须是数字,不然会报错
decr 自减 i--
语法:decr key
incrby 自增 i+=step
语法:incrby key step
decrby 自减 i-=step
语法:decrby key step
getrange 获取value在区间[a,b]的值
语法:getrange key a b
setrange 将value从位置a开始替换字符串
语法:setrange key a str
- str有多长就替换多长
- 从位置a开始,如果不够替换会默认继续往后追加
- 从位置a开始,如果够替换,就将str替换进去,其余不变。
setex 设置key的value失效时间
语法:setex key seconds value
- ttl key 查看key存在的剩余时间,永久为-1
setnx set if no exist
语法:setnx key value
- 要设置的key存在,该语句失效
- 要设置的key不存在,设置这个key value
mset 同时设置多个key value
语法:mset k1 v1 k2 v2 k3 v3
mget 同时获取多个key的value
语法:mget k1 k2 k3
msetnx 同时设置多个key value,但是一个key失效,其他key也失效
语法:msetnx k1 v1 k2 v2
- 要设置的key至少有一个在原先就存在-->要设置的key全部失效----->
原子性
- 要设置的key在原先都不存在--->创建key value
getset 先返回原先的值,再将原先的值修改
语法:getset key value
- 若原先没有值,则返回nil
- 若原先有值,先返回原先的值,再将原先的值修改
存一个对象
语法:mset 对象名:对象值:对象属性1 对象属性1的值 对象名:对象值:对象属性2 对象属性2的值 .....
- 关于对象,这里设计的key的设计 -->
对象名:对象值:对象属性
List(列表)
- List可以看成一个双向链表
- 所有的命令都是以
L
(大小写都可)开头,有特例 - 特例:
- rpush 右插入
- rpop 右弹出
- rpoplpush 右弹出左插入
- exists 判断是否存在
lpush 存值到列表头部(最左边)
语法:lpush list_name key_value
rpush 存在到列表尾部(最右边)
语法:rpush list_name key_value
lrange 查看区间[A,B]内的列表的值
语法:lrange list1 a b
lpop 取列表头部(最左边)的值,list被改变
语法:lpop list_name
rpop 取列表尾部(最右边)的值,list被改变
语法:rpop list_name
lindex 获得列表指定下标的值
语法:lindx list_name index
llen 获得列表的长度
语法:llen list_name
lrem 移除指定值,指定移除几个
语法:lrem list_name rem_number rem_value
- rem_number为几就移除几个,如果rem_number大于list中的数量,则把list中的这个rem_value全移除,不会报错。
ltrim 截取[a,b]内的值,列表发生改变
语法:ltrim list_name a b
rpoplpush 移除a列表的最右边元素,并将它移动到b列表
语法:rpoplpush list_name1 list_name2
lset 将指定下标的值替换
语法:lset list_name index value
- 如果list不存在,就会报错
exists 判断列表是否存在
语法:exist list_name
linsert 在列表中插入值
语法:linsert list_name before/after old_value new_value
Set(集合)
- Set中的值是不重复的
- Set命令以
S
开头 - Set无需不重复,随机
sadd 往Set集合中添加值
语法:sadd set_name value
smembers 查看set集合中所有的值
语法:smembers set_name
sismember 判断当前值是否在Set集合中
- 返回值为1 -->存在
- 返回值为0 -->不存在
语法:
sismember set_name value
scard 获取set集合中的值的个数
语法:scard set_name
srem 移除set集合中的指定元素
语法:srem set_name value
srandmember 随机抽取元素
- number为抽取元素的个数,默认为1
语法:
scard set_name (number)
spop 随机删除set集合中的值
- number为删除元素的个数,默认为1
语法:
spop set_name (number)
smove 将一个指定的值移动到另一个set集合
语法:smove set_name new_set_list value
sdiff 两个集合的差集
语法:sdiff set_name1 set_name2
sinter 两个集合的交集
语法:sinter set_name1 set_name2
sunion 两个集合的并集
语法:sunion set_name1 set_name2
Hash(哈希)
- 想象成Map集合, key-<key,value>
- 原先的value变成了一个map集合
- 所有的命令以
H
开头 - 更适合存储对象
hset 将字段和字段值存入hash表
语法:hset key field value
hget 获取hash表中对应字段的值
语法:hget key field
hmset 一次性设置多个字段及它们对应的值
语法:hmset key filed1 value1 key field2 value2 ...
hmget 一次性获取多个哈希表中多个字段的值
语法:hmget key field1 field2
hexists 判断哈希表中是否存在某个字段
语法:hexists key field
hgetall 获取哈希表中所有的字段和字段值
语法:hgetall key
hkeys 获取哈希表中所有的字段
语法:hkeys key
hvals 获取哈希表中所有的字段值
语法:hvals key
hlen 获取哈希表中有多少个字段
语法:hlen key
hdel 删除哈希表的字段
语法:hdel key field1 (field2 ....)
hincrby 将哈希表中的字段值增加值
- number 为增加的值
- 增加的字段必须是数字
语法:
hincrby key field number
Zset(有序集合)
- 在set的基础上,增加了一个字段
score
,可以通过该字段来进行排序 score
相同,则按字典顺序排序
zadd 向有序集合添加一个或多个成员,或者更新已存在成员的分数
用法: zadd key scoreq member1 score2 member2 ...
zcard 获取有序集合的成员数
用法: zcard key
zcount 计算在有序集合中指定区间score的成员数
用法: zcount key min max
zincrby 有序集合中对指定成员的分数加上增量 n
用法: zincrby key n member
zscore 返回有序集中,成员的分数值
用法: zscore key member
zrank 返回有序集合中指定成员的索引
用法: zrank key member
zrange 通过索引区间返回有序集合成指定区间内的成员
用法: zrange key start end
zrangebylex 通过字典区间返回有序集合的成员
用法: zrangebylex key min max
zrangebyscore 通过分数返回有序集合指定区间内的成员 -inf 和 +inf分别表示最小最大值,只支持开区间()
用法: zrangebyscore key min max
zrem 移除有序集合中一个/多个成员
用法:zrem key member1 member2..
zrevrange 返回有序集中指定区间内的成员,通过索引,分数从高到底
用法:zrevrange key start end