Redis(2) redis数据类型

目录

1. Redis介绍

1. 1 简介

1.2 特征

1.3 redis基础常识

2.Redis数据类型

2.1 key 键

2.2 value 

2.2.1 String

2.2.2 List 集合

2.2.3 Set 集合、

2.2.4  Zset(有序集合) sorted_set

2.2.5 Hash(哈希)

3. 查询手册

 


db-engines.com 数据库关系网站

1. Redis介绍

1. 1 简介

Redis是用C语言开发的一个开源的高性能基于内存运行的键值对NoSQL数据库

redis的官网地址,非常好记,是redis.io

1.2 特征

(1) 支持数据的持久化,可以将数据保存在磁盘中,重启之后可以再次加载到内存中使用
(2) 支持多种数据类型,除了KV类型的数据,还支持list、set、hash等数据结构
(3) 支持master-slave模式的数据备份

1.3 redis基础常识

  • Redis采用单线程机制进行工作
  • Redis默认拥有16个数据库,数据库编号从0开始,默认使用0号数据库
  • 使用select 数据库编号 可以切换使用的数据库
  • dbsize 命令查看当前数据库key的数量
  • keys * 命令查看当前数据库所有的key
  • flushdb 命令清空当前数据库
  • flushall 命令清空所有数据库
  • Redis中所有数据库使用同一个密码,默认没有密码,Redis认为安全层面应该由Linux来保证
  • Redis中所有索引都是从0开始
  • Redis默认端口是6379

2.Redis数据类型

2.1 key 键

help @key命令来查看string的相关命令

所有的key都是String类型。这里的数据类型指的是value的数据类型,value数据类型包括String、List、Set、Zset、Hash 五大数据类型

1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;
2.key也不要太短,太短的话,key的可读性会降低;
3.在一个项目中,key最好使用统一的命名模式,例如  user:001

  • keys *  查看所有的key
  • set key value ex 10    设置key,并设置过期时间为10秒
  • set key value px 1000 设置key,并设置过期时间为1000毫秒
  • expired key 10,设置key的过期为10秒
  • ttl key 查看key的过期时间

2.2 value 

这里的数据类型指的是value的数据类型,value数据类型包括String、List、Set、Zset、Hash 五大数据类型

2.2.1 String

 help @string命令来查看string的相关命令

1. String是redis value值最基本的数据类型。

2. 该String类型的value值最大可以支持512M

3. 字符串类型的用法就是这么简单,因为是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储。

4.  通过字符串类型进行数值操作,数值操作时,redis会将字符串类型转换成数值

使用场景String

  • 1. 字段串

set key value  设置值

setnx key value 或者 set key value nx ,如果key不存在,才能set成功,如果key已经存在,则不能够set成功

set key value xx , 如果key存在,才能set成功,如果key已经不存在,则不能够set成功

append key value ,追加字符串

getRang key start end  ,截取元素,有正向索引(从左往右0 1 2 。。),也有逆向索引(从右边往左-1 -2。。) 

setRange key offset value, 覆盖第几位元素,

strlen key 长度

flushdb   flushall 清除数据

type key 获取 value的类型,描述的是value类型

getset  命令, 设置新值,返回old 值

del key  删除key

mset k1 v1 k2 v2  批量设置

  • 2. 数值型   incr 抢购秒杀等

OBJECT 命令 object encoding key,如果是纯数值的,encoding 为 int

如果是数值,则

incr key,加1

incrby key 22 加22

decr key  减一

decrby key 22 ,减去22

incrbyfloat key 0.2 小数

  • 3. bitmap

位的概念,直接set 位

setbit key offset value   

setbit k1 1 1 ,strlen k1 长度为1, git k1 值为 @ ,ascii值

字符集 ascii 码,其他一般叫扩展字符集,

扩展,其他字符集不在对ascii重新编码。

ascii码 必须是 0xxxxxxx,以0开头

自己的程序,字节流读取,每字节取判断,

如果是以0开头,直接取ascii中找

如果不是0开头,则去本地字符集中去找

bitpos key bit start end    bitpos k1 1 0 0 ,在k1中找第一个字节中位中出现1的位置。其中start end 指的是字节

bitcount key  start end , bitcount k1  在k1中找第一个字节中位中出现1的位置,只count 位 为1

2.2.2 List 集合

 help @list 命令来查看sorted_set 的相关命令

1. 底层是一个字符串列表,可以从头到尾添加元素。

2. 添加元素时

如果key不存在,创建新的链表
如果key已存在,添加内容
如果key的所有值全部删除,则对应的key也会随之消失

3. 在链表的头尾操作效率高,中间效率低

key 有连个属性 head 和 tail

lpush key value..    lpush k1 a b c d ,从左边push元素     d c b a

rpush key value..   rpush k2 a b c d ,从右边边push元素

lpop key          lpop k1 弹出第一个元素  d

rpop key          rpop k2 弹出第一个元素  d

用 lpush 推,用lpop,取 相当于 先进后出,同向命令

用lpush推,用rpop取,相当于先进先出,逆向命令

lrange key start end   lrang k1 0 1  查看看所有list数据,可以用正向索引,也可以用逆向索引

lset key index value  lset k1 3 xxxx  修改 索引为3的value值为 xxxx

lrem key count value   lren k1 1 a  删除list中1个值a的元素

linsert key before|after pivot value    linsert k1 after  xxxx a, 在xxxx元素之后插入 a

llen key   , llen k1  list的长度

ltrim key start end    ltrim key 1 -2   删除范围两边的数据

这里命令的 “l” 是list的意思

阻塞,单播队列 Blpush  blpop

2.2.3 Set 集合、

 help @set命令来查看set 的相关命令

1. 底层通过HashTable实现;是String类型的无重复值的无序集合

无序, 去重  支持集合操作,随机事件

sadd key value value2....  sadd k1 tom sean peter  创建set

srem key value value2 ...  srem k1 tom   删除tom

smember key  查询所有set中的值

sinter key1 key2     交集

sinterstore dest key1 key2 ,取交集,并将交集存储到dest中

sunion key1 key2  并集

sunionstore dest key1 key2

sdiff key1 key2 差集

sdiff key2 key1

随机事件  抽奖场景,

srandmember  key count ,

count 如果是整数,取出一个去重的结果集,不能超过已有集的数量

count如果是负数,取出一个重复的结果集,一定满足数量

如果为0 ,不返回

spop key  取出一个

2.2.4  Zset(有序集合) sorted_set

 help @sorted_set 命令来查看sorted_set 的相关命令

类似Set;每个元素都会关联一个double类型的分数(score);Redis通过分数自动的为集合中的 成员进行从小到大的排序;成员不可重复,分数可以重复

list的序是放入取出的序

sorted_set 是排序的序,score按照分数。

zadd key score1 value1  score2 value 2..      zadd k1 8 apple 2 banana 4 orange

zrange k1 0 -1 查看 ,按索引 ,从小到大,物理内存左小右大。

zrevrange k1 0 -1 ,按索引,从大到小

zrange k1 0 -1 withscores  查看带score

zrangebyscore key start end  zrangebyscore k1 3 8 取分数区间的元素

zscore k1 apple  根据元素取出score

zrank k1 apple 根据原色取出排名

进行score 进行数值变化:歌曲排行榜

zincrby k1 2.5  banana   给banana元素的score增加 2.5

也可以进行集合操作,并集 交集 差集

zadd k1 80 tom  90 sean 60 peter

zadd k2 70 tom  90 sean 80 baby

zunion unkey 2 k1 k2   权重  聚合

zunion unkey1 2 k1 k2  weights 1 0.5

排序是怎么实现的,增删改查的速度

skip list 跳跃表 , 类平衡数

随机造层

平均值相对稳定

 

2.2.5 Hash(哈希)

类似Java中的Map<String, Object>;是一个键值对集合;适合存储对象

 help @hash 命令来查看hash的相关命令

hset key field value    hset sean name zhangsan

hget key field             hget sean name

hmset key field value  filed2  value2  ...   hmset sean age 18 address bj

hmget key field field2 ...                          hmget sean name age

hkeys key                                              hkeys sean  获取所有的key

hvals key                                              hvals sean  获取所有的valus

hgetall  key                                           hgetall sean 获取所有的键值对

hincrbyfload key filed value                hincrbyfload sean age 0.5   , 支持数值计算

   

3. 查询手册

help @generic 

help @string

help @list

help @set

help @sorted_set 

help @hash

help @transactions

help @connection  

help @server 

help @scripting 

help @hyperloglog 

help @cluster 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值