Redis-数据类型,常用命令

Posted MinggeQingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis-数据类型,常用命令相关的知识,希望对你有一定的参考价值。

一、五种数据结构

1、string字符串

字符串类型是Redis中最基本的数据结构,它能存储任何类型的数据,包括二进制数

据,序列化后的数据,JSON化的对象甚至是一张图片

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB

2、list列表

Redis列表是简单的字符串列表,按照插入顺序排序,元素可以重复

可以添加一个元素到列表的头部(左边)或者尾部(右边),底层是个链表结构

3、Set集合

Redis的Set是string类型的无序无重复集合

4、Hash哈希

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象

5、zset (sorted set)有序集合

Redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复元素

不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。

二、常用命令

Redis英文版命令大全Commands | Reds

Redis中文版命令大全Redis 命令参考 — Redis 命令参考

(1)首先我们通过 redis-cli 连上Redis客户端之后 输入 ping,redis 给我们返回 PONG,表示 redis 服务运行正常

 (2)测试redis服务的性能:

redis-benchmark

 1.56秒完成10万次数据请求,体现redis的高可用性

(3)查看redis服务器的统计信息:info

Redis默认使用16个库,从0到15

(4)切换库命令:select db;默认使用第0个

(5)查看当前数据库中key的数目:dbsize

(6)清空当前库:flushdb

(7)清空所有数据库:flushall

(8)config get * 获得redis的所有配置值

如:获取端口号config get port

(一)Key命令

1、查看数据库中的key:keys pattern

*:匹配0个或者多个字符

?:匹配1个字符

[]:匹配[]里边的1个字符

keys *:查看数据库中所有的key

keys k*:查看数据库中所有以k开头的key

keys h*o:查看数据库中所有以h开头、以o结尾的key

2、判断key在数据库中是否存在:exists key

如果存在,则返回1;如果不存在,则返回0

exists key [key key ....] 返回值是存在的key的数量

3、移动指定key到指定的数据库实例:move key index

4、查看指定key的剩余生存时间:ttl key

如果key没有设置生存时间,返回-1;如果key不存在,返回-2

5、设置key的最大生存时间:expire key seconds

6、查看指定key的数据类型:type key

7、重命名key: rename key newkey

8、删除指定的key:del key [key key .....] ;返回值是实际删除的key的数量

(二)String命令

1、将string类型的数据设置到redis中:set 键 值

set key value

2、获取string类型的数据:get 键

3、追加字符串:append key value

返回追加之后的字符串长度;如果key不存在,则新创建一个key,并且把value值设置为value

4、获取字符串数据的长度:strlen key

5、将字符串数值进行加1运算:incr key

如果key不存在,首先设置一个key,值初始化为0,然后进行incr运算

6、字符串数值进行减1运算:decr key

如果key不存在,首先设置一个key,值初始化为0,然后进行decr运算

要求key所表示value必须是数值,否则,报错

7、将字符串数值进行加offset运算:incrby key offset

返回加offset运算之后的数据

如果key不存在,首先设置一个key,值初始化为0,然后进行incrby运算。

要求key所表示value必须是数值,否则,报错

8、将字符串数值进行减offset运算:decrby key offset

返回减offset运算之后的数据

如果key不存在,首先设置一个key,值初始化为0,然后进行decrby运算

要求key所表示value必须是数值,否则,报错

9、闭区间获取字符串key中从startIndex到endIndex的字符组成的子字符串:

getrange key startIndex endIndex

下标自左至右,从0开始,依次往后,最后一个字符的下标是字符串长多-1;

字符串中每一个下标也可以是负数,负下标表示自右至左,从-1开始,依次往前,最右边一个字符的下标是-1

10、用value覆盖从下标为startIndex开始的字符串,能覆盖几个字符就覆盖几个字符:

setrange key startIndex value

11、设置字符串数据的同时,设置它最大生命周期:setex key seconds value

12、设置string类型的数据value到redis数据库中,当key不存在时设置成功,否则,则放弃设置:setnx key value

13、批量将string类型的数据设置到redis中:mset 键1 值1 键2 值2 .....

14、批量从redis中获取string类型的数据:mget 键1 键2 键3.....

15、批量设置string类型的数据value到redis数据库中,当所有key都不存在时设置成功,否则(只要有一个已经存在),则全部放弃设置:msetnx 键1 值1 键2 值2 .....

(三)List命令

1、将一个或者多个值依次插入到列表的表头(左侧):lpush key value [value value .....]
       lpush list01 1 2 3  结果:3 2 1
       lpush list01 4 5     结果:5 4 3 2 1

2、获取指定列表中指定下标区间的元素:lrange key startIndex endIndex
       lrange list01 1 3  结果:4 3 2
       lrange list01 1 -2 结果: 4 3 2
       lrange list01 0 -1 结果:5 4 3 2 1

3、将一个或者多个值依次插入到列表的表尾(右侧):rpush key value [value value .....]
       rpush list02 a b c 结果:a b c
       rpush list02 d e   结果:a b c d e
       lpush list02 m n   结果: n m a b c d e

4、从指定列表中移除并且返回表头元素:lpop key
        lpop list02

5、从指定列表中移除并且返回表尾元素:rpop key
        rpop list02

6、获取指定列表中指定下标的元素:lindex key index
       lindex list01 2 结果:3

7、获取指定列表的长度:llen key
       llen list01

8、根据count值移除指定列表中跟value相等的数据:lrem key count value

count>0:从列表的左侧移除count个跟value相等的数据;

count<0:从列表的右侧移除count个跟vlaue相等的数据;

count=0:从列表中移除所有跟value相等的数据

lpush list03 a a b c a d e a b b  结果:b b a e d a c b a a

lrem list03 2 a  结果:b b e d c b a a

lrem list03 -1 a 结果:b b e d c b a

lrem list03 0 a  结果:b b e d c b

9、截取指定列表中指定下标区间的元素组成新的列表,并且赋值给key:

ltrim key startIndex endIndex

10、将指定列表中指定下标的元素设置为指定值:

lset key index value
       lset list04 1 10

11、将value插入到指定列表中位于pivot元素之前/之后的位置:

linsert key before/after pivot vlaue

linsert list04 before 10 50

linsert list04 after 10 60

(四)Set命令

单key-多无序value;

一个key对应多个vlaue;value之间没有顺序,并且不能重复

1、将一个或者多个元素添加到指定的集合中:sadd key value [value value ....]

如果元素已经存在,则会忽略。返回成功加入的元素的个数

sadd set01 a b c a  结果:a b c

sadd set01 b d e

2、获取指定集合中所有的元素:smembers key
      smembers set01

3、判断指定元素在指定集合中是否存在:sismember key member
      *存在,返回1
      *不存在,返回0
      sismember set01 f
      sismember set01 a

4、获取指定集合的长度:scard key
      scard set01

5、移除指定集合中一个或者多个元素:srem key member [member .....]
      *不存在的元素会被忽略
      *返回成功成功移除的个数
      srem set01 b d m

6、随机获取指定集合中的一个或者多个元素:

srandmember key [count]

ount>0:随机获取的多个元素之间不能重复

count<0: 随机获取的多个元素之间可能重复
      sadd set02 1 2 3 4 5 6 7 8
      srandmember set02
      srandmember set02 3
      srandmember set02 -3

7、从指定集合中随机移除一个或者多个元素:spop key [count]
      spop set02

8、将指定集合中的指定元素移动到另一个元素:smove source dest member
      smove set01 set02 a

9、获取第一个集合中有、但是其它集合中都没有的元素组成的新集合:sdiff key key [key key ....]
      sdiff set01 set02 set03

10、获取所有指定集合中都有的元素组成的新集合(交集):sinter key key [key key ....]
      sinter set01 set02 set03

11、获取所有指定集合中所有元素组成的大集合(并集):sunion key key [key key .....]
      sunion set01 set02 set03

(五)Hash命令

1、将一个或者多个field-vlaue对设置到哈希表中:hset key filed1 value1 [field2 value2 ....] 
      *如果key field已经存在,把value会把以前的值覆盖掉
      hset stu1001 id 1001
      hset stu1001 name zhangsan age 20

2、获取指定哈希表中指定field的值:hget key field
      hget stu1001 id
      hget stu1001 name

3、批量将多个field-value对设置到哈希表中: hmset key filed1 value1 [field2 value2 ....] 
      hmset stu1002 id 1002 name lisi age 20

4、批量获取指定哈希表中的field的值:hmget key field1 [field2 field3 ....]
      hmget stu1001 id name age

5、获取指定哈希表中所有的field和value:hgetall key
      hgetall stu1002

6、从指定哈希表中删除一个或者多个field:hdel key field1 [field2 field3 ....]
      hdel stu1002 name age

7、获取指定哈希表中所有的filed个数:hlen key
      hlen stu1001
      hlen stu1002

8、判断指定哈希表中是否存在某一个field:hexists key field
      hexists stu1001 name
      hexists stu1002 name

9、获取指定哈希表中所有的field列表:hkeys key
      hkeys stu1001
      hkeys stu1002

10、获取指定哈希表中所有的value列表:hvals key
      hvals stu1001
      hvals stu1002

11、对指定哈希表中指定field值进行整数加法运算:hincrby key field int
      hincrby stu1001 age 5

12、对指定哈希表中指定field值进行浮点数加法运算:hincrbyfloat key field float
      hset stu1001 score 80.5
      hincrbyfloat stu1001 score 5.5

13、将一个field-vlaue对设置到哈希表中,当key-field已经存在时,则放弃设置;否则,设置file-value:hsetnx key field value
      hsetnx stu1001 age 30

(六)Zset命令

有序集合; 本质上是集合,所有元素不能重复;

每一个元素都关联一个分数,redis会根据分数对元素进行自动排序;分数可以重复;

既然有序集合中每一个元素都有顺序,那么也都有下标;

有序集合中元素的排序规则又列表中元素的排序规则不一样

1、将一个或者多个member及其score值加入有序集合:zadd key score member [score member ....]
      *如果元素已经存在,则把分数覆盖
      zadd zset01 20 z1 30 z2 50 z3 40 z4
      zadd zset01 60 z2

2、获取指定有序集合中指定下标区间的元素:zrange key startIndex endIndex [withscores]
          zrange zset01 0 -1
      zrange zset01 0 -1 withscores (查看区间元素以及对应分数)

3、获取指定有序集合中指定分数区间(闭区间)的元素:zrangebyscore key min max [withscores]
      zrangebyscore zset01 30 50 withscores

4、删除指定有序集合中一个或者多个元素:zrem key member [member......]
      zrem zset01 z3 z4

5、获取指定有序集合中所有元素的个数:zcard key
      zcard zset01

6、获取指定有序集合中分数在指定区间内的元素的个数:zcount key min max
          zcount zset01 20 50

7、获取指定有序集合中指定元素的排名(排名从0开始): zrank key member
      zrank zset01 z4  ===>2

8、获取指定有序集合中指定元素的分数:zscore key member
      zscore zset01 z4

9、获取指定有序集合中指定元素的排名(按照分数从大到小的排名):zrevrank key member
      zrevrank zset01 z4  ===>1

以上是关于Redis-数据类型,常用命令的主要内容,如果未能解决你的问题,请参考以下文章

Redis-数据结构&常用指令:String,Hash,List...等类型

解析Redis操作五大数据类型常用命令

Redis基础认识内存式NoSQL数据库及简单使用Redis

Redis基础认识内存式NoSQL数据库及简单使用Redis

深入了解Redis操作五大数据类型常用命令

redis数据类型及常用命令