前言
redis 是一种高性能的key-value数据库,所以对key的操作是最基础的东西,这里写的关于key与redis常用数据类型的一些东西。
一、key操作
1.查看当前库所有的key
keys *
2.判断某个key是否存在
exist key
3.查看key的数据类型
type key
4.删除指定的key数据
del key
unlink key 根据value 选择非阻塞删除
这两个都能删除数据
unlink 删除数据,仅将keys 从keyspace 元数据中删除,真正的删除会在后续异步操作
5.设置过期时间
expire key 10 默认是以秒为单位
6.查看剩余存在时间
ttl key -1表示永不过期 -2表示已过期
二、String相关操作
1.简介
String 是Redis 最基本的类型,一个key 对应一个value
String类型是二进制安全的。意味着Redis的string 可以包含任何数据
String类型是redis最基本的数据类型,一个redis中的字符串value最多可以是512M
2.增删改查
2.1 添加数据
添加单个key-value
set key value
setnx key value
setnx只有在key不存在时才设置key的值
添加多个key-value
mset key value key value key value …
msetnx key value key value key value…
msetnx 在设置中,只要有一个key被设置过,其他的都不会成功
设置过期时间的同时设置内容
setex key 秒数 value
设置新值的时候,获得旧值
2.2 删除数据
del key(1就代表删除成功了)
2.2 修改数据
如果我们需要重新修改一遍
set key 新的value
如果我们需要在原来的value的基础上添加数据
append key value
需要注意的是,
1.如果所写的key是不存在的,append会自动添加一个key。也就说,在key不存在的情况下,该命令的效果和set key value的效果是相同的
2.如果你想往里面添加空格,value可以写成 这样的形式" "
如果你想添加的字符串里面有空格,也要在 " " 里面写,比如"hello world"
指定位置添加字符串
setrange key 下标值 value
这个类似于word 的insert模式
我提醒几点
第一,在该命令中,修改的文字从指定的下标值开始,
比如说,你指定了从3下标值开始改,那么下标值3的那个位置就变了,请看上面那个图
第二,修改的字数是不受限制的,没有说,只能修改以前那些字数,超字数就报错了
2.3 查看数据
因为是key-value数据库,所有我们知道key就能查看数据,命令也很简单
查看单个数据
get key
上面已经多次用到了get,这里就不再演示了
查看多个数据
mget key key key
这样无聊也是行的
获取字符串片段
我个人觉得其实就是切片操作
getrange key start end(下标)
关于切片,读者应该很熟悉了,我只提醒几点
redis的下标值是从0开始的
两边都是闭区间
2.4 对数字类型进行加减操作
2.4.1 增加
自增1
incr key(要注意,只能对数字值进行操作)
增加特定数字
incrby key 数字
2.4.2 减少
自减1
decr key
减少特定数字
decrby key 数字
这些数字可以减少到负数
2.5 获取字符串长度
strlen key
三、list操作
1.简介
list这种数据结构是单键多值
关于redis的list,可以简单的理解为双向链表,至于底层的东西具体是什么样子,以后再了解吧
2.增
因为底层是双向链表,所以很多操作要分左右
lpush key value value value value …
从左边插入一个或多个值(注意顺序,1因为从左往右先添加,所以在最右边,也就是第三个)
rpush key value value value value …
问,如果我先使用左push,添加1,2,3,然后再使用右push 4,5,6,请问这些数字的顺序是什么。好好想一想再看答案吧。
linsert key before(after) value newvalue
3.删
lpop key 从左边删除一个值
rpop key 从右边删除一个值
注意:如果值删完了,key也不存在了
从右边吐出一个值,插入到key列表左边
rpoplpush key1 key2
替大家试过了,没有lpoprpush
从左边删除n个value(从左到右)
lrem key n value
注意,假设你的list里面存在2个"v1",你的n写成一个大于2的数也是可以的,不会报错
4.改
修改某个值
lset key index value 将下标为 index 的值替换成为value
5.查
lrange key start end (下标从左向右)
我替大家试过了,没有rrange
5.获取列表长度
llen key
6.按照索引下标获取元素(从左到右)
lindx key index
列表的索引我相信各位已经很熟了
四、set操作
redis 的set 是一个自动去重的无序集合。跟python的set挺像的。
1.增
**sadd key value1 value2…**可以将一个或多个member元素加入到集合key中,已经存在的member元素将被忽略
2.删
srem key value1 value2 … 删除集合中的某个元素
spop key 随机从该集合中删除一个值
srandmember key n 随机 从该集合中取出n个值,不会从集合中删除
3.改
我暂时还没看到可以对里面的值进行修改的操作
4.查
smembers key 取出该集合的所有值
scard key返回该集合的元素个数
5.set之间的运算
为了更好的演示,我新创建了两个set
s1 有 1 2 3 4
s2 有 2 3 5 6
请记住他们,我们下面都是基于这两个来演示
smove key1 key2 value 把集合中的一个值从一个集合移动到另外一个集合
sinter key1 key2 返回两个集合的交集元素
sunion key1 key2 ** 返回两个集合的并集元素
sdiff key1 key2 返回两个集合的差集**元素(key1中的,不包含key2中的)
6.判断是否存在value
sismember key value 判断集合 key 是否为含有该value值,有1,没有0
五、hash 操作
1.简介
hash这种数据类型,不是一个key对应一个value,而是一个key对应一张表,
key→fields→values
2.数据结构
Hash 类型对应的数据结构是两种:ziplist (压缩列表),hashtable(哈希表),当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。
3.增
设置单个field value
hset key field value
设置多个field value
hmset key field value field value …
hset key field value field value …
注意!!! HSET过去只能设置一个键值对。而且,如果您需要一次设置多个,则必须使用HMSET(M表示多重)。几年前进行了更改,以允许两个命令都接受多个对。现在HMSET是多余的。根据Redis 4.0.0,HMSET被视为已弃用(但是还可以继续使用)。请在新代码中使用HSET。
当且仅当域field不存在时才能添加成功
hsetnx key field value
4.删
hdel key field
5.改
使用hset这种就能对表进行修改
6.查
取出全部的field-value
hgetall key
取出全部的field
hkeys key
取出全部的value
hvals key
取出单个的value
hget key field
7.判断存在
hexists key field
查看哈希表key中,给定域field是否存在
8.对数字进行操作
还记得user:1001中的id吗?我们可以比较方便的进行自增和自减操作。
五、zset 操作
1.简介
有序集合zset与普通集合的相同之处在于,他们都是一个没有重复元素的字符串集合
不用之处在于,zset会指定一个**评分(score)**进行排序(score 可以重复)
2.增
zadd key score1 value1 score2 value2,
将一个或多个member元素及其score值加入到有序集key当中
3.删
zrem key value
删除该集合下,指定值的元素
4.改
zincrby key increment value 为元素的score 加上值
5.查
查所有
zrange key start stop [withscores]
默认是从小到大排序
返回有序集合key中,下标在start stop 之间的元素
withsocres就是说带不带scores显示,可写可不写
**zrevrange key start stop [withscores]**从大到小
根据分数查所有
zrangebyscore key min max [withscores]
根据分数来把values选择出来,withscores可写可不写
zrevrangebyscore key max min [withscores]
同上面一样,但是变成了从大到小排序
但是要注意!!! 参数变成了先写max 再写 min
查看元素分数
zscore key member
查member元素的分数
查看集合中元素个数
zcard key
查看指定分数范围内的元素个数
zcount key min max
6.排序
zrank key value 返回该值在集合中的排名,从0开始