学Redis,这些数据类型的总结不能不看!

这篇文章主要来总结一下Redis中的数据类型,String,Hash,List。

1. String类型及操作

String是最简答的类型,一个key对应一个value,String类型是二级制安全的,redis的String可以包含任何数据,比如jpg图片或者序列化的对象。

set:表示设置key对应的值为String类型的value。如:set name eson_15当然了,get是获取某个key的值 如:get name 如果再一次set name csdn 那么刚刚那个eson_15就会被csdn覆盖掉,

如果不想被覆盖,可以使用

setnx name csdn如果key已经存在则会返回0,并且设置不成功,nx是not exist的意思 如果key不存在则会返回1,并且直接设置该value

如果要指定键的有效期,可以使用

setex color 10 red设置color对应的value的值为red,并且有效期为10秒,10秒后获取则返回nil

如果要设定指定key的value值的子字符串该怎么做呢?我们可以使用setrange

set email [email protected] get email会得到[email protected] email 5 gmail.comget email会得到[email protected] 5表示从第6个字符开始替换,第一个字符从0开始的 如果替换后的字符串比原来的短,那只会原来多余的部分不动,如 setrange email 5 xx get email会得到[email protected]

如果我们想一次性设置多个值,也就是批量设置,该怎么做呢?

可以使用mset,返回OK表示全部设置成功,返回0表示没有任何值被设置了mset key1 value1 key2 value2可以分别get key1和get key2来获取

有了mset,肯定就会想到有msetnx,和上面的类似

msetnx表示批量设置,但是检测key是否存在,返回0表示没有任何值被设置了msetnx key3 vlaue3 key4 value4 可以正常设置 如果将key3改成key2则返回0,因为key2已经有了

如果我想覆盖现在的key对应的value值,并且覆盖的时候想获取原来的key对应的value值,该怎么办呢?

可以使用getset,直接返回原来的值getset key3 value执行上面这句就会返回value3。并且把value插进去了 所以get key3就会返回value

刚刚有setrange,那么肯定也有getrange,表示获取一个范围内的数据

getrange email 0 5会返回eson@x

刚刚有mset批量设置,那么肯定也有mget来批量获取

mget key1 key2 key3 key4就会返回相应的value值

如果想要对某个值递增,可以使用incr或者incrby

set num 20incr num 就会返回21 如果不想一个个增,可以使用incrby num 4 会返回25

对应的还有decr和decrby,就不赘述了。还有一个append,表示给指定key的字符串追加value,返回新字符串值的长度

append name java 会返回11 get name 会得到eson_15java,为11个字符

如果想要获取key对应value的长度,可以使用strlen

strlen name 即可返回11

2. Hash类型及操作

redis hash是一个String类型的field和value的映射表。它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象,相较于将对象的每个字段存成单个String类型,将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。

hset:设置hash field为指定值,如果key不存在,则先创建hset myhash field1 hellohget myhash field1 即可获取hello 可以把myhash看做一张表~

和上面的String类型类似,hash也有hsetnx,就不多说了

hsetnx myhash field hello

hmset表示批量设置:

hmset myhash field2 hello field3 word

当然了,hmget批量获取

hmget myhash field2 field3

同样,hincrby表示增加多少

hset myhash num 20hincrby mahash num 5 就会返回25

在hash里面还有个hexists用来测试指定field是否存在

hexists myhash num 存在即返回1,否则返回0

hlen表示hash中存了多少个数据,即键值对

hlen myhash

hdel表示删除指定hash的field字段

hdel myhash num删除myhash中的num字段

如果想要获取hash中所有的字段,可以使用hkeys

hkeys myhash

与之对应,肯定就有hvals

hvals myhash

很容易想到,除了获取key和value,也可以获取key-value,可以使用hgetall,返回所有字段和其对应的value

hgetall myhash

3. List类型及操作

List是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key理解为链表的名字。redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。下面对List的操作做一下整理。

lpush:在key对应list的头部添加字符串元素 rpush:在key对应list的尾部添加字符串元素lpush mylist "world" lpush mylist "hello"lrange mylist 0 -1 就会输出整个list:hello world

那如果想要在key对应list的特定位置前或后添加字符串呢?可以使用linsert

linsert mylist before world beautifullrange mylist 0 -1:会输出hello beautiful world

那如果想要设置list中指定位置的元素值该怎么做呢?可以使用lset

lset mylist 0 hello2lrange mylist 0 -1:会输出hello2 beautiful world

接下来看看删除,lrem表示从key对应的list中删除n个和value相同的元素(n<0表示从尾删,n=0表示全部删)

lrem mylist 1 world如果返回0代表没有删除成功,或者没有这个,或者删除的数量不对等等

如果要批量删除,只保留一部分呢,可以使用ltrim

ltrim mylist 0 6 表示只保留新添加的7条数据,其他全删了

因为list可以模拟栈,所以还有lpop,表示删除list头部的元素,并返回该元素,另外,还有rpop,表示删除list尾部的元素,rpop就不举例子了。

假如 lrange mylist 0 -1输出hello worldlpop mylist 会返回hello 再运行lrange mylist 0 -1则只有world了

还有两个命令一起使用的,比如rpoplpush,表示从第一个list的尾部弹出,并且添加到第二个list的头部

lrange mylist 0 -1 假如输出的是hello world lrange mylist2 0 -1 假如输出的是eson_15rpoplpush mylist mylist2 后 mylist中只有hello了,mylist2中有world eson_15

list中还有个lindex,返回名称为key的list中index位置的元素

lindex mylist 2

还有一个llen,返回key对应的list的长度

llen mylist

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章