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 分内的元素个数