Redis数据类型(上篇)

 一、 基本介绍

Redis是一个开源(BSD许可的),内存中的数据结构存储系统,它可以用作 数据库、缓存和消息中间件MQ,支持多种类型的数据结构,如String、sets、lists、sorted sets(有序集合)等。Redis内置了复制,LUA脚本,LRU驱动事件,事务和不同级别的 磁盘持久化,并通过Redis哨兵模式(Sentinel)和自动区分(Cluster)和提供高可靠型。
六大数据类型
Redis-Key
String
List
Set
Hash
Zset
三种特殊数据类型
geospatial
hyperloglog
bitmaps

二、数据类型详解(Redis不区分大小写)

1.Redis-Key
keys *:代表查看数据库的所有的值key

清空命令: flushdb(清除当前数据库), FLUSHALL(清空所有数据库)

( EXISTS---判断文件是否存在),存在的时候(integer)1;不存在的时候(integer)0
( remove-------移除文件),移除成功(integer) 1;
( EXPIRE name 20-----倒计时20后name过期),用ttl name 查看还有多少时间过期

( type----查看文件类型)


2.String类型
APPEND  key,往字符串后面追加某样东西,如果当前key不存在,相当于setkey

STRLEN key 获取字符串长度

incr”+1操作,自增1。" decr" -1操作,自减1

" INCRBY" 增加某个步长
" DECRBY"减少某个步长

获取某一小段字符串" GETRANGE",比如“GETRANGE key 0 3”截取0-3长度的字符子串,再比如" GETRANGE key 0 -1 "获取整个字符串(此时和get key一样)

修改字符串中的某一个值
" SETRANGE key1 1 ww" ,其中“1”是修改的位置,"ww"是要替换的字符

" setex(set with expire)":设置过期时间
" setnx(set if not exist)":不存在再设置(在分布式锁中可以常常使用)

解释:设置文件key2 在30秒后过期;setnx 如果当前文件存在则设置不了新的文件,否则可以设置
" mset":同时设置多个值
" mget":同时获取多个值

"msetnx":是一个原子性操作,要么一起成功,要么一起失败,如图所示,因为k1文件已经存在,虽然k4不存在,但是设置失败

set user:1{name:zhangsan,age:3}    设置一个user:1 对象 ,值为jason字符来保存一个对象

user:{id}:{filed}的用法可以在Redis使用
getset:先get再set


3、List列表类型
所有的List命令都是用l开头的
LPUSH list one :将一个值或者多个值,插入到列表头部
LRANGE list 0 -1 :列出所有元素
Rpush :将一个值或者多个值,插入到列表尾部

Lpop list :移除列表的第一个元素
Rpop list:移除列表的最后一个元素

Lindex list  1:获取下标为1的某一个值

Llen :返回列表的长度

移除指定的值(List中可以存放重复元素)
lrem list 1 three 移除1个three
lrem list 2 three 移除2个three
ltrim: 修建字符串,截断了只剩下截取的元素

rpoplpush:移除列表的最后一个元素,并移动到新的列表中,比如:
rpoplpush mylist anotherlist  :将mylist中的最后一个元素移除,放到anotherlist列表中的第一个元素

lset:将列表中指定的下标的值替换为另外一个值,更新操作

lset list 0 item :将list中下标为0的元素替换成item
注意:要先看列表是否存在, 此时下标为0的元素一定要存在,否则出现错误,这时Lpush list value1 ,再进行替换就不会报错
lset list 1 other :此时不存在该下标,报错
linsert:将某个具体的value插入到列表 中的某个元素的前面或者后面

总结:
  • 他实际上是一个链表,before Node after ,left, right.都可以插入值
  • 如果key值不存在,创建新的链表
  • 如果key存在,新增内容
  • 如果移除了所有值,空链表,也代表不存在
  • 在两边插入或者改动值,效率最高

4.Set(集合)
set中的值都是不能重读的,没有顺序的
sadd  myset "hello" : setset集合中添加元素hello
smembers : 查看指定set的所有值
sismember:判断某一个的值是不是在set集合中
scard myset:获取当前元素的值
比如:

127.0.0.1:6379> scard myset
(integer) 5   (当前集合中元素个数5个)
127.0.0.1:6379>
srem myset hello :移除set集合中的指定元素(第一个SMEMBERS少打了一个s)
SRANDMEMBER myset : 从集合中随机抽取一个元素

集合中随机抽取两个元素如下所示:

spop myset   :随机移除元素 或者 spop myset 2:随机移除两个元素

smove myset myset2 "vv"  :将“vv”从myset 中 移动到 myset2

差集、交集、并集
SDIFF key1 key2:差集
SINTER key1 key2:交集
SUNION key1 key2:并集

5.Hash(哈希)
Map集合、key-map 时候这个值是一个map集合,实际上和String类型没有很大区别,还是一个简单的key-value
hset myhash field1 vv :set一个具体的key-value
hget myhash field1 :获取一个字段值

hset myhasn field1 hello field2 world :set多个 key-value
hgetall myhash :获取多个字段值

hdel myhash field1:删除hash指定key字段,对应的value也会删除

再把值添加,hlen :获取表的字段数量

HEXISTS myhash field :判断hash表中指定字段是否存在,存在返回1,不存在返回0

HINCRBY:指定增量
hsetnx :如果不存在字段则不可以设置,反之可以设置

hash变更的数据user name age 尤其是用户的经常变动的信息。所以hash更适合对象的存储,而不是String,String类型的也可以存对象

6.Zset(有序集合)
在set的基础上,增加了一个值,set k1 v1      zset   k1  score v1

排序如何实现?
zadd salary 2500 hong (键值对)
ZRANGEBYSCORE salary -inf +inf: 在 -inf 和 + inf 范围内排序
ZRANGEBYSCORE salary -inf +inf withscores: 带上scores的排序
ZREVRANGE salary 0 -1 :从大到小进行排序

还可以调整上下区间的范围: -inf  2500

zrem :移除有序集合中的指定元素
zcard :获取集合中的个数

zcount :获取有序区间的集合个数

总结:zset 排序可以用来存储班级成绩表,工资排序表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值