Redis支持5种数据类型:String,Hash,List,Set,ZSet,这些类型是指value的类型(key--value)
1.String类型(key-value)
Redis中的字符串是一个字节序列,并且是二进制安全的,比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串,数值等等~字符串值的最大长度为512MB
set和get方法:
设置值:set key value 取值:get key(说明 设置key多次会覆盖) 删除值:del key
使用setnx(not exist)
key如果不存在就进行设置,如果存在就不进行设置了,返回0
127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> setnx name lisi (integer) 0 127.0.0.1:6379>
使用setex(expired)
setex color 10 red设置color的有效期为10秒,10秒后返回nil(在Redis中nil表示空)
使用setrange替换字符串:
set email 1048158229@qq.com
setrange email 10 ww (10表示从第几位开始替换,后面跟上替换的字符串,从0开始)
127.0.0.1:6379> set email 1048158229@qq.com OK 127.0.0.1:6379> setrange email 10 ww (integer) 17 127.0.0.1:6379> get email "1048158229wwq.com" 127.0.0.1:6379>
使用一次性设置多个和获取多个值得mset,mget方法
mset key1 value1 key2 value2 key3 value3
对应的mget key1 key2 key3
127.0.0.1:6379> mset name zhangsan age 20 sex 0 OK 127.0.0.1:6379> mget name age sex 1) "zhangsan" 2) "20" 3) "0" 127.0.0.1:6379>
一次性设置和取值的getset
127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> getset name lisi "zhangsan" 127.0.0.1:6379>
返回旧值并设置新值
incr和decr方法:对某一个值进行递增和递减(incr/decr key)
incrby和decrby方法:对某个值进行指定长度的递增和递减(incrby/decrby key 步长)
append[name]方法:字符串追加方法(append key 'str')
strlen[name]方法:获取字符串的长度(strlen key)
2.Hash类型(key--(key,value),(key,value)就是hash)
Hash类型是是字符串字段和字符串值之间的映射,或者说一个String集合。它特别适合存储对象,相比较而言,将一个对象类型存储在Hash类型里要比存储在String类型里占用更少的内存空间,并方便存取整个对象。
形如:hset myhash key value(含义是hset是hash集合,myhash是集合名字,key是字段名,value是其值),使用hget myhash key获取内容,也可以存储多个值。
hmset可以进行批量存储多个键值对,hmset myhash key1 value1 key2 value2,也可以使用hmget进行批量获取多个键值对。
同样也有hsetnx,和setnx大同小异。
hincrby和hdecrby集合递增和递减
hexists是否存在key,如果存在就返回,不存在就返回0
hlen返回hash集合里的所有的键数值
hdel删除指定hash的key
hkeys返回hash里的所有字段
hvals返回hash里的所有value
hgetall返回hash里所有的key和value
3.List类型(key--(str1,str2...))
List类型是一个字符串列表的集合,其主要功能是push,pop,获取元素等。更详细的说,List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或尾部添加删除元素,list的设计非常简单精巧,既可以作为栈,又可以作为队列,满足绝大多数需求。
lpush方法:从头部加入元素(栈),先进后出
形如:
127.0.0.1:6379> lpush list1 'hello' (integer) 1 127.0.0.1:6379> lpush list1 'world' (integer) 2 127.0.0.1:6379> lpush list1 'welcome' (integer) 3 127.0.0.1:6379> lrange list1 0 -1 1) "welcome" 2) "world" 3) "hello" 127.0.0.1:6379>
(0 -1表示从头取到末尾)
rpush方法:从尾部加入元素(队列),先进先出
形如:
127.0.0.1:6379> rpush list2 'hello' (integer) 1 127.0.0.1:6379> rpush list2 'world' (integer) 2 127.0.0.1:6379> rpush list2 'welcome' (integer) 3 127.0.0.1:6379> lrange list2 0 -1 1) "hello" 2) "world" 3) "welcome" 127.0.0.1:6379>
lpop方法:从list的头部删除元素,并返回删除元素
rpop方法:从list的尾部删除元素,并返回删除元素
127.0.0.1:6379> lpop list2 "hello" 127.0.0.1:6379> rpop list2 "welcome" 127.0.0.1:6379>
Redis中的队列可以充当MQ
4.Set类型和ZSet类型(key--set)
set集合是String类型的无序集合,set是通过hashtable实现的,对集合我们可以取交集,并集,差集等
sadd方法:向名称为key的set中添加元素
小结:set集合不允许重复元素,smembers查看set集合的元素
srem方法:删除set集合中的元素
spop方法:随机返回删除的key
sdiff方法:返回两个集合的不同元素,哪个集合在前面就以哪个集合为标准
sdiffstore方法:将返回的不同元素存储到另一个集合里
小结:这里是吧set1和set2的不同元素存储到set3集合里
127.0.0.1:6379> sadd set1 aaa (integer) 1 127.0.0.1:6379> sadd set1 bbb (integer) 1 127.0.0.1:6379> sadd set1 ccc (integer) 1 127.0.0.1:6379> smembers set1 1) "ccc" 2) "bbb" 3) "aaa" 127.0.0.1:6379> sadd set1 bbb (integer) 0 127.0.0.1:6379> smembers set1 1) "ccc" 2) "bbb" 3) "aaa" 127.0.0.1:6379>
返回满足的所有键keys *(可以模糊匹配)
127.0.0.1:6379> keys * 1) "list2" 2) "list1" 3) "set1" 127.0.0.1:6379> keys list* 1) "list2" 2) "list1"
exists 是否存在指定的key
expire 设置某个key的过期时间,使用ttl查看剩余时间
127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> get name "zhangsan" 127.0.0.1:6379> expire name 10 (integer) 1 127.0.0.1:6379> get name "zhangsan" 127.0.0.1:6379> ttl name (integer) 2 127.0.0.1:6379> ttl name (integer) -2 127.0.0.1:6379> get name (nil)
persist取消过期时间(persist key)
select选择数据库 数据库为0到15(一共16个数据库) 默认进入的是0数据库(select 0|1|2)
move [key][数据库下标] 将当前数据中的key转移到其他数据库中(move name 1)
randomkey 随机返回数据库中的一个key
rename 重命名key(rename key key1)
dbsize查看数据库的key的数量
info 获取数据库信息
config get实时传储收到的请求,返回相关的配置信息
config get * 返回所有配置
flushdb 清空当前数据库,flushall清空所有数据库
Redis可排序集合(zset)类似于Redis集合,是不重复的字符集合。 不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复。
127.0.0.1:6379> zadd database 0 redis (integer) 1 127.0.0.1:6379> zadd database 0 mongodb (integer) 1 127.0.0.1:6379> zadd database 1 sqlite (integer) 1 127.0.0.1:6379> zadd database 1 sqlite (integer) 0 127.0.0.1:6379> ZRANGEBYSCORE database 0 1000 1) "mongodb" 2) "redis" 3) "sqlite"
因为'sqlite'的排序值是1,其它两个元素的排序值是0,所以'sqlite'排在最后一个位置上。