数据类型介绍

  • Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
  • 数据是以键值对的形式存储的,也就是一个key对应一个value。
    注意:上面说的五种数据类型指的是value的类型,而不是key的类型。
String(字符串)
  • string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
  • string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。而且不会有乱码。
Hash(哈希)
  • Redis hash 是一个键值(key=>value)对集合,类似java里面的Map。
  • Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
    注意:指的是在Redis中存储的键值(key、value)对中的value的类型是Hash类型。Redis中存储数据本就是键值对,而这个值又可以为Hash类型,也就是Map。
List(列表)
  • Redis 列表是简单的字符串列表,按照插入顺序排序。
  • 可以添加一个元素到列表的头部(左边)或者尾部(右边)。
  • 它底层实际是一个链表,类似于java里面的LinkedList。
Set(集合)
  • Redis的Set是string类型的无序集合,集合中不能出现重复的数据。
  • 它是通过哈希表实现的。
zset(sorted set:有序集合)
  • Redis zset 和 set 一样也是string类型元素的集合, 且不允许重复的成员。
  • 不同的是每个元素都会关联一个double类型的分数。
  • redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的, 但分数(score)却可以重复。

redis常用命令

  • keys * 查询所有的key
  • exists key的名字,判断某个key是否存在,存在返回1,不存在返回0
  • expire key 秒钟:为指定的key设置过期时间,没设置就表示永不过期
  • ttl key 查看还有多少秒过期,-1 表示永不过期,-2表示已过期
  • persist key 持久化某个key,让这个key永不过期
  • type key 查看你的key对应的值是什么类型
  • del key [key …]删除指定的key(指定多个key时,用空格隔开)
  • move key db 将key移动到指定的库,默认是放在0号库。(Redis默认支持16个数据库,0~15)
  • select num 切换指定的的redis数据库
  • flushdb 或 flushall 清空redis数据库(仅练习时使用,工作后慎用)
  • flushdb 清空当前数据库中的key
  • flushall 清空所有数据库中的key
  • rename key newkey 重命名key,如果新的名称存在时则覆盖
  • renamenx key newkey 重命名key,新名称不存在时才能命名成功,否则什么也不做

Redis字符串String的常用命令

命令

描述

例子

Set

设置/更新 key 的值

set key value

Set … ex …

设置/更新 key 的值,并设置有效时间

set key value ex seconds

Get

获取 key 的值

get key

append

追加字符串

append key value

decr

减少值(只能是对整型操作)

decr key

incr

增加值

incr key

decrby

根据步长减少值

decr key step

incrby

根据步长增加值

incr key step

增加:increment 减少:decrement

命令

描述

例子

getset

先获取值再赋值

getset key value

strlen

返回key对应value的长度

strlen key

setex

设置值及有效存储时间

setex key seconds value

setnx

key不存在时设置值;存在则不设置

setnx key value

setrange

替换指定索引开始的字符串

setrange key start value

getrange

获取指定位置的字符串(含头尾)

getrange key start end

命令

描述

例子

mget

返回多个key的值

mget key [key…]

mset

设置多个key、value

mset key value [key value …]

msetnx

key不存在设置(只要有一个存在,则全部设置不成功)

msetnx key value [key value…]

Redis列表List的常用命令

命令

描述

例子

lpush

从左往右向list中添加元素

lpush key value [value…]

rpush

从右往左向list中添加元素

rpush key value [value …]

lrange

遍历list中指定位置的数据

lrange key start stop

lpushx

key存在则追加元素,不存在则不操作

lpushx key value

rpushx

key存在则追加元素,不存在则不操作

rpushx key value

lpop

弹出最左边(头部)的元素

lpop key

rpop

弹出最右边(尾部)的元素

rpop key

llen

返回key对应列表中元素的个数

llen key

注意:当集合中所有元素都弹完后,key会被释放掉。

命令

描述

例子

lrem

从左往右删除指定key中count个值为value的元素。如果count>0,从左往右删;如果count<0,从右往左删;如果等于0,则删除所有值为value的元素。

lrem key count value

lset

将指定索引位置元素设置成value

lset key index value

lindex

获取指定索引位置的元素

lindex key index

ltrim

去除指定索引位置两边的元素

ltrim key start end

linsert

在某个值的前面或后面插入新的值(如果有多个值,只会在第一个值前/后插入)

linsert key before|after pivot value

rpoplpush

从一个集合的尾部弹出一个值,插入到另一个集合的头部

rpoplpush source destination

  • 注意:可以用rpoplpush实现任务队列,构建循环队列。
    rpoplpush sourceKey destinationKey,如果sourceKey 和 destinationKey 相同,则可以构成循环队列。

Redis哈希Hash的常用命令

命令

描述

例子

hset

给key中的field字段赋值,返回键值对数量

hset key field value [field value …]

hget

获取key中field字段的值

hget key field

hmset

给key中的field字段赋值, 返回OK

hmset key field value [field value …]

hmget

获取key中多个field字段的值

hmget key field [field …]

hdel

删除field字段

hdel key field [field …]

hexists

判断field是否存在

hexists key field

hgetall

获取key中所有的键值

hgetall key

hincrby

给field按步长增加值(只能是整型)

hincrby key field inrement

hlen

获取key对应的容器中元素的个数

hlen key

hsetnx

field不存在则赋值,存在则不做修改

hsetnx key field value

hkeys

获取key中所有的field

hkeys key

hvals

获取key中所有的value

hvals key

集合Set的常用命令

命令

描述

例子

sadd

向set集合中添加元素

sadd key member [member …]

smembers

遍历集合中所有元素

smembers key

scard

获取set集合中的成员数量

scard key

sismember

判断某元素是否存在

sismember key member

srem

删除指定的成员(元素)

srem key member [member …]

spop

随机弹出一个元素

spop key

**注意:**不管是list、hash、set、zset,只要容器中没有元素了,redis就会将这块空间回收,所以key自然也就不存在了。

命令

描述

例子

srandmember

随机返回一个或多个成员,不删除原值

srandmember key [count]

smove

将一个集合中的成员移到另一个集合中

smove source destinaion member

sdiff

求多个集合的差集,不会改变原集合中的数据

sdiff key [key …]

sdiffstore

将差集结果存到新集合中

sdiffstore destination key [key …]

sinter

求多个集合的交集

sinter key [key …]

sinterstore

将交集结果存到新集合中

sinterstore destination key [key …]

sunion

求多个集合的并集

sunion key [key …]

sunionstore

将并集结果存到新集合中

sunionstore destination key [key …]

集合ZSet(sortedset)的常用命令

命令

描述

例子

zadd

添加排序成员

zadd key score member [score member …]

zcard

获取成员数量

zcard key

zcount

获取分数在min和max之间的成员个数

zcount key min max

zrange

根据索引遍历成员及分数

zrange key start stop [withscores]

zrevrange

遍历成员及分数 (按分数从大到小的顺序)

zrevrange key start stop [withscores]

zincrby

增加指定成员的分数

zincrby key inrement member

zrangbyscore

获取分数在min和max之间的成员和分数

zrangbyscore key min max [withscores] [limit offset count]

zrevrangbyscore

获取分数在min和max之间的成员和分数(按分数从大到小的顺序)

zrevrangbyscore key max min [withscores] [limit offset count]

命令

描述

例子

zrank

返回成员下标

zrank key member

zrevrank

返回成员下标(按分数从大到小的顺序)

zrevrank key member

zscore

获取指定成员的分数

zscore key member

zrem

删除指定成员

zrem key member [member…]

zremrangebyrank

删除下标之间的数据

zremrangebyrank key start stop

zremrangebyscore

删除分数在min和max之间的成员

zremrangebyscore key start stop