@Redis中的数据类型

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'排在最后一个位置上。

原文地址:https://www.cnblogs.com/winner-0715/p/6682970.html