redis入门第二篇-------redis五种数据类型及常使用命令
redis是键值对<key,value>形式的数据库,因此redis的命令都是对键值对进行操作的。
其中value为redis支持五种数据类型:String、list、set、zset、hash。
对String类型进行操作
其中String是最redis中最基本的数据类型,String表示的不只是字符串,还可以是数值类型,jpg格式或序列化的对象。而其它四种类型相当于Java中的集合,最终存储的数据还是String类型。
常见的命令有:
set key val // 新建(或修改)一个键值对
get key // 获取key对应的val
del key // 删除key对应的键值对
keys * // 获取存在的所有的key
exists key // 若key存在返回1,不存在则返回0
type key // 获取key对应val的数据类型
expire key time(s) // 设置键值对的存活时间,以秒为单位.(设置手机验证码时可以用上)
ttl key // 获取键值对剩余的有效期,-1表示永不过期,-表示已经过期
setnx key val // 若key不存在则添加,存在则不进行操作,nx表示not exists
mset, mget, msetnx // 同set和get,m表示more,一个可以添加多个键值对或获取多个值
incr/decr key // 将key对应的值进行加一减一操作,值需为整数,否则会报错
incrby/decrby key num // 将key对应的值进行加上或减去num操作,值需为整数,否则会报错
getset key val // 将key对应的值改为val,同时返回原来的值
setex key time val // ex为expire,设置键值对的时候同时指定有效时间
flushdb // redis有16个库,默认使用0号库(通常也只使用0号库),该命令表示清空当前库
flushall // 清空所有的库
命令看起来还是挺多的,但大多时候我们都可以顾名思义,记得有哪个功能,等用的时候再去查找,多用几遍也都可以记住了。
我们来动手试一遍
首先运行
redis-server &
redis-cli
进入连接redis服务的客户端。
list类型的操作
list形如Java中的Arraylist,元素可重复,有序,通过range索引值。但查看源码可知redis中的list底层是个双向链表。
lpush/rpush key val1 val2 // 在链表左边/右边插入元素
lpop/rpop key // 在链表左边/右边弹出一个元素
rpoplpush key1 key2 // key1右边弹出一个元素插入key2左边
lrange key start end // 索引范围的值, start和end都包含
lindex key index // 获取给定索引的值
llen key // 获取列表长度
linsert key before/after val newval // 在val之前/后插入一个新的元素
lrem key n val // 删除n个值为val的元素
在这里我们可以发现,除了前面几个l和r对应表示left和right,其他命令前都要加上l表示对list进行操作。redis就是这样,包括后面的set操作加s,hash操作加h,除了最基本的String类型。
对set集合进行操作
redis中的set也形似Java中的set,元素不可重复,无序。底层是value为空的hash表。因此是无序的,因此不能根据索引获取元素。
sadd key val1 vla2 // 为set集合添加元素
smembers key // 获取set的所有元素
sismember key val // 返回是否存在val元素
scard key // set集合元素个数
srem key val // 删除元素
spop key // 随机删除一个元素
srandmember key n // 随机取n个元素(不删除)
sinter key1 key2 // 获得两个set集合的交集
sunion key1 key2 // 获得两个set集合的并集
sdiff key1 key2 // key1-key2的结果集(key1-key2和key2-key1结果不一样)
对hash集合进行操作
hash也类似于Java中的HashMap<String, String>,是一个String类型的键值对,键不能重复。为了区分,在这里我们将hash的键称为field,值为val。
hmset/hset key field val // 添加值
hexists key field // 判断hash表是否存在键为filed的键值对
hkeys key // 获取hash表的所有field
hvals key // 获取hash表的所有值
hincrby key field num // 对为整数的值进行加操作
hsetnx key field val // 不存在field时添加
hgetall key // 获取hash表所有的键值对
对zset集合进行操作
zset 元素唯一不可重复,每个元素都关联了一个score,元素按score值进行排序,因此更类似于hash和list,可以通过索引定位元素。
zadd key score val // 为zset添加元素,指定分数
zrange key start end // 通过索引定位元素
zrangebyscore key min max // 通过分数排序显示符合分数范围的元素
zrank key val // 返回元素的排名
zcount key min max // 统计分数在min和max之间的元素个数
zincrby key score val // 修改元素的分数
zrem key val // 删除元素
数据类型太多,看起来有点混乱?其实大多时候我们都能根据名字获悉命令的功能,如hmset 可知是hash表添加多个(more)元素。把命令自己试一遍也可以理解地更深刻!