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除了是字符串也可以是数字!
- 计数器:文章浏览量,点赞数
- 统计多单位的数量
- 对象缓存存储
在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
集合setredis里面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中添加数据
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)