02redis操作及数据类型

一.常用的5大基本数据类型

  • 字符串 String
  • 列表 List
  • 集合 Set
  • 哈希 Hash
  • 有序集合 Zset

二.key相关命令

keys * 查看当前库所有key

exists key 判断某个key是否存在

type key 查看某个Key是什么数据类型

del key 删除指定key的数据

unlink key 根据value选择非阻塞删除,仅仅将key从keyspace元数据中删除,真正的操作在后续异步操作。

expire key 10  为key设置为10分钟的过期时间

ttl key 查看还有多久过期,-1永不过期 -2已经过期

dbsize 当前库key的数量

select 1  选择1号库

flushdb 清空当前库

flushall  清空所有库

三.字符串string

string类型是二进制安全的。意味着Redis的string可以包含任何数据,比如图片jpg,序列化对象

一个redis中字符串的value最多可以是512M。

key都是用字符串,value都行。

命令:

set key value ,向当前库存值,key相同会覆盖以前的值

get key  ,向当前库取键为Key的值

append key value 向为key 的值后面追加value值,返回总长度

strlen key  获取key的value的长度

setnx key value 向当前库设置值,若存在key则失败,不存在key才成功。失败返回0 成功返回1

incr key  当这个key的value为数字时,让当前value加1

decr key  同上,减一

incr key step   将当前key加step

decr key step   同上,减step

mset k1 v1 k2 v2 ......  同时设置多个key,value

mget k1 k2 k3 ......  同时获取一个或多个value

msetnx k1 v1 k2 v2 ...... 同时设置一个或多个键值对,当且仅当所有的key都不存在

gettrange key 开始位置 结束位置 获取值的范围 相当于subString

setrange key 位置 value  向key的给定位置插入value

setex key 过期时间 value 设置值的时候设置过期时间

getset key value 返回旧值返回新值

 

redis底层的string数据类型是可以动态扩容的string,最大长度512M

 

四.Redis 列表List数据类型

List数据类型作为value,在redis中相当于,单键多值

该list按照插入顺序排序,当然也可以插入到中间,但是效率低。数据结构是一个双向链表

常用命令:

lpush/rpush k v1 v2 v3 ...... 从左/右边插入一个或多个值

lpop/rpop key      从左边/右边吐出一个值,若值至少有一个,则不灭亡。若全部之pop,则消失

rpop|lpush k1 k2  从右边吐出一个值并从左边插入

lrange key start stop 按照索引下标获取元素,从左到右   lrange key 0 -1 获取全部

lindex key index  获取key 下标为index的值

llen key  获取key的value的个数

linsert key before/after value newvalue 在key的value的前面或后面插入newvalue

lrem key n value  从左开始删除n个值为value的值

lset key index value 将key的下标为index的值换为value

数据结构:

List底层数据结构是一个快速链表quickList。

元素少会使用一块连续的存储空间,简称zipList压缩列表

当元素多的时候,就是多个压缩列表,并将多个压缩列表形成双向链表。这样减少了指针的使用。

 

五.Redis 集合(Set)

set提供的工程和list类似,特殊之处在于set可以自动排重,当需要存储列表数据又不需要重复数据的时候,就可以选择set。

命令:

sadd k1 v1 v2 v3...... 将一个或多个元素加入键为key的集合中,已经存在的将会被忽略。

smenbers key  取处键为key的所有值

sismenber key value 判断键为key的集合是否存在值为value的值,存在返回1,不存在返回0

scard key 返回键为key的集合的个数

srem key v1 v2 ......  删除键为key的集合中的元素(同时可以多个)

spop key 随机从键为Key的集合中吐出一个值

srandmenber key n 随机从集合中取出n个值,不会从集合中删除

smove source destinnation value 把集合中一个值从一个集合移动到另一个集合

sinter key1 key2 返回两个集合的交集元素

sunion key1 key2 返回两个集合的并集元素

sdiff key1 key2 返回两个集合的差集元素(key1-key2)

底层数据结构:

redis的set结构和hashset内部是实现一样,内部都是使用HashMap,所有的value都指向同一个内布值。

 

六.Redis 哈希(Hash)

redis hash是一个键值对集合

hash结构特别适合存储对象。

 

常用命令:

  hset  key filed value  给键为key的集合中的filed赋值为value

  hget key field 从key的field取出value

  hmset key f1 v1 f2 v2 ......批量设置一个Key对应多个key value

  hexists key field 查看key.field是否存在

  hkeys key  列出key的所有field

  hvals key   列出key的所有value

  hincrby key field increment  为哈希表key中的域field的值加上1

  hsetnx key field value 将哈希表key的field的值设置为value,当且仅当当前field不存在

底层数据结构:

Hash类型对应数据结构两种,因为一个field,value对应一个list类型中的value

当数据少的时候使用压缩表ziplist,数据多用哈希表

 

七.Redis 有序集合(Zset)

有序集合与普通集合非常类似,都没有重复元素。但是Set集合是无序的,而Zset是有序的。在Zset中每个成员都关联了一个评分,该评分就是用来对元素进行排序的关键。元素不能重复,但是评分可以重复。

 

常用命令:

  zadd key score1 value1 score2 value2...... 将一个或多个元素及其对应的评分添加到有序集合中

  zrange key start stop 【WITHSCORES】返回有序集合中下标在start,stop之间的元素。带上withscores,可以让评分一起返回

  zrangebyscore key minmax [withscores] [limit offset count] 返回有序集合key中,所有频分在min,max之间的成员。成员按照评分值递增排序。

  zrevrangebyscore key maxmin [withscores] [limit offset count] 同上改为从大到小排序

  zincrby key increment value 为元素的score加上增量

  zrem key value 删除改集合下,指定的元素

  zcount key min max 统计该集合 在该min,max区间的元素个数

  zrank key value 返回该值在集合中的排名,从0开始

 

底层数据结构:

  等价于hash。和hash数据类型差不多,评分相当于field

  跳跃表,跳跃表的目的在于给元素value排序,根据评分的返回获取元素列表

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-07-16 19:50  Costin  阅读(34)  评论(0)    收藏  举报