redis数据类型及操作

来源:互联网 发布:python 网络拓扑图 编辑:程序博客网 时间:2024/05/16 11:12

(一)、redis 的数据类型级操作:
1.【Strings 类型和操作】
String 类型:一个key对于一个value,最简单的数据类型,二进制安全的;Redis的String可以包含任何数据,可以是图片jpg或者是序列化的对象。
操作:
set: 设置key 对应的值为String类型的value。
setnx:设置key 对应的值为String类型的value;如果key已经存在,则返回0,并且不设置新的value值。;否则更新并返回1.nx的是not exist的意思。
demo:
redis 127.0.0.1:6379> setnx age 20
(integer) 1
redis 127.0.0.1:6379> get age
“20”
redis 127.0.0.1:6379> setnx age 40
(integer) 0
redis 127.0.0.1:6379> get age
“20”
setex:设置key 对应的值为String类型的value;并指定键值的有效期。
demo:设置name的值为leo 十秒内有效
redis 127.0.0.1:6379> setex name 10 leo
OK
redis 127.0.0.1:6379> get name
“leo”
redis 127.0.0.1:6379> get name
(nil)
setrange:设置指定key值的只字符串。
demo:设置leo的邮箱 从126 替换成163.com
redis 127.0.0.1:6379> set email leo@126.com
OK
redis 127.0.0.1:6379> get email
“leo@126.com”
redis 127.0.0.1:6379> setrange email 3 @163.com
(integer) 11
redis 127.0.0.1:6379> get email
leo@163.com
【注】:但是这个替换只会替换几个长度, 要是替换的长度小于原来value的长度的话,原来的后面字符会保留,要是大于的话,则会自动填充。
demo:
redis 127.0.0.1:6379> set email leo9029@126.com
OK
redis 127.0.0.1:6379> get email
“leo9029@126.com”
redis 127.0.0.1:6379> setrange email 3 nardo
(integer) 15
redis 127.0.0.1:6379> get email
“leonardo163.com”
mset:表示一次设置多个key的值,成功则返回ok 表示所有的值都设置了,失败了则返回0;表示没有任何一个值被设置。
msetnx:表示一次设置多个key的值,成功则返回ok 表示所有的值都设置了,失败了则返回0;表示没有任何一个值被设置。但是不会覆盖已经存在的值
demo:
redis 127.0.0.1:6379> mset key1 leo key2 leonardo
OK
redis 127.0.0.1:6379> get key1
“leo”
redis 127.0.0.1:6379> get key2
“leonardo”
redis 127.0.0.1:6379> msetnx key4 lll key5 xxx key2 xxx
(integer) 0
redis 127.0.0.1:6379> get key4
(nil)
redis 127.0.0.1:6379>

get:
getset: 设置一个key的新值 返回一个key的旧值.
getrange :获取value的子字符串
mget:获取多个key的值。
demo:
redis 127.0.0.1:6379> getrange email 0 6
“leonard”
redis 127.0.0.1:6379>

incr : 代表对某一个值 来做++(递增操作),并且返回新的值.
incrby:以指定的数 进行自增,并且返回新的值,
decr: 代表对某一个值 来做–(递减操作),并且返回新的值.
decrby:以指定的数 进行自减,并且返回新的值.
append:给指定key的字符串追加value,返回新字符串值的长度.
2.【Hashes数据类型及操作】
hash类型:redis的hash类型是string类型field和value的映射表,所有的新增和删除都是0(1);特别适合于存储对象。对于String类型而言,hash占用内存更少;并且更方便存储整个对象。
hset:设定hash field 为指定值,如果key 不存在,则先创建。

[注意]:可以把key user:001 看做张表,然后name、age 为表中的field。
hset:设定hash field 为指定值,如果key 不存在,则先创建。如果存在,则返回0;而且field映射的value不会被覆盖

hmset:批量设置hash field的值,如果key 不存在,则先创建。
hmget:批量查询field的值。
hincrby:对hash field的值以指定的数 进行自增,并且返回新的值。
hexists:校验hash field进行校验,字段存在返回1, 不存在返回0.
hlen:返回hash中filed的数量数。

hdel:删除hash中的field
hkeys:返回hash中的所有(field)字段
hvals:返回hash中的所有值(value)

hgetall:同时返回某个hash中的所有的field以及value

3.【list类型和操作】
redis 中list类型的每一样子元素都是string类型的双向链表,可以通过push、pop操作对链表的头部或者尾部进行添加删除元素,所以这样的类型
可以使栈,也可以是队列。【操作中key理解为链表的名字】
lpush:在key对应的list的头部添加字符串元素。
rpush:在key对应的list的尾部添加字符串元素。

【list类型和操作】
linsert: 在key对应特定的位置前或者后添加字符串元素; 【用法】:linsert list before 元素 要插入的元素
lset : (将list 中指定下标的元素 替换掉)设置list中指定下标元素的替换值。 【用法】:lset list 元素下标 要插入的新元素
demo:

lrem : 从key 对应的list中删除n个相同指定元素 【用法】:lrem list 个数 元素值
demo:

ltrim:保留指定key的值内范围的数据。【用法】: ltrim list 起始保留元素下标 结束保留元素下标
demo:

lpop :从list的头部删除元素,并返回删除元素。
rpop: 从list的尾部删除元素,并返回删除元素。 【用法】:lpop/rpop list
rpoplpush :从第一个list的尾部 移除元素 添加到第二个list的头部。 【用法】: rpoplpush list1 list2
demo:

【sets类型和操作】
set:是string类型的无序集合;set是通过hash table 进行实现的,添加、删除、修改的复杂度都是0(1);我们可以对集合区交集、并集、差集。集合中不允许重复的值
【可通过这些用来实现sns中的好友推荐(取差集)和blog的tag功能】
sadd:向key 对应的set集合添加元素。添加成功返回1 ;失败返回0。
srem:删除名称为key的set集合中的元素。删除成功返回1; 失败返回0。
spop:随机删除并返回key为set的集合中的元素。
smembers : 查看集合
demo:
Redis 127.0.0.1:6379> smembers myset
1) “alibaba”
2) “baidu”
3) “tenxun”
redis 127.0.0.1:6379> sadd myset1 youku
(integer) 1
redis 127.0.0.1:6379> sadd myset1 baidu
(integer) 1
redis 127.0.0.1:6379> sadd myset1 tudou
(integer) 1
redis 127.0.0.1:6379> srem myset tudou
(integer) 0
redis 127.0.0.1:6379> srem myset1 tudou
(integer) 1
redis 127.0.0.1:6379> smembers myset1
1) “baidu”
2) “youku”
redis 127.0.0.1:6379> spop myset1
“youku”
sdiff: 返回所有给定key 与第一个key集合的差集(就是不同元素集合),以给定的第一个key 为标准,谁在前面,返回谁和其他key 不同的集合元素
sdiffstore :将所有给定key 与第一个key集合的差集,并且将结果存储到另外一个key集合中 。 【用法】: sdiffstore 存储差集的key key1 比对的key2
demo:
redis 127.0.0.1:6379> smembers myset1
1) “tudou”
2) “baidu”
redis 127.0.0.1:6379> smembers myset
1) “alibaba”
2) “baidu”
3) “tenxun”
redis 127.0.0.1:6379> sdiff myset myset1
1) “alibaba”
2) “tenxun”
redis 127.0.0.1:6379> sdiff myset1 myset
1) “tudou”
redis 127.0.0.1:6379> sdiffstore myset2 myset1 myset
(integer) 1
redis 127.0.0.1:6379> smembers myset2
1) “tudou”
sinter:取两个key的交集 并返回交集的元素。
sinterstore:取两个key的交集 并将返回交集的元素存储到另外一个key中。 【用法】:sinterstore 存储交集的key key1 比对的key2
sunion:取给定key的并集,并返回并集元素。
sunionstore:取给定key的并集,并返回并集元素存储到另一个key中 。【用法】:类似与交集
demo:
redis 127.0.0.1:6379> sinter myset1 myset
1) “baidu”
redis 127.0.0.1:6379> sinterstore myset3 myset1 myset
(integer) 1
redis 127.0.0.1:6379> smembers myset3
1) “baidu”
redis 127.0.0.1:6379> sunion myset1 myset
1) “alibaba”
2) “baidu”
3) “tudou”
4) “tenxun”
redis 127.0.0.1:6379> sunionstore myset4 muset1 myset
(integer) 3
redis 127.0.0.1:6379> smembers myset4
1) “alibaba”
2) “baidu”
3) “tenxun”
smove:将第一个key对应set中的元素移除,并添加到第二个集合set中。 【用法】 smove 集合key1 集合key2 要移除key1的元素1
scard:返回key对应set的元素个数。
sismember: 校验key对于set中是否存在该元素。
【 sorted sets类型和操作】
sorted sets(zset)是set的一个升级版本,在set集合基础上添加一个顺序属性;这个顺序在添加修改元素时可以指定。每次指定之后,zset集合会自动按照新的值调整顺序。
可以把zset 看成两张MySQL表。一张原来存储顺序;一张来存储value元素。key可以理解为zset集合名称。
zadd:向有机集合中添加元素并且指定顺序号;如果元素已经存在,就重新指定顺序号。 【用法】:zadd zset集合 顺序号 元素。
zrem:删除有机集合中的指定元素。
demo:
redis 127.0.0.1:6379> zadd zset1 1 alibaba
(integer) 1
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> zadd zset1 2 baidu
(integer) 1
redis 127.0.0.1:6379> zadd zset1 3 baidu
(integer) 0
redis 127.0.0.1:6379> zrange zset1 0 -1 withscores
1) “alibaba”
2) “1”
3) “baidu”
4) “3”
zincrby:如果往有机集合中元素已经在集合中存在,则该元素的score(顺序)将增加increment,如果元素不存在,则添加元素,其score值为increment值。
demo:
redis 127.0.0.1:6379> zincrby zset1 4 tenxun
“4”
redis 127.0.0.1:6379> zrange zset1 0 -1 withscores
1) “alibaba”
2) “3”
3) “baidu”
4) “3”
5) “tenxun”
6) “4”
redis 127.0.0.1:6379> zincrby zset1 3 alibaba
“6”
redis 127.0.0.1:6379> zrange zset1 0 -1 withscores
1) “baidu”
2) “3”
3) “tenxun”
4) “4”
5) “alibaba”
6) “6”
zrank:按照sores从小到大排序,并且返回指定的元素的下标(下标是从零开始)
zrevrank:按照sores从大到小排序,并且返回指定的元素的下标(下标是从零开始)
zrevrange :按照score的从大到小排序,并且返回整个zset元素
zrangebyscore :返回给定区间的集合元素
zcount: 返回给定区间中元素数量
zcard:zset集合元素数量
demo:
redis 127.0.0.1:6379> zrank zset1 alibaba
(integer) 2
redis 127.0.0.1:6379> zrevrank zset alibaba
(nil)
redis 127.0.0.1:6379> zrevrank zset1 alibaba
(integer) 0
redis 127.0.0.1:6379> zrevrange zset1 0 -1 withscores
1) “alibaba”
2) “6”
3) “tenxun”
4) “4”
5) “baidu”
6) “3”

0 0
原创粉丝点击