Redis常用操作(五大基本数据类型+三种特殊数据类型)

Redis常用操作(五大基本数据类型+三种特殊数据类型)

(String+List+hash+Set+Zset)+(Geospatial+Hyperloglog+Bitmaps)



Redis

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

String类型

set key value
在这里插入图片描述
get key
在这里插入图片描述
append key value
在这里插入图片描述
strlen key

在这里插入图片描述
incr key
在这里插入图片描述
decr key
在这里插入图片描述
incrby key value
在这里插入图片描述
decrby key value
在这里插入图片描述
getrange key 0 -1
在这里插入图片描述
getrange key start end
在这里插入图片描述
setex key time value
ttl key
ttl 查询剩余时间

setnx key value
在这里插入图片描述
mset key1 value1 key2 value2 key3 value3
mget key1 key2 key3
在这里插入图片描述
msetnx key1 value1 key2 value2 key3 value3 key4 value4
注:msetnx是一个原子性的操作,要么一起成功,要么一起失败!
在这里插入图片描述
mset中的key的巧妙设计,
mset key:id:field1 value1 key:id:field2 value2
mget key:id:field1 key:id :field2
在这里插入图片描述
getset key value
注:先get在set,如果之前就没有值,就是null,如果之前有值,就先get原来的值,在set现在语句里的value
在这里插入图片描述


List集合类型

注:1.实际上是一个链表(左为头,右为尾), Left Node Node …Node Right
lpush key value(从左边加)。
2.左右都可以增加 ,删除,如果key不存在,就创建新的链表,如果key存在,
就增加新的内容。
3.如果移除了所有内容,空链表,也代表不存在。

在这里插入图片描述

lrange key start end
在这里插入图片描述
rpush key value(从右边加)
在这里插入图片描述

lpop(从左边删)
在这里插入图片描述

rpop(从右边删)
在这里插入图片描述
lindex key index
注:根据下标找value
在这里插入图片描述

llen key
在这里插入图片描述

lrem key count value
在这里插入图片描述

ltrim key start end
在这里插入图片描述

rpoplpush source newkey
注:取最后一个value放在新的key里
在这里插入图片描述

lset key index value
注:相当于更新操作,就是说当前的key存在value才能修改成功,没有的话执行会报错
在这里插入图片描述

linsert key before violet value
在这里插入图片描述

linsert key after violet value
在这里插入图片描述


Set集合类型

注:set 里面的元素无序且不重复!
sadd key member
在这里插入图片描述
smembers key
注:查看 该set的全部人员
在这里插入图片描述
sismemeber key member
注:返回1则该 key中含有这个value,返回0则没有。
在这里插入图片描述
scard key
注:查看当前set的成员个数
在这里插入图片描述
srem key member
注:移除该set中指定的成员
在这里插入图片描述

srandmemeber key count
注:随机抽出key里count个成员

在这里插入图片描述
spop key count
注:随机删除改set中的count个成员
在这里插入图片描述
在这里插入图片描述

smove key1 key2 member
注:将key1中的member移到key2中
在这里插入图片描述
sdiff key1 key2
注:key1中可有2没有的成员(差集)
sinter key1 key2
注:key1,key2中都有的成员(并集)
sunion key1 key2
注:包含key1,key2所有的成员
在这里插入图片描述


Hash类型

注:和String类型没有太多的区别 ,只是String里存的是字符串,而hash里存的是键值对,本质上就是一个map集合!

hset key field value
hget key field
注:设值和取值
在这里插入图片描述
hmset key field1 value1 field2 value2 …
hmget key field1 field2…
在这里插入图片描述
hgetall key
注:获取所有(键值对)
在这里插入图片描述

hdel key feild
注:删除field,对应的value也会被删除,成对删除。

在这里插入图片描述

hlen key
注:返回该hash表中的键值对数
在这里插入图片描述
hexists key field
注:判断field存不存在,存在返回1,不存在返回2
在这里插入图片描述
hkeys key
注:获取所有key
hvals key
注:获取所有value

在这里插入图片描述

hincrby key field sum
注:正数的话就是加,负数就是减

在这里插入图片描述
hsetnx key field valaue
注:如果该field已存在,则会返回0,即创建失败
在这里插入图片描述


Zset有序集合类型

zadd key score1 member1 score2 member2 …
zrange key start end
c
zrangebyscore key min max
在这里插入图片描述
zrangebyscore key min max withscores
在这里插入图片描述

zrem key memeber
注:移除指定成员
在这里插入图片描述
zcard key
注:获取成员个数
在这里插入图片描述

zcount key min max
注:获取指定区间里的成员个数
在这里插入图片描述


Geospatial类型

geo的底层是用Zset来实现的!!!所以我们也可以使用的Zset的命令来操作Geo!!!
(zrange、zrem、zcard…)

geoadd key longitude latitude member1 longitude latitude member2
注:两极的位置无法直接添加,通常会下载好地理位置信息,通过java程序一次性导入!
在这里插入图片描述
geopos key member…
注:返回该成员的经度和纬度

在这里插入图片描述
geodist key member1 member2
注:如果其中一个不存在,则返回空,如果没有指定单位参数,则默认为米
在这里插入图片描述
georadius key longitude latitude radius km/m…
注:查找该集合中多少范围之类的成员
在这里插入图片描述
georadiusbymember key member radius km/m…
注:根据该集合中的成员来找给定范围之类的起亚成员

在这里插入图片描述
geohash key memeber
注:将二维的经纬度转换成一维的字符串
在这里插入图片描述


Hyperloglog类型

注:基数:不重复的元素,可以接受误差!
例:A{1,3,5,7,9,7} B{1,3,5,7,9} 基数=5

pfadd key value1 value2 value3 …
在这里插入图片描述
pfcount key
注:统计改集合的基数,重复的元素不统计在内!
在这里插入图片描述

pfmerge destkey sourcekey1 sourcekey2…
注:将指定的几个集合合并成一个集合!
在这里插入图片描述
如果允许容错,那么一定可以使用hpyerloglog,不允许就使用set或者自己的数据类型!!!


Bitmaps类型

注:按位存储,两个状态的都可以使用bitmaps,有或没有,登录未登录,打卡和未打卡等等…

模拟一周气田打卡情况
0-6:表示星期一到星期天
0:未打卡
1:打卡
setbit key field status
在这里插入图片描述
getbit key field
查看周四打没打卡
在这里插入图片描述
bitcount key
统计打卡的天数
在这里插入图片描述

总结

1、redis属于非关系型数据库,而我们经常用的mysql oracle数据库都是属于关系型数据库,它们本质上的区别是:mysql oracle数据库对于数据规范要求严格,还有对事务的支持;而redis则没有明确的数据规范要求,redis在操作事务是单线程的,不会出现线程安全性问题,例(incr 生成一个id)
2、Redis默认支持16个数据库,对外都是以一个从0开始的递增数字命名,可以通过参数databases来修改默认数据库个数。
客户端连接Redis服务后会自动选择0号数据库,可以通过SELECT命令更换数据库,例如选择1号数据库: Redis> SELECT 1 OK Redis [1]> GET test (nil) 说明: Redis不支持自定义数据库名称。
Redis不支持为每个数据库设置访问密码 Redis的多个数据库之间不是完全隔离的,FLUSHALL命令会清空所有数据库的数据。 多数据库不适用存储不同应用的数据。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值