redis的数据类型及使用详解

数据库 投稿 85700 0 评论

redis的数据类型及使用详解

redis数据类型有五种:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)。

  1. string(字符串)是redis最常用的类型,可以包含任何数据,一个key对应一个value,在Rediss中是二进制安全的。

  2. hash(哈希)是一个string 类型的field和value的映射表,适合被用于存储对象。

  3. list(列表)是一个链表结构,按照插入顺序排序。

  4. set(集合)是 string 类型的无序集合。

  5. zset(有序集合)是string类型元素的集合,zset是插入有序的,即自动排序。

redis数据类型 String

#追加字符串,没有的话就新建
append name “wangqin”
#字符串长度
strlen name
#i++
set count 0
incr count
#i–
decr count
#指定增量 count = count + 10
incrby count 10
#指定减量 count = count - 10
decrby count 10
#截取字符串 wangqin
getrange key 0 3
“wang”
#替换
setrange key 1 qq
“wqqgqin”
#设置过期时间
setex key 30 “hello”
#不存在再设置,往往在分布式中使用,如果key1不存在就创建,存在就创建失败
setnx key1 “redis”
#批量设置
mset k1 v1 k2 v2 k3 v3
#批量获取
mget k1 k2
#要么一起成功,要么一起失败,保持原子性
msetnx k1 v1 k2 v2
#先获取在写入,不存在值为nil,存在的话获取原来的值在设置新的值
getset

redis数据类型 List

#将一个值或者多个值插入list的头部
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
#查看list,头->尾
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"
127.0.0.1:6379> rpush list right
(integer) 4
#将一个值或者多个值插入list的尾部
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
#移除list第一个元素
127.0.0.1:6379> lpop list
"three"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
#移除list最后一个元素
127.0.0.1:6379> rpop list
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
#根据下标获取值
127.0.0.1:6379> lindex list 0
#获取list长度
127.0.0.1:6379> llen list
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "two"
4) "one"
#从上至下删除一个 two
127.0.0.1:6379> lrem list 1 two
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379>

redis数据类型 Set

#添加Set元素
127.0.0.1:6379> sadd myset v1 v2 v3 v4
(integer) 4
#显示所有myset集合中的元素
127.0.0.1:6379> smembers myset
1) "v1"
2) "v3"
3) "v4"
4) "v2"
#查询v1是否存在myset集合中,存在就返回1,不存在就返回0
127.0.0.1:6379> sismember myset v1
(integer) 1
127.0.0.1:6379> sismember myset v6
(integer) 0
127.0.0.1:6379> sadd uset k1 k2 k3 v1
(integer) 4
#合并集合myset和uset到集合set中,set重复的取一个就行
127.0.0.1:6379> sunionstore set myset uset
(integer) 7
#合并显示集合myset和uset
127.0.0.1:6379> sunion myset uset
1) "v1"
2) "v3"
3) "k1"
4) "k3"
5) "v4"
6) "k2"
7) "v2"
#set集合的长度
127.0.0.1:6379> scard set
(integer) 6
#随机删除set中的元素
127.0.0.1:6379> spop set
"v4"
#移动指定的一个值到其他的集合中set->myset
127.0.0.1:6379> smove set myset k1
#两个集合的差集
127.0.0.1:6379> smembers set
1) "v3"
2) "k3"
3) "k2"
4) "v2"
127.0.0.1:6379> smembers myset
1) "v1"
2) "v3"
3) "v4"
4) "v2"
5) "k1"
127.0.0.1:6379> sdiff myset set
1) "v1"
2) "k1"
3) "v4"
#两个集合的交集
127.0.0.1:6379> sinter myset set
1) "v3"
2) "v2"
#两个集合的并集
127.0.0.1:6379> sunion myset set
1) "v1"
2) "v3"
3) "k1"
4) "k3"
5) "v4"
6) "k2"
7) "v2"

redis数据类型 Hash(哈希)

#set一个具体的 key-value
127.0.0.1:6379> hset myhash name wangqin
(integer) 1
#获取一个字段值
127.0.0.1:6379> hget myhash name
"wangqin"
#set一组 key-value
127.0.0.1:6379> hmset myhash name wangqin1 age 18
OK
#获取一组 key-value
127.0.0.1:6379> hmget myhash name age
1) "wangqin1"
2) "18"
#获取全部数据
127.0.0.1:6379> hgetall myhash
1) "name"
2) "wangqin1"
3) "age"
4) "18"
#删除指定的key
127.0.0.1:6379> hdel myhash name
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "age"
2) "18"
127.0.0.1:6379> hmset myhash name wangqin set male
OK
#获取hash表的字段数量
127.0.0.1:6379> hlen myhash
(integer) 3
#hash表中是否存在key
127.0.0.1:6379> hexists myhash name
(integer) 1
127.0.0.1:6379> hexists myhash name1
(integer) 0
#获取hash表的key
127.0.0.1:6379> hkeys myhash
1) "age"
2) "name"
3) "set"
#获取hash表的值
127.0.0.1:6379> hvals myhash
1) "18"
2) "wangqin"
3) "male"

redis数据类型 Zset(有序集合)

#添加zset元素
127.0.0.1:6379> zadd zset 1 one
(integer) 1
#批量添加zset元素
127.0.0.1:6379> zadd zset 2 two 3 three
(integer) 2
#获取zset中所有元素
127.0.0.1:6379> zrange zset 0 -1
1) "one"
2) "two"
3) "three"
#倒序查询
127.0.0.1:6379> zrevrange zset 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zadd zset -1 -one
(integer) 1
127.0.0.1:6379> zadd zset -2 -two
(integer) 1
#正序排序,从-∞到+∞
127.0.0.1:6379> zrangebyscore zset -inf +inf
1) "-two"
2) "-one"
3) "one"
4) "two"
5) "three"
127.0.0.1:6379> zrangebyscore zset -1 +inf
1) "-one"
2) "one"
3) "two"
4) "three"
#倒序排序,从+∞到-∞
127.0.0.1:6379> zrevrangebyscore zset +inf -1
1) "three"
2) "two"
3) "one"
4) "-one"
127.0.0.1:6379> zrem zset one
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
1) "-two"
2) "-one"
3) "two"
4) "three"
#集合的长度
127.0.0.1:6379> zcard zset
(integer) 4

geospatital(地理位置)

#添加地理位置
127.0.0.1:6379> geoadd China:city 116.42 29.90 home
(integer) 1
127.0.0.1:6379> geoadd China:city 117.30 31.79 hefei
(integer) 1
127.0.0.1:6379> geoadd China:city 120.21  30.20 hangzhou
(integer) 1
127.0.0.1:6379> geoadd China:city 121.48 31.40 shenzhen
(integer) 1
127.0.0.1:6379> geoadd China:city 106.54 29.40 chongqing
(integer) 1
#获取纬度和经度
127.0.0.1:6379> geopos China:city home
1) 1) "116.41999751329421997"
 2) "29.90000043079877656"
#获取两地距离
127.0.0.1:6379> geodist China:city home hefei
"226388.9875"
127.0.0.1:6379> geodist China:city home hefei km
"226.3890"
# 距离115 30范围300km的地方
127.0.0.1:6379> georadius China:city 115 30 300 km
1) "home"
2) "hefei"

Hyperloglog

如果可以允许容错的话可以使用Hyperloglog,0.81%的容错率
#创建元素
127.0.0.1:6379> pfadd mykey a b c d e f g
(integer) 1
#统计mykey元素的基数数量
127.0.0.1:6379> pfcount mykey
(integer) 7
127.0.0.1:6379> pfadd ukey q w e r t y u i o p
(integer) 1
#合并两组 mkey ukey->key,会去重
127.0.0.1:6379> pfmerge key mykey ukey
OK
127.0.0.1:6379> pfcount key
(integer) 15

Bitmap(位储存)

位图,只有两种状态的,操作二进制来进行记录,只有0 1两个状态
#添加元素
127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 1
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 0
(integer) 0
#查询元素
127.0.0.1:6379> getbit sign 3
(integer) 0
127.0.0.1:6379> getbit sign 1
(integer) 1
#统计次数
127.0.0.1:6379> bitcount sign
(integer) 3

编程笔记 » redis的数据类型及使用详解

赞同 (102) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽