redis五种数据类型以及其常用指令
redis五种数据类型以及其常用指令
启动相关
先启动服务端再启动客户端
启动服务端
redis-server
启动客户端
redis-cli(中文会乱码)
redis-cli --raw(中文不会乱码)
停止客户端
redis-cli shutdown
查看端口
ps -ef|grep -i redis
keys键操作
选择数据库:select
select 1 选择1号数据库
返回指定的key值:keys
keys * 返回所有的 key
keys my* 返回以my开头的 key
确认某个key是否存在:exists
exsits name
返回一个key的类型:type
type name
返回当前数据库中的key数量:dbsize
dbsize db
删除指定的key:del
del name
del name1 name2
修改一个 key 的名称:rename
rename oldname newname 将 key 为 oldname 改成 newname
设置一个 key 的过期时间(秒):expire
expire name 100 name 这个 key 将在 100 秒后被删除
返回某个 key 的过期时间(秒):ttl,key 不会过期返回 -1,key 不存在返回 -2
ttl name 查看name还有多久过期
将 key 移到指定数据库:move
move age 1 将 age 从当前数据库移到 1号数据库
删除当前数据库里的所有 key :flushdb
flushdb
删除所有数据库里的 key :flushall
flushall
字符串(String) 类型操作
string 是 redis 最基本的类型,一个 key 对应一个 value。
string 类型是二进制安全的。
意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
常用指令
添加键值对:set key value
set age 18
根据 key 获得 value:get key
get age
批量添加键值对:mset
mset name 罗琪 age 18 sex 女
批量获取值:mget key1 key2
mget name age sex
对 key 的值 +1,返回加后的值:incr key
incr age 对 age 的值 +1
对 key 的值加指定的数量,返回加后的值:incrby key num
incrby age 10 对 age 的值 +10
对 key 的值 -1,返回减后的值:decr key
decr age
对 key 的值减指定的数量,返回减后的值:decrby key num
decrby age 10 对 age 的值 -10
对 key 的值后面追加字符,返回追加后的长度:append key str
append name 爱你 在 name 的值后面加上爱你
哈希(Hash)类型操作
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,
hash 特别适合用于存储对象。
常用指令
向哈希表中添加一个字段:hset hashkey
hset myhash name 言曌
hset myhash age 18
hset myhash sex 男
添加一个 key 为 myhash 的哈希表,里面有三个字段,分别是 name,age,sex 对应的值如上
向哈希表中批量添加字段:hmset
hmset myhash name 琪琪 age 18 sex 女
获取一个哈希表中的指定字段的值:hget
hget myhash name 获得哈希表 myhash 中 name 的值
获得一个哈希表中多个字段的值:hmget
hmget myhash name age sex
获得一个哈希表的所有字段和值:hgetall
hgetall myhash
删除一个哈希表里的字段:hdel
hdel myhash name 删除 myhash 里的一个字段
hdel myhash age sex 删除多个字段
删除整个哈希表:del
del myhash
给一个哈希表中指定的字段加指定的数值:hincrby
hincrby myhash age 10 给 myhash 集合中的 age + 10
查看一个哈希表中某个字段是否存在:hexists
hexists myhash name
返回一个哈希表中字段数量:hlen
hlen myhash
返回一个哈希表中所有的 key:hkeys
hkeys myhash
返回一个哈希表中所有的 value:hvals
hvals myhash
List 类型操作
Redis 列表是简单的字符串列表,按照插入顺序排序。
你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
常用指令
往左侧添加元素(列表不存在会自动创建):lpush
lpush mylist a b c d
先创建(如果存在,不创建)一个 mylist,然后在从右往左侧依次添加 a,b,c,d 三个元素
最终得到使用 lrange 命令查看 mylist 为 d c b a
往右侧添加元素(列表不存在会自动创建):rpush
rpush mylish2 a b c d
先创建(如果存在,不创建)一个 mylist2,然后在左往右依次添加 a,b,c,d 三个元素
最终得到使用 lrange 命令查看 mylish2 为 a b c d
向已存在的列表从左侧添加元素(列表不存在返回0):lpushx
lpushx mylist e f g
向已存在的列表从右侧添加元素(列表不存在返回0):rpushx
rpushx mylist e f g
查看列表元素:lrange
lrange mylist 0 3
lrange mylist 0 -1
0 和 3 表示起始范围,负数表示倒数第几个
如果 mylist 只有 4 个元素,上面两句都是表示查看 mylist 列表中所有元素
弹出首部元素:lpop
lpop mylist
删除最左边的元素,并返回该元素
弹出尾部元素:rpop
rpop mylist
删除最右边的元素
返回列表的长度:llen
llen mylist
删除列表中的指定元素:lrem key count value
lrem mylist 2 a 删除 mylist 中的两个 a(从左边往右边找)
lrem mylist -2 a 删除 mylist 中的两个 a (从右边往左边找)
lrem mylist 0 a 删除 mylist 里的所有 a
设置指定坐标的值(替换已存在的元素,但下标不能越界):lset
lset mylist 3 mm 设置下标为3的元素为 mm
在某个元素前或后插入一个元素:linsert
linsert mylist before b aaaaa 在 第一个 b 元素前插入一个 aaaaa 元素
linsert mylist after b ccccc 在 第一个 b 元素后插入一个 ccccc 元素
弹出一个列表尾部元素,加到里另一个列表首部:lpoprpush source target
rpush list a b c d
rpush list2 1 2 3 4
lpoprpush list list2
返回 d
最终:list 的元素为:a b c
list2 的元素为:d 1 2 3 4
Set 类型操作
Set 和 List 最大区别是,Set 不会出现重复的元素
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
常用指令
向集合(不存在会创建)中添加元素:sadd
sadd myset a b c d
删除集合中的元素:srem
srem myset a 删除一个元素
srem myset b c 删除多个元素
查看集合中的元素:smembers
smembers myset
查看某元素是否在集合中(存在返回1,不存在返回0):sismember
sismember myset a
差运算,返回差集(前面的-后面的):sdiff
sadd set a b c d
sadd set2 c d e f
sdiff set set2
set 集合减去 set2 集合,返回 a b
交运算,返回集合都有的元素:sinter
sadd set a b c d
sadd set2 c d e f
sinter set set2
返回 set 和 set2 集合都有的元素,即 c d
并运算,返回两个集合所有的元素:sunion
sadd set a b c d
sadd set2 c d e f
sunion set set2
返回 set 和 set2 集合所有的元素,即 a f e d b c
返回 set 的长度:scard
scard myset
返回集合中随机一个元素:srandmember
srandmember myset
将两个集合的差集放到一个新的集合里:sdiffstore
sadd set a b c d
sadd set2 c d e f
sdiffstore newset set set2
最终 newset 结果为 a b
将两个集合的交集放到一个新的集合里:sinterstore
sadd set a b c d
sadd set2 c d e f
sinterstore newset set set2
最终 newset 结果为 c d
将两个集合的并集放到一个新的集合里:sunionstore
sadd set a b c d
sadd set2 c d e f
sunionstore newset set set2
最终 newset 结果为 a b c d e f
sorted-set 类型操作
redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
常用指令
添加一个元素:zadd
格式:zdd score value 其中 score 表示权值
zadd mysort 78 李明
zadd mysort 90 言曌
zadd mysort 98 罗琪
查询指定元素的分数:zscore
zscore mysort 言曌
删除指定元素:zrem
zrem mysort 李明
查询集合的元素个数:zcard
zcard mysort
范围查找,排序由小到大:zrange
zrange mysort 0 -1 查询所有的元素值
zrange mysort 0 -1 withscores查询所有的元素值和对应的分数
范围查找,排序有大到小:zrevrange
zrevrange mysort 0 -1 查询所有的元素值
zrevrange mysort 0 -1 withscores查询所有的元素值和对应的分数
按照排名删除:zremrangebyrank
zremrangebyrank mysort 0 2 删除排名前三的(从小到大的顺序)
按照分数范围删除:zremrangebyscore
zremrangebyscore mysort 80 100 删除 0-60 分的元素
查询分数范围内的元素:zrangebyscore
zrangebyscore mysort 0 60 查询分数在 0-60 分的元素
zrangebyscore mysort 0 60 limit 0 2 查询分数在 0-60 分的元素,返回 前 2 个
给指定的元素的分数增加分数:zincrby
格式:zincrby key increment member
zincrby mysort 5 言曌 给言曌加5分
返回指定分数范围内的元素个数:zcount
zcount mysourt 10 100 返回 10-100 分内的元素个数