Redis是一个key-value的nosql数据库,key我们一般认为就是字符串类型,但是value,也就是我们常说的redis数据类型有五种,字符串,
哈西表,列表,集合和有序集合。每一种数据类型的操作都不一样。nosql是not only sql 的意思,和传统关系型数据库还是有区别的,他
的数据直接存放在内存中,所以读写块,适合做缓存,我们没有类sql的语法来操作redis。redis有16个库来保存数据,从0-15,我们不使
用select命令来选择库,那么redis会默认将我们的数据都存放在第0个库中。
redis对所有数据类型的操作,不用事先声明数据类型,都是操作时直接根据操作结果判断数据类型。
下面介绍每种数据类型以及对应的操作:
1)字符串string
字符串类型,是我们是最常用的一种数据类型,操作很直观,get,set,getset,mget,mset
get:命令用于获取指定key的值,如果key不存在,则返回nil,如果返回值不是字符串,则返回错误。
mget:用于获取多个key的键值。
getset:设置key的新值,返回旧的值
strlen:返回key的值的字符串长度
2)哈西表hashes
哈西表存储的数据比字符串要丰富的多,他存储的数据类似一个json对象{name:'feiy',age:30,mobile:'15011186402'},这个json
对象的字段可以随便定义。字段个数和字段类型没有限制。
hset:设置单个属性值,eg : hset stu:1 name feiy hmset:一次设置多个属性值,eg: hmset stu1:name feiy age 29 mobile 15011186301 hgetall:返回hash表所有属性值,eg: hgetall stu:1 hget:返回hash表一个属性值,eg:hget stu:1 name
哈西表操作补充:
hsetnx myhash key value :设置一个值,如果不存在则创建,否则设置失败 hmset table key1 value1 key2 value2 :一次设置多个哈希值 hmget table key1 key2 key3 :一次获取多个值 hexists table key1 :判断哈希值是否存在 hlen table :返回哈希所有字段的数量 hdel table key :删除哈希表中的一个字段 hkeys table :返回哈希表中所有字段 hvals table :返回此哈希表中的所有值
3)列表lists
列表是多个元素组成的,redis对列表的操作可以让list成为一个队列,即元素先进先出FIFO,也可以成为一个栈,元素后进先出LIFO。因
为元素有多个,所以存在一个长度的问题,可以通过llen来获取list中元素的长度。list基本操作就是push加入元素,pop取出元素,在redis
中,对于list衍生出lpush,rpush,lpop,rpop等操作,获取list,通过命令lrange然后指定初始位置和结束位置,如果指定结束位置为-1,表示
列表的最后一个元素的位置,可以理解为获取整个列表元素。
lpush:从列表的头部加入元素,这样,构成的类似栈,先进后出FILO。
rpush:从列表的尾部加入元素,这样,构成的类似队列,先进先出FIFO。
4)集合set(也叫无序集合)
集合的特点是集合元素具有唯一性。
sadd:向集合中添加元素
smembers:查看集合中的元素
集合相关操作补充:
srem:删除集合中的元素 spop:随机返回并删除集合中名为key的元素 sdiff:返回两个集合的差集,eg:sdiff myset myset2 以myset为基准 sinter:求交集 sinterstore:求交集并返回 sunion:求并集 sunionstore:求并集并返回 smove myset myset2 three :将第一个元素里面的元素移动到第二个集合里面 scard myset:返回集合元素个数 sismember myset one:判断一个元素是否为集合的元素
5)有序集合sorted set
有序集合是在集合基础上,增加一个key保存数据用来排序
zadd:向集合中添加元素
zrange setname 0 -1 [withscores]:返回集合中所有的元素并且带上排序
有序集合操作补充:
zrem setname key:删除有序集合中的元素 zincrby setname stepby key:改变集合中元素排序 zrank setname key:返回集合中元素的下标,从0开始 zrevrank setname key:返回集合中元素的下标,从最大开始,从大到小
以上介绍了redis五种数据结构。他们各自有各自的特点,相关操作也不一样。
另外还有一些命令,是对这些数据结构通用的,下面一一做介绍。
keys:这个命令在redis中,应该是最常用的,用来查看redis中有哪些key。以方便我们查找具体的键值,他返回所有满足pattern条件的键,支持模糊匹配。 type:查看类型,可以方便我们在获取某个键值时使用何种命令,避免无的放矢。 exists:确认一个key是否存在。 expire:设置key过期时间,eg: expire age 10 设置age10秒之后过期。 ttl:返回键的过期时间,常常和expire配合使用 del:删除一个key move:移动key到别的库0-15一共16个数据库 select:0-15选择数据库,默认是0数据库 persist:移除过期时间,eg:ttl age 返回-1,表示过期时间取消了 rename:重命名,eg:rename set2 set200
最后还有一些操作是和整个redis数据库相关的:
dbsize:统计总共有多少个key flushdb:删除当前选中的数据库中所有的key,在测试的时候我们经常会这么操作。 flushall:删除所有数据库中的所有key exit,quit:退出redis命令行