欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Redis五大数据类型

程序员文章站 2023-01-02 11:56:09
Redis五大数据类型 补充:常用命令 Ping ping下redis Dbsize 查看当前数据库的key的数量 Select 1 切换到下标为1的数据库中 Flushdb 清空当前库key Flushall 清空全部库key Redis键的操作(常用): 查看当前数据库的所有key: Keys ......

redis五大数据类型

补充:常用命令

ping       ping下redis

dbsize   查看当前数据库的key的数量

select 1   切换到下标为1的数据库中

flushdb     清空当前库key

flushall   清空全部库key

 

redis键的操作(常用):

查看当前数据库的所有key:

keys *

 

判断当前key是否存在:

exists name

 

将当前key移动到2号库中:

move name 2

 

设置key在6秒后过期:

expire name 6

 

查看当前key还有多久过期

ttl name

 

查看当前key是什么结构的类型

type name

 

 

string 类型(常用)

string是redis最基本的类型,可以理解成一个key对应一个value。

string类型是二进制安全带额,意思是redis的string可以包含任何数据,比如jpg图片或者序列化对象。

一个redis中字符串value最多可以是512m

 

操作:

set name oyr:    给键name设置值为oyr

 

get name:       获取键name的值

 

del name:       删除建为name值

 

append name 123:  name对应的值后面追加123

 

strlen name:    得到当前name对应的值的长度

 

incr age:age+1    一定要是数字才能操作

 

incrby age 10:age+10

 

decr age:age-1    一定要是数字才能操作

 

decrby age 10: age-10

 

setex name 10 oyr:

set with expire)

设置key为name,过期时间为10秒,值为oyr

 

sexnx name ooo:

sex if not exist)

设置键位name,值为ooo,只有不存在的时候才会设置进去

 

mset k1 v1 k2 v2 k3 v3:    一次设置多个值

 

mget k1 k2 k3:        一次获取多个值

 

msetnx k1 v1 k2 v2 k3 v3:    一次设置多个值,如果有一个键是存在的那么全部失效。

 

 

hash 类型(常用)

redis hash 是一个键值对集合。

redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

类似java里面的map<string,object>

k-v模式不变,但v是一个键值对

 

操作:

1)hset

hset user name oyr      给键user的name属性设置值

 

 

2)hget

hget user name        获取键user的name值

 

3)hmset

hmset user age 18 sex nan    同时设置多个值

 

4)hmget

hmget user name age sex    同时获取多个属性值

 

5)hgetall

hgetall user         获取键user中的所有键和值

 

6)hdel

hdel user name      删除键user中的name属性

 

7)hlen

hlen user          获取键user下有几个属性

 

8)hexists

hexists user nane      判断键user下是否有name属性

 

9)hkeys

hkys user          获取键user下的所有属性

 

10)hvals

hvals user            获取键user下的所有值

 

11)hsetnx

hsetnx user name "oyr"    如果user对象里存在 name 属性,则不做操作,不存在,创建并赋值。

 

(12)hincrby

hincrby  user age 10      给键user里的age 属性添加10

 

 

lists 类型(双向链表)

redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。

它的底层实际是个链表而且是双向链表。注意:先进后出,后进先出

 

操作:

 

lpush list1 a b c d    list1链表添加数据a b c d,从头部添加

 

lrange list1 0 -1      获取list1链表所有数据

 

rpush list2 1 2 3    给链表list2尾部插入元素

 

lpop list1      出栈 mylist,出栈后,元素消失(从头部出)

 

rpop list1      出栈 mylist,出栈后,元素消失(从尾部出)

 

lindex list1 3    获取链表的3索引位置的值

 

list1        获取list1 链表的长度

 

lset list2 2 s    给链表索引2的位置设置值为 s

 

lrem list3 2 d    删除链表2个d元素

 

ltrim list2 2 5    从索引2截取到索引5,其他元素被遗弃

 

linsert list2 before/after s u    在链表f元素前面或者后面插入 h 元素

 

rpoplpush list1 list2       list1链表中尾部出站,出栈元素添加给list2链表

 

lists性能总结:

它是一个字符串链表,left、right都可以插入添加;

如果键不存在,创建新的链表;

如果键已存在,新增内容;

如果值全移除,对应的键也就消失了。

链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

 

 

set 类型(不能重复)

redis的set是string类型的无序集合。它是通过hashtable实现实现的,

 

操作:

 

sadd set1 a b c d       set1集合添加元素

 

smembers set1        查看set1集合的所有元素

 

sismember set1 a      判断set1集合中是否有a元素

 

scard set1        获取集合set1 的元素个数

 

srem set1 a      删除集合set1中的元素(可以一次删除多个)

 

srandmember set2 3    在集合set2中随机出3个元素

 

diff set3 set4      差集,取set3中存在但是set4中不存在的元素

 

sinter set3 set4      交集,取set3和set4都存在的元素

 

sunion set3 set4      并集

 

 

sortedsets 类型

 

redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。

redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

 

 

操作:

 

zadd zset1 60 a 70 b 80 c 90 d 100 f    zset1 有序集合设置元素,同时设置元素分数。

 

zrange zset1 0 -1 withscores      查询集合所有元素,0:开始,-1:结,withscores显示分数

 

zrange zset1 0 2            查询集合下标0到下标2的元素

 

zcount zset1 70 90           统计分数在 70 到 90 之间元素,闭区间。

 

zcount zset1 (70 90       统计分数在70到90之间元素,左边开区间,右边闭区间

 

zcount zset1 -inf +inf      统计所有元素  -inf:最小值 +inf:最大值

 

根据分数查询12到19集合,从坐标0开始。每页显示1条,12-19都是闭区间:

zrangebyscore mysset 12 19 withscores limit 0 1

 

zrem zset1 a b        集合删除元素a b

 

 

五大数据类型操作结束