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服务的客户端。

redis的五种数据类型和编码方式 redis的五种数据类型操作_hash表


redis的五种数据类型和编码方式 redis的五种数据类型操作_redis的五种数据类型和编码方式_02

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类型。

redis的五种数据类型和编码方式 redis的五种数据类型操作_hash表_03

对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结果不一样)

redis的五种数据类型和编码方式 redis的五种数据类型操作_redis_04


redis的五种数据类型和编码方式 redis的五种数据类型操作_hash表_05

对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表所有的键值对

redis的五种数据类型和编码方式 redis的五种数据类型操作_键值对_06

对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							// 删除元素

redis的五种数据类型和编码方式 redis的五种数据类型操作_redis的五种数据类型和编码方式_07

数据类型太多,看起来有点混乱?其实大多时候我们都能根据名字获悉命令的功能,如hmset 可知是hash表添加多个(more)元素。把命令自己试一遍也可以理解地更深刻!