Redis数据类型(四)

1.Redis的五大数据类型

1.1 String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

常规key-value缓存应用; 
常规计数:微博数,粉丝数等

 

1.2 Hash(哈希)
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

hash特别适合用于存储对象。 
存储部分变更的数据,如用户信息等。

类似Java里面的Map<String,Object>

 

1.3  List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
它的底层实际是个链表

应用:消息队列系统 ,使用list可以构建队列系统,使用sorted set甚至可以构建有优先级的队列系统。

 

1.4 Set(集合)
Redis的Set是string类型的无序集合。它是通过HashTable实现实现的,

 

1.5 Zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

应用:排行榜

 

2.redis常见数据类型操作命令

哪里去获得redis常见数据类型操作命令--http://redisdoc.com/

 

2.1Redis 键(key)

 

1. keys *  查出所有的key

 

 

 

2.  exists key的名字,判断某个key是否存在

 

3. move key db   --->当前库就没有了,被移除了

 

4. expire key 秒钟:为给定的key设置过期时间

 

5. ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期

 

6. type key 查看你的key是什么类型

 

7.flushdb  --清除一个数据库的数据

  flushall ---清除redis 所有数据库的数据

  select  数字(0-16)选择数据库

 

 

 

2.2  Redis字符串(String)

单值单value

1. set/get/del/append/

 

append 拼接字符串

 

命令用于获取存储在key字符串值的长度。当key持有非字符串值则返回一个错误。

 

 

2. Incr/decr/incrby/decrby,一定要是数字才能进行加减

 

INCR   命令用于由一个递增key的整数值。如果该key不存在,它被设置为0执行操作之前。如果key包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误。该操作被限制为64位带符号整数。

 

 decr--递减

DECRBY命令用于减小存储在由指定的值的key的数量。如果该键不存在时,它被设置为0在执行操作之前。如果键包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误。

 

 

incrby---递增指定的值的key的数量

 

3. getrange/setrange

getrange:获取指定区间范围内的值,类似between......and的关系
从零到负一表示全部
setrange设置指定区间范围内的值,格式是setrange key值 具体值

 

4. setex(set with expire)键秒值/setnx(set if not exist)

setex:设置带过期时间的key,动态设置。
setex 键 秒值 真实值
setnx:只有在 key 不存在时设置 key 的值。

5. mset/mget/msetnx

mset:同时设置一个或多个 key-value 对。
mget:获取所有(一个或多个)给定 key 的值。
msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

6. getset(先get再set)

getset:将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
简单一句话,先get然后立即set


 

2.3 Redis列表(List)

单值多value

1. lpush/rpush/lrange

2. lpop/rpop

3. lindex,按照索引下标获得元素(从上到下)

通过索引获取列表中的元素 lindex key index

4. llen

5. lrem key 删N个value

 * 从left往right删除2个值等于v1的元素,返回的值为实际删除的数量
 *  LREM list3 0 值,表示删除全部给定的值。零个就是全部值

6. ltrim key 开始index 结束index,截取指定范围的值后再赋值给key

ltrim:截取指定索引区间的元素,格式是ltrim list的key 起始索引 结束索引

7. rpoplpush 源列表 目的列表

移除列表的最后一个元素,并将该元素添加到另一个列表并返回

 

8. lset key index value

 

9. linsert key  before/after 值1 值2

在list某个已有值的前后再添加具体值


test:0>lpush job "test1


test:0>lpush job "test2"
"2"

test:0>lset job 0 "test3"
"OK"

test:0>lindex job 0
"test3"

性能总结

它是一个字符串链表,left、right都可以插入添加;
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

 

2.4Redis集合(Set)

单值多value

1. sadd/smembers/sismember

 

2. scard---获取集合里面的元素个数

 

3.srem key value----- 删除集合中元素

 

4. srandmember key 某个整数(随机出几个数)

 *   从set集合里面随机取出2个
 *   如果超过最大数量就全部取出,
 *   如果写的值是负数,比如-3 ,表示需要取出3个,但是可能会有重复值。

 

5. spop key 随机出栈

 

6. smove key1 key2 在key1里某个值      作用是将key1里的某个值赋给key2

 

7. 数学集合类

差集:sdiff----在第一个set里面而不在后面任何一个set里面的项

交集:sinter---

并集:sunion---

test:0>SADD bbs "discuz.net
"1"

test:0>SADD bbs "yuyuyuy"
"1"

test:0>SADD bbs "tianya.cn" "groups.google.com"
"2"

test:0>SMEMBERS bbs
 1)  "groups.google.com"
 2)  "tianya.cn"
 3)  "discuz.net"
 4)  "yuyuyuy"
 

2.5Redis哈希(Hash)

KV模式不变,但V是一个键值对

1.  hset/hget/hmset/hmget/hgetall/hdel

 

2. hlen

 

3. hexists key 在key里面的某个值的key

 

4. hkeys/hvals

 

5. hincrby/hincrbyfloat

 

6. hsetnx--不存在赋值,存在了无效。

 


test:0>hset web goo1 ""goo1"
"1"

test:0>hset web goo2 "goo2"
"1"

test:0>hget web go1
null

test:0>hget web goo1
""
test:0>hget web goo2
"goo2"

test:0>hkeys web
 1)  "goo"
 2)  "goo1"
 3)  "goo2"
test:0>

 

2.6Redis有序集合Zset(sorted set)

1. zadd/zrange

 

2. zrangebyscore key 开始score 结束score

 withscores

limit 作用是返回限制

 limit 开始下标步 多少步

 

3. zrem key 某score下对应的value值,作用是删除元素

删除元素,格式是zrem zset的key 项的值,项的值可以是多个
zrem key score某个对应值,可以是多个值

 

4. zcard/zcount key score区间/zrank key values值,作用是获得下标值/zscore key 对应值,获得分数

zcard :获取集合中元素个数

zcount :获取分数区间内元素个数,zcount key 开始分数区间 结束分数区间

 

5. zrevrank key values值,作用是逆序获得下标值

正序、逆序获得下标索引值

 

6. zrevrange

 

7. zrevrangebyscore  key 结束score 开始score



zrevrangebyscore zset1 90 60 withscores    分数是反着来的

 

在set基础上,加一个score值。
之前set是k1 v1 v2 v3,
现在zset是k1 score1 v1 score2 v2

 

test:0>SMEMBERS bbs
 1)  "groups.google.com"
 2)  "tianya.cn"
 3)  "discuz.net"
 4)  "yuyuyuy"
test:0>zadd g1 0 j1
"1"
test:0>zadd g1 1 j2
"1"
test:0>zadd g1 j2
"ERR wrong number of arguments for 'zadd' command"
test:0>zadd g1 2 j3
"1"
test:0>zadd g1 0 j1
"0"
test:0>ZRANGE g1 0 -1              # 显示整个有序集成员             
 1)  "j1"
 2)  "j2"
 3)  "j3"
test:0>ZRANGE g1 0 1
 1)  "j1"
 2)  "j2"
test:0>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值