redis学习笔记(二)之数据类型

redis 一共分为五中基本数据类型:String、Hash、List、Set、Zset,本文只对这五中类型进行基本介绍,罗列一些常用的命令。

一、字符串类型(String)

字符串类型是redis中最基本的类型,也是使用最频繁的类型,它能够存储任何字符串,包括二进制数据,一个字符串类型键允许存储数据的最大容量是512MB,在3.0版本以后会放宽这方面的限制,但是redis作为一个内存级别的数据库,512已经是一个比较富裕的上限了。

常用命令

1)set hello world  

设置一个键为 hello,值为world的存储,设置成功返回OK,多次设置则会覆盖

2)get hello

读取键为hello的值,若获取不到则返回(nil)

3)del hello

删除hello这个键值对

4)setnx hello world

这里的nx=not exist,如果hello键不存在,创建并复制为world,返回1;如果存在,则不会覆盖,返回0

5)s1etex hello 10 world

这里的ex=expired,设置hello的值为world,并且有效期为10秒,如果hello键存在,则覆盖原有的,不存在则创建。

10秒内键值对存在有效,10秒后则自动消失,此时如果get hello,返回结果是nil。

6)setrange hello 1 O

此命令表示:setrange key offset value,即将key为hello的字符串的第1位换成O,注意从0开始计数

如:set hello world;执行如上命令后,get hello -> wOrld。

7)批量设置命令

mset key1 1key2 2key3 3;批量设置值;

对应的mget key1 key2 key3,批量获取值,也有msetnx和mget方法;

8)getset k1 v1

表示先取值,后复制,即返回结果为原来的k1值,然后将k1的值换为v1,过程如下

127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> getset k1 111
(nil)
127.0.0.1:6379> get k1
"111"

9)其他命令

incr和decr方法:对某一个值进行递增和递减

(注:包括incr在内的所有redis命令都是原子操作,无论多少个客户端同时连接,都不会出现累加丢失的情况)

incrby和decrby方法:对某个值进行指定长度的递增和递减

append [key]方法:字符串追加方法

strlen [key]方法:获取字符串的长度

二、散列(Hash)

Hash类型是String类型的field和value的映射表,存储了字段和字段值的映射,类似于map结构,但字段值只能是字符串。它的特别适合存储对象,相比较而言,将一个对象类型存储在Hash类型里要比存储在String类型里占用更少的内存空间,并方便存取整个对象。它的命令和String命令基础相似,只是前面多加 一个h

常用命令

1)hset user age 12

 hset是hash集合,user是集合名字 age是字段名 12为其值

hset user name Tom

同一集合可以有多个字段,

2)hget user age -> 12 

获取集合中某个字段的值

3)hmset可以进行批量存储多个键值对:hmset user sex man addr beijing,也可使用hmget进行批量获取多个键值对。

4)其余命令

同样也有hsetnx,和setnx大同小异。

hincrby和 hdecrby 集合递增和递减

hexists 是否存在key 如果存在返回 不存在返回0

hlen 返回hash集合里的所有的键数值

hdel 删除指定hash的field

hkeys 返回hash里所有的字段

hvals 返回hash的所有value

hgetall 返回hash里所有的key和value

三、列表类型(List)

List类型是一个链表结构的集合,常用的操作是向列表两端添加元素,或者获得列表的某一片段,列表内部是使用双向链表实现,所以向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度就越快。借助这个类型,redis还可以充当队列使用。
注:list中元素可重复

常用命令

1)lpush

从头部加入元素(栈) 先进后出

lpush list1 "hello"

lpush  list1 "world"

2)rpush

从尾部加入元素(队列) 先进先出

rpush list2 "1"

rpush list2 "2"

3)linsert

插入元素

linsert list3 before [集合的元素] [插入的元素]

4)取值

lrange list1 0 -1 (表示从头取到末尾)

127.0.0.1:6379> lpush list3 "one" "two"
(integer) 2
127.0.0.1:6379> lrange list3 0 -1
1) "two"
2) "one"
127.0.0.1:6379> linsert list3 before "one" "three"
(integer) 3
127.0.0.1:6379> lrange list3 0 -1
1) "two"
2) "three"
3) "one"

 

5)替换元素——lset

lset list1 0 "A" , 把第0个元素替换为A

6)删除元素

lrem list3 1 “two” ,删除一个two元素

ltrim方法: 保留指定key的值范围内的数据

lpop方法:从list的头部删除元素,并返回删除元素

rpop方法:从list的尾部删除元素,并返回删除元素

7)其他命令

rpoplpush方法: 第一步从尾部删除元素,然后第二步并从头部加入元素

lindex方法: 返回名称为key的list中 index位置的元素

llen方法:返回元素的个数

四、集合类型(Set)

set中的每个元素都不同且无序,集合和列表类型有相似之处,但是也很容易区分:

存储内容

集合类型(Set)

列表类型(List)

有序性

唯一性

 

集合类型常用操作是像集合中加入或删除元素、判断元素是否存在等,内部使用值为空的散列表实现,所以这些操作的复杂度都为O(1),多个集合类型的键之间还可以进行并集、交集、差集的运算。

常用命令

1)添加、查看元素

sadd ,smembers

127.0.0.1:6379> sadd set1 aaa
(integer) 1
127.0.0.1:6379> smembers set1
1) "aaa"

2)删除元素

srem 删除方法:srem set1 aaa  //删除aaa元素

spop随机删除方法:spop set1 //随机删除某个元素,返回删除的key

3)集合之间的比较操作

sdiff方法: 返回俩个集合的不同元素(哪个集合在前面就以哪个集合为标准)

sdiffstore方法: 将返回的不同元素存储到另外一个集合里

127.0.0.1:6379> smembers set1
1) "bbb"
2) "aaa"
3) "ddd"
4) "ccc"
5) "eee"
127.0.0.1:6379> smembers set2
1) "eee"
2) "aaa"
3) "ff"
4) "ccc"
127.0.0.1:6379> sdiffstore set3 set1 set2
(integer) 2
127.0.0.1:6379> smembers set3
1) "bbb"
2) "ddd"

sinter方法:返回集合的交集

sinterstroe方法: 返回交集结果,存入set3中

sunion方法: 取并集

sunionstore方法:取得并集,存入set3中

smove方法: 从一个set集合移动到另一个set集合里  

smove set1 set2 aaa  //将set1中的元素aaa移动到set2中(相当于剪切复制)

scard方法: 查看集合里元素个数

sismember方法: 判断某元素是否为集合中的元素  返回1代表是集合中的元素,0代表不是

srandmember方法: 随机返回一个元素

五、有序集合类型(Zset)

它与集合类型区别在于“有序”二字,有序集合在某些方面与列表类型也比较类似:
1)二者都是有序的;
2)二者都可以获得某一范围内的元素;
当然也有明显的区别:
1)List通过链表实现,获取两端数据极快,而取中间的数据较慢;
2)Zset是使用散列表和跳跃表实现,即使位于中间的数据读取也很快,复杂度为: O(log(N));
3)List不能简单的调整元素的位置,但是Zset可以;
4)Zset比List更耗费内存。

常用命令:

1)添加方法——zadd

zadd zset1 1 one

 向有序集合中添加一个元素,该元素如果存在,则更新顺序,在重复插入的时候 会根据顺序属性更新,其中的“1”为插入时指定的下标。

2)删除方法

zrem 删除名称为key的zset中的元素member

zremrangebyrank 删除 1到1(只删除索引1)

zremrangebyscore 删除指定序号

3)zincrby 以指定值去自动递增或者减少,用法和之前的incrby类似

4)zrangebyscore  找到指定区间范围的数据进行返回

5)排序索引

zrank 返回排序索引 从小到大排序(升序排序之后再找索引) 注意 一个是顺序号 一个是索引 zrank返回的是索引

zrevrank 返回排序索引 从大到小排序(降序排序之后再找索引)

6)zcard 返回集合里所有元素的个数

7)zcount  返回集合中score在给定区间中的数量

8)zremrangebyrank zset [from] [to](删除索引)

9)zremrangebyscore zset [from] [to] (删除指定序号)

 

转载于:https://my.oschina.net/BensonYu/blog/734695

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值