redis存储数据结构及用法大全

本地安装好redis服务和客户端之后,使用如下命令连接redis服务器:

redis-cli -h 127.0.0.1 -p 6379

一、value值为字符串的相关操作:

#设置key:value,如果key值不存在则创建,否则覆盖

set key value




#如果键key的键值对存在,则覆盖新值为value,如果不存在,不操作,原子操作 等价于 setex key value
set key value XX

#如果key不存在,则创建一个key:value的键值对,如果存在不操作 等价于 setnx key value
set key value NX 

#设置key:value键值对,且过期时间是10(ex:秒,px:毫秒),原子操作
set key value ex|px 10

#如果key不存在则设置,否则返回0,成功返回1
setnx key value

#如果key存在则覆盖新值,否则返回0,成功返回1
setex key value

#获取key值的value 如果有返回值,如果没有返回空(nil)
get key

#获取key的旧值并设置新值 如果数据库没有key值,则返回的旧值为空(nil)
getset key new_value

#redis还可以缓存二进制数据,所以可以缓存任何类型的文件

#删除多个key对应的键值对,返回删除成功的个数
del key1 key2

#获取字符串值索引从0到6的子串
getrange key 0 6

#设置key对应的value中索引为5后面的子串为substring
setrange key 5 substring

#追加substring到键值为key的值后面 返回新值的总长度,如果没有key值,则新建一个,value为空字符串,并追加substring
append key substring

 


二、value为数字的相关操作

#当设置value时的字符串值符合redis中对数字的定义,且在redis定义的数字大小范围内时,redis自动转为数值类型
redis对数字的定义参照c语言的long ,double,int类型,包含无符号和有符号的整型或浮点型
值,如下表格:
10086	解释为整数。
+894	解释为整数。
-123	解释为整数。
3.14	解释为浮点数。
+2.56	解释为浮点数。
-5.12	解释为浮点数。
12345678901234567890	这个值虽然是整数,但是因为它的大小超出了 long long int 类型能够容纳的范围,所以只能被解释为字符串。
3.14e5	因为 Redis 不能解释使用科学记数法表示的浮点数,所以这个值只能被解释为字符串。
"one"	解释为字符串。
"123abc"	解释为字符串。

操作整型:
#将key值对应的value值加(或减)1,并返回新值,如果value值不是整数类型 返回错误信息
incr key 
decr key

#将key值对应的value值加(或减)10 并返回新值,果value值不是整数类型 返回错误信息
incrby key 10
decrby key 10

#在执行加或减时,如果没有对应的key存在,则会新建一个,并进行增减

浮点型:
#对key值的value进行加1.2,浮点型最大保留17位小数 并四舍五入 
incrbyfloat key 1.2

#注意浮点型只有加 没有减关键字,可以使用加一个负数实现减法
incrbyfloat key -2.9

#注意:incrbyfloat可以作用在浮点型 也可以作用在整型,而incr incrby decr decrby只能作用在整型值上

三、value为散列的相关操作:

散列可以理解为一组键值对的集合,其中的键不能重复,值可以为数字或字符串或者一个散列,散列可以理解为java中的一个对象,包含了字段名和字段值。

#设置一个key为animal::01的散列值,散列值的key为name,value为dog 如果已存在则覆盖
hset animal::01 name dog

#获取key为animal::01的散列值中key为name的value,
hget animal::01 name

#设置key为animal::01的散列中key为name的值,如果已存在不设置,不存在就设置
hsetnx animal::01 name newvalue

#将key为animal::01对应的散列设置多个键值对
hmset animal::01 key1 value1 key2 value2

#获取key为animal::01对应散列的多个key值:key1和key2 
hmget animal::01 key1 key2

#将key为animal::01对应散列中key为age的加10 hincrby只能处理整型数字
hincrby animal::01 age 10

#将key为animal::01对应散列中key为age的加10.2 hincrby能处理整型数字和浮点型数字
hincrbyfloat animal::01 age 10.2

#获取key为animal::01对应散列中所有的键值对 
hgetall animal::01

#获取散列中所有key值
hkeys animal::01

#获取散列中所有value值
hvals animal::01

四、value为列表的操作(元素重复有序):

 

#往list中推入多个值item1 item2 从左边依次推入 如果list不存在新建 存在则从左追加
lpush list item1 item2 ...

#如果list存在则往list中从右依次推入item1 item2 ,如果不存在,不操作
lpushx list item1 item2 ...


#往list中推入多个值item1 item2 从右边依次推入 如果list不存在新建 存在则从左追加
rpush list item1 item2 ...

如果list存在则往list中从右依次推入item1 item2 ,如果不存在,不操作
rpushx list item1 item2 ...

#从左边弹出一个元素 如果没有元素或list 则返回nil
lpop list

#从右边弹出一个元素 如果没有元素或list 则返回nil
rpop list

#从list1的右边弹出一个元素到list2的最左边
rpoplpush list1 list2 

#获取lis中第0个索引元素,即第一个元素
lindex list 0

#获取list中从0索引到最后一个索引范围内的元素,-1表示最后一个索引,所以可以获取到整个list元素
lrange list 0 -1

#获取列表长度
llen list 

#将list中索引为0的设置为new_value ,如果给定的索引值大于列表长度则 提示out of range .
lset list 0 new_value

#在list中元素2的前面或后面插入1 如果list中没有1元素 则返回-1,不会插入成功
linsert list before|after 2 1

#将list裁剪,只保留索引2到6的,含头索引含尾索引,索引从0开始计算
ltrim list 2 6

#从左向右开始移除list中等于hello的两个元素
lrem list 2 hello

#从右向左移除list中2个hello元素
lrem list -2 hello

#移除list中所有等于hello的元素
lrem list -2 hello

#依次从list1和list2中弹出最左侧元素,如果列表中没有元素,阻塞,直到有元素被推入,超时时间10秒
blpop list1 list2 10

#依次从list1和list2中弹出最右侧元素,没有元素会阻塞,超时20秒,返回源list和弹出元素
brpop list1 list2 20

#阻塞从list1右侧弹出一个元素到list2元素的左侧 超时时间30秒
brpoplpush list1 list2 30

五:value是集合的操作(元素是无序不重复):

#向key为set的集合中加入多个元素:item1 item2 item3,存入顺序是无序的
sadd set item1 item2 item3

#查看key为set的集合中所有元素
smembers set

#从set1集合中将hello元素移动set2集合中,如果set1或set2不是集合会提示错误信息,如果移动成功返回1,如果集合中没有hello这个元素,返回0,如果set2中包含hello,则覆盖
smove set1 set2 hello

#判断set1集合中是否存在hello元素,如果存在返回1,不存在返回0
sismember set1 hello

#从set集合中移除hello元素,如果成功返回1 失败或元素不存在或集合不存在返回0
srem set hello

#返回set集合中元素个数 ,没有元素或集合不存在返回0
scard set

#随机从set集合中返回10个不重复的元素,如果没有10个,返回所有元素,10可以不写,默认1个
srandmember set 10

#随机返回set集合中10个元素,可以重复,所以返回的个数可以大于集合的个数
srandmember set -10

#随机中set集合删除2个元素,返回移除的元素列表,2也可以不写,默认1个
spop set 2

#求set1集合和set2几个的交集,返回交集列表,如果其中一个集合不存在,返回空列表
sinter set1 set2

#将set1和set2集合的交集列表存入key为newset的集合中,如果newset不存在会自动创建,如果存在则删除之后再创建
sinterstore newset set1 set2

#求set1集合和set2集合的并集,返回交集列表,如果其中一个集合不存在,返回空列表
sunion set1 set2

#将set1和set2集合的并集列表存入key为newset的集合中,如果newset不存在会自动创建,如果存在则删除之后再创建
sunionstore newset set1 set2


#求set1集合和set2集合的不同元素,返回不同元素列表,如果其中一个集合不存在,返回空列表
sdiff set1 set2

#将set1和set2集合的不同元素列表存入key为newset的集合中,如果newset不存在会自动创建,如果存在则删除之后再创建
sdiffstore newset set1 set2

六、value值是有序集合的操作(zset):

#将分值为0.1,元素为item1,分值为0.2,元素是为item2加入到zset集合中
zadd zset 0.1 item1 0.2 item2

#查看zset集合的元素个数
zcard zset

#查看zset中分值在0到10分的元素个数
zcount zset 0 10

#将zset集合中item1元素数值加10
zincrby zset 10 item1

#返回zset集合中item1元素的索引 没有该元素时返回nil
zrank zset item1

#删除zset集合中多个元素:item1 item2 ..
zrem zset item1 item2 ..

#查询zset中0到-1索引之间的元素 -1表示最后一个元素的索引 并包含分数信息
zrange zset 0 -1 withscores

#查询分数在1到10之间的元素 包含分数信息
zrangebyscore zset 1 10 withscores

 


七、redis基本操作:

#选择1号数据库,redis默认16个数据库 序号是:0-15
select 1

#查看当前数据库匹配a*的所有键值 keys命令慎用,会引起redis阻塞,数据量大很影响性能 用scan 命令 ,使用游标查询
keys a*

#查看key_name键值是否存在
exists key_name

#在当前数据库随机返回一个key值
randomkey

#查看键值存放的类型 有set list string 
type key_name

#删除当前数据库中指定的键值对 同步阻塞删除
del key_name ...

#异步删除key 效率比del高
unlink key_name ...

#当前数据库总共多少对键值对
dbsize

#对set1集合中元素进行升序或降序排列
sort set1 asc|desc

#将key1的键值名修改为key2,如果key2已经存在,则覆盖之
rename key1 key2

#如果key2不存在则将key1修改为key2,否则不修改
renamenx key1 key2

#清空当前数据库
flushdb

#情况所有数据库
flushall

#交换0号数据库和4号数据库的所有键值对
swapdb 0 4

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值