Redis篇2-五大数据类型
redis支持string、list、set、zset和hash五大数据类型,但是他们的操作语法不一致..以下粗略过一遍。
String类型(字符串)
简单说明
- 最基本的数据类型,和Memcached一样
- 单值单value,类比Java的Map<String, String>。
- 二进制安全的,redis的string可以包含任意字符串数据,比如jpg图片内容和序列化的对象都可以。
- 理论上,redis的string的value可以很大,最多512M。
常用操作
set key value
定义/覆盖一个字符串键值get key
获取键的字符串值del key
删除键值appen key value
值appendstrlen key
值的长度exists key
判断某个key是否存在move key n
将当前库的key迁移到n号数据库expire key n
给key设置过期时间为n秒
过期之后get key
和keys *
就看不到了,相当于删掉了ttl kyc
查看目标key还有多久过期
-1代表永不过期(默认),-2代表已过期type key
查看键的类型,比如stringincr key
对值进行+1,只对数字型的值有效decr key
对值进行-1,只对数字型的值有效incrby key n
对值进行+n,只对数字型的值有效decrby key n
对值进行-n,只对数字型的值有效getrange key 0 3
获取指定区间的值(前4个字符),即substr,getrange key 0 -1
表示获取全部setrange key ..
设置指定区间的值setex key n value
定义一个键值且同时设置好过期时间(n为秒值)setnx key value
如果键不存在才创建,即set if not exist,避免覆盖- mset/mget/msetnx 同时定义/获取多个键值
mset k1 v1 k2 v2 k3 v3 mget k1 k2 k3 msetnx k3 v3 k4 v4 #注:k3已存在,本次失败,k4也不会创建
- ...
List类型(列表)
简单说明
- 单值多value,类比Java的Map<string, List>
- 是一个字符串链表,左右两边都可以操作
- 如果键不存在,新建链表,存在则追加元素
- 如果值的多个value全部被移除,对应的键自动移除
常用操作
- lpush/rpush/lrange 定义和获取一个list键值
lpush l1 v4 v3 v2 v1 #从左push rpush l1 v5 v6 v7 v8 #从右push lrange l1 0 -1 #获取l1值 lrange l1 0 4 #范围获取l1值
- lpop/rpop key 从从左/右边出栈(pull掉并返回)
llen key
列表元素个数lindex key value
类比String的indexOf函数- ...
Set类型(无序去重列表)
简单说明
- 和List差别不大,单值多value,类比Java的Map<String, Set>
- 无序无重复,底层是Hashtable
常用操作
- sadd key values .. 定义Set键值
- smembers key 遍历set键值
- sismember key value 判断是否有某值
madd s1 1 2 3 2 3 smembers s1 sismember s1 1 sismember s1 x
scard key
set集合元素个数srem key value
移除某个valuespop key
随机一个出栈srandmember key n
随机n个出栈- ...
Zset类型(有序集合)
简单说明
- 即Sorted Set,和Set一样,无序无重复,类比Java的Map<String, ScoreSet>
- 会给每个元素关联一个double类型的分数score
- zset成员元素不能重复,而这个score可以重复
- 排序即通过每个成员的score值从小到大排的
- 多用于一些统计场景
常用操作
- zadd/zrange
zadd z01 60 C 70 B 80 A 90 S
zrange z01 0 -1
zrange z01 0 -1 withscores
- ...
Hash类型(散列)
简单说明
- 单值多value,类比Java中的
Map<String,<String, Object>
- 可以当作是在redis中进行Java对象的定义
常用操作
- hset/hget/hmset/hmget/hgetall/hdel 定义,获取,删除
hset user0 id 1 nane hwc1
hget user0 id
hgetall user0
hdel user0 id
hlen key
“对象的属性”个数hexists key0 key1
是否存在某个“属性”hkeys/hvals key0
遍历“对象”属性/值- ...