redis五大数据类型-03

五大数据类型

官方介绍
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类型

String类型的使用场景:value除了是我们的字符串还可以是数字
计数器
统计统计单位的数量
粉丝数
对象缓存存储

List

基本数据类型,列表 list可以实现栈、队列、阻塞队列
所有的list命令都是以L开头的

常用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

127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"

127.0.0.1:6379> lpush list three
(integer) 3

#通过区间获取值
127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"

#将一个值或多个值,插入到列表尾部(右边)
127.0.0.1:6379> rpush list right 
(integer) 4

127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"

#移除第一个元素(左边第一个)
127.0.0.1:6379> lpop list
"three"

#移除最后一个元素(右边第一个)
127.0.0.1:6379> rpop list
"right"

#通过下标获取list中某一个值
127.0.0.1:6379> lindex list 1
"one"

//返回列表的长度
127.0.0.1:6379> Llen list
(integer) 3

//移除指定的值uid,当有相同的value时,可以用count来规定移除几个(从左到右选择)
//count>0从前往后移除,=0移除全部,<0从后往前
127.0.0.1:6379> lrem key count value 

//截取list,截取下标在中间的包括边界,数据被修改了,只剩下截取的数据
127.0.0.1:6379> ltrim list 1 2
OK  

//将列表的最右边一个值移动到另一个列表的最左边
127.0.0.1:6379> rpoplpush list list2
"lk3"

127.0.0.1:6379> lrange list2 0 -1
1) "lk3"

127.0.0.1:6379> lrange list 0 -1
1) "lk2"

//lset更新指定位置的值,若值不存在则报错

127.0.0.1:6379> lpush list lkyy1
(integer) 1

127.0.0.1:6379> lrange list 0 0
1) "lkyy1"

127.0.0.1:6379> lset list 0 item
OK

127.0.0.1:6379> lrange list 0 0
1) "item"

127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "world"

//linsert list before|after 具体值 插入值
127.0.0.1:6379> linsert list before "world" "other"
(integer) 3

127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "other"
3) "world"

小结:
实际上是一个链表,left ,right都可以插入值
如果key不存在,创建新的链表
如果key存在,新增内容
如果key存在,新增内容如果移除了所有值,空链表,也代表不存在
在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点
通过相应的命令可以实现其他数据结构的特性
队列(LPUSH RPOP) 栈(LPUSH LPOP)

Set(集合)
无序不重复集合

//添加元素
127.0.0.1:6379> sadd myset one two three
(integer) 3

//查看所有值
127.0.0.1:6379> smembers myset
1) "two"
2) "one"
3) "three"

//查询是否存在某值
127.0.0.1:6379> sismember myset one
(integer) 1

//获取set中个数
127.0.0.1:6379> scard myset
(integer) 3

//移除set中的指定元素
127.0.0.1:6379> srem myset one
(integer) 1

//随机获取set中的元素,[count]表示获取的个数
127.0.0.1:6379> srandmember myset [count]
"two"

//随机移除一个元素,[count]表示移除的个数
127.0.0.1:6379> spop myset [count]
"two"

//将一个指定的值移动到另一个set集合
127.0.0.1:6379> smove myset myset2 "one"
(integer) 1

//第一个集合中有第二个集合中没有的元素
127.0.0.1:6379> sadd myset a b c d e
(integer) 5

127.0.0.1:6379> sadd myset2 c d e f g
(integer) 5

127.0.0.1:6379> sdiff myset myset2
1) "a"
2) "b"

//都有的元素,交集
127.0.0.1:6379> sinter myset myset2
1) "c"
2) "e"
3) "d"

//所有元素,并集
127.0.0.1:6379> sunion myset myset2
1) "c"
2) "b"
3) "f"
4) "e"
5) "a"
6) "d"
7) "g"

Hash(哈希)

Map集合,key-map,这时候这个值是一个map集合,本质和String类型没有太大区别,还是一个简单的key-value

//
127.0.0.1:6379> hset key f1 lkyyy
//获取单个值

127.0.0.1:6379> hget myhash f1
"lkyyy"

//添加多个值
127.0.0.1:6379> hmset myhash f1 hello f2 world
OK

///获取多个值
127.0.0.1:6379> hmget myhash f1 f2
1) "hello"
2) "world"

//获取全部数据
127.0.0.1:6379> hgetall myhash
1) "f1"
2) "hello"
3) "f2"
4) "world"

//删除指定key字段,对应value也被删除
127.0.0.1:6379> hdel myhash f1
(integer) 1

//获取hash表的字段数量
127.0.0.1:6379> hlen myhash
(integer) 1

127.0.0.1:6379> hmset myhash f1 v1 f2 v2 f3 v3
OK

//判断hash中是否存在指定key
127.0.0.1:6379> hexists myhash f1
(integer) 1

//只获得filed
127.0.0.1:6379> hkeys myhash
1) "f1"
2) "f2"
3) "f3"

//只获得value
127.0.0.1:6379> hvals myhash
1) "v1"
2) "v2"
3) "v3"

127.0.0.1:6379> hincrby key field increment 

//不存在则可以设置
127.0.0.1:6379> hsetnx key field value   

Zset(有序集合)

在set基础上,增加了一个值

127.0.0.1:6379> zadd salary  100 xiaoming
(integer) 1

127.0.0.1:6379> zadd salary 200 xiaobai
(integer) 1

127.0.0.1:6379> zadd salary 300 xiaohei
(integer) 1

127.0.0.1:6379> zrange salary 0 -1
1) "xiaoming"
2) "xiaobai"
3) "xiaohei"

//[min max] 默认为闭区间,设置开区间加‘(’,从小到大
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores  //升序
1) "xiaobai"
2) "200"
3) "xiaohei"
4) "300"

//从大到小排序
127.0.0.1:6379> zrevrange salary 0 -1 withscores
1) "xiaohei"
2) "300"
3) "xiaobai"
4) "200"

//移除一个指定元素
127.0.0.1:6379> zrem salary xiaoming
(integer) 1

//获取有序集合中的个数
127.0.0.1:6379> zcard salary
(integer) 2

127.0.0.1:6379> Zadd myset 1 hello 2 world 3 qq
(integer) 3

//获取区间的成员数
127.0.0.1:6379> zcount myset 1 2
(integer) 2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值