【Redis】五种基本类型和三种特殊类型

【Redis】五种基本类型和三种特殊类型,第1张

Redis的5个基本类型

redis中的数据都是以key/value的形式存储的,五大数据类型主要是指value的数据类型

字符串string
#设置值
set stu wang

#获取值
get sty

#判断key是否存在
exists stu

#追加字符串,如果key不存在,相当于set命令,返回值为追加之后的strlen
append stu jiaxin

#获取字符串的长度
strlen key1

#对指定key的value自增1/自减1,value要为整数值
incr key
decr key

#设置增长/减少的步长
incr key 2
decr key 3

#获取给定范围的字符串,要获取全部传0到-1
getrange key1 0 -1

#从指定位置开始替换字符串的值
setrange key1 2 xxx  #将key1的value从下标2开始替换为xxx

#设置key1的值为hhh并设置过期时间为5s
setex key1 5 hhh

#设置key的值,如果key不存在则设置失败,返回0
setnx key value

#同时设置多个key的值
mset key value [key value...]

#同时获取多个key的值
mset key1 key2 ...

#同时设置多个key的值,一个设置失败则全部失败(原子 *** 作)
msetnx key value [key value...]

用string存储对象时key值的设计

#设置一个user:1对象,值为Json字符串
set  user:1  {name:wang,age:20}

#设置user:1的名字为wang,user:1的年龄为20
mset user:1:name wang user:1:age 20

#获取user:1的名字、年龄
mget user:1:name user:1:age

#获取key的value,然后key的value设置为newvalue
getset key newvalue

string类似的使用场景

  • value除了是字符串也可以是数字!
  • 计数器:文章浏览量,点赞数
  • 统计多单位的数量
  • 对象缓存存储
列表list

在Redis中,我们可以用list完成栈、队列、阻塞队列

# 链表左边插入值
lpush key value

#链表右边插入值
rpush key value

#获取指定范围的值
lrange key start stop

#从列表的左边或者右边移除值
lpol key 
rpop key

#获取key对应的value链表指定下标的值
lindex key index

#获取列表中元素的个数
llen key

#移除列表中的元素
lrem key count value 
lrem stu 1 wang #移除list中的1个wang

#将链表修剪/截取到指定范围, 通过下标截取指定的长度,这个list已经改变了,只剩下截取的元素!
ltrim stu 1 2

#移除列表中最后一个元素,将它添加到另一个列表中
rpoplpush key1 key2

#根据下标替换列表中的值
lset key index value

#在列表中插入值
linsert key before|after value new_value

在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点

队列(头删尾插):LPOP RPUSH

栈 (栈顶出入):LPOP LPUSH

集合set

redis里面set是无序的,C++里面set是有序的,C++的unordered_set是无序set

set中的值是不能重复的

#给set中添加值
sadd key value1 value2 ...

#获取set中的所有值
smembers key

#判断某个值是否在set中
sismember key value

#获取set中元素的个数
scard key

#删除set中的值
srem key value1 value2....

#从set中获取随机值
srandmember key

#从set中获取count个随机值
srandmember key count

#随机删除指定个数个元素
spop key count

#将指定的元素从一个set中移动到另一个set中
smove set1 set2 value

数字集合类

差集、交集、并集

抖音中,A用户将所有关注的人放在一个set集合中,将他的粉丝放在一个集合中,通过这几个运算可以实现共同关注,共同爱好,二度好友(推荐好友)等

#差集
sdiff set1 set2 

#交集 共同还有可以通过这个实现
sinter set1 set2 

#并集
SUNION set1 set2 
哈希hash

可以将哈希看成是一个Map集合,key-value中的value是一个map集合,key - {field1-value1,field2-value2}

#设置一个hash的值
hset key field1 value1 

#获取一个hash的值
hget key field

#设置或者获取多个fhash的值
hmset key field1 value1  field2 value2 ... 
hmget key field1 field2...

#获取hash中的所有值
hgetall key

#删除指定field的hash键值对
hdel key field

#获取hash的键值对的个数
hlen key

#判断hash中的字段是否存在
hexists key field

#获取一个hash中的所有fields
hkeys key

#获取一个hash中国的所有value
hvals value

#给hash中指定字段的值加上一个增量
hincrby key field 2 

#如果不存在,则添加,如果存在,则失败
hsetnx key field value

hash的应用

hash中存储经常变更的值:比如用户信息: user : name-value,age-value,sex-value

hash更适合对象的存储,String更加适合字符串存储

有序集合zset
#添加一个值
zadd key scores value
zadd myset 1 wang #添加一个值
zadd myset 2 yang 3 zhang #添加多个值

#获取zset中一个范围的值
zrange key start stop

#将zset中的值按照score从小到大排序输出
zrangebyscore key min max

#移除zset中指定的元素
zrem key value

#查看zset中的元素个数
zcard key

#根据score的值统计在给定区间的元素个数
zcount key min max
Redis的三种特殊类型 geospatial 地理空间

geo的底层就是一个zset集合,所以zset的命令可以应用于geoadd的key

#获取zset中一个范围的值
zrange china:city 0 -1

#移除zset中指定的元素
zrem china:city shanghai
#添加地理位置
geoadd key 纬度 经度 名称
GEOADD china:city 116.40 39.90 beijing

#返回给定名称的纬度和经度
geopos key 名称
GEOPOS china:city xian

#返回两个给定位置之间的距离,单位:米m,千米km,英里mi,英尺ft
geodist key city1 city2
GEODIST china:city beijing xian km

#返回指定元素的纬度和经度的字符串
geohash key city
GEOHASH china:city xian

#以给定的纬度经度为中心,找到某一半径内的元素
georadius key 经度 维度 半径 单位m|km|ft|mi

#以一个成员为中心,查找指定半径范围内容的元素
georadiusbymember key city 半径 单位
hyperloglog基数统计

A{1,3,5,7,8,7} B{1,3,5,7,8}

A和B的基数(不重复的元素个数)= 5, 可以接受一定的误差!

Redis Hyperloglog 是基数统计的算法。0.81%的错误率!

优点: 占用的内存是固定的,2^64不同的元素计数,只需要12KB的内容空间。

bitmaps位图

bitmaps是位图存储的,都是二进制位来进行记录, 所以只要是只有两种状态值的场景,都可以使用bitmaps来存储。比如:登录、未登录;打卡,未打卡;活跃,不活跃等

#在bitmaps中添加数据
setbit key offset value
SETBIT sign 0 1
SETBIT sign 1 1
SETBIT sign 2 1
SETBIT sign 3 0

#查看位图中某个位置的值
getbit key offset

#统计位图中value等于1的个数
bitcount key start end

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/921070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存