【Redis】Redis基本数据类型及其常见的操作命令

Redis有众多的数据类型,但使用得最多的有5种

1. string

set key value

get key

del key

mset key1 value1 key2 value2

mget key1 value1


获取数据字符个数(字符串长度)
strlen key


追加信息到原始信息后部(如果原始信息存在就加,否则新建)
append key value


设置数值数据增加指定范围的值
incr key (自增1)

incrby key increment (整型数,key对应的value增加increment的值)

incrbyfloat key increment (浮点数,key对应的value增加increment的值)


设置数值数据减少指定范围的值

decr key

decrby key increment

按数值进行操作的数据,如果原始数据不能转换为数值,或则超过了Redis数值范围上限,将报错。


设置数据具有指定的生命周期
setex key seconds value

psetex key milliseconds value

Redis控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作。


常用于存储的格式:

表名:主键名:主键值 value


2. hash

hset key field value

hget key field

hgetall key

hdel key field

hlen key (查看hash有几个field)

hmset key field1 value1, field2 value2, …

hmget key field1, field2, …

hkeys key (查看key的所有fields)

hvals key (查看key的所有field的values)

hincrby key field increment (key中对应field的value增加指定值)

hincrbyfloat key field increment


hash类型下的value只能存储字符串,不能再潜逃存储其他类型的数据。
每个hash可以存储2^32-1个键值对

hash的设计初衷不是为了存储对象,因此不可滥用。

hgetall操作可以获取全部属性,如果内部field过多,效率很低。

string存储对象(json)与hash存储对象,string在于存储,hash在于修改。


举例

购物车的实现
以用户ID作为key,商品编号作为field,商品数量作为value.
当前仅仅是将数据存储到了Redis中,并没有起到加速的作用,商品信息还需要二次查询数据库

  • 每跳购物车中的商品记录保存成两条field
  • field1专用于保存购买数量
    命名格式:商品ID:nums
    保存数据:数值
  • field2专用于保存购物车中显示的信息,包含文字描述,图片地址,所属上架信息等
    命名格式:商品ID:info
    保存数据:json
    hmset 001 g01:nums 2 g01:info {…}
    商品信息可以独立hash,这样可以大大减少重复的信息。

hsetnx key field value (如果没有再设置)

商家应用

  • 以商家ID作为key
  • 将参与抢购的商品ID作为field
  • 将参与抢购的商品数量作为对应的value
  • 抢购时使用降值的方式控制产品的数量

Redis通常只做数据的提供和保存,尽量不要把业务压到Redis上。
Tips:
Redis应用于抢购,限购类、限量发放优惠券、激活码等业务的数据存储设计


3. list

添加/修改
lpush key value1 [value2] …
rpush key value1 [value2] …


获取数据
lrange key start stop (0, -1显示所有数据)
lindex key index
llen key


获取并移除数据
lpop key
rpop key


规定时间内获取并移除数据
blpop key1 [key2] timeout (若list不为空,则返回含有两个元素的列表,第一个为key,第二个为取出的元素。如果list为空,则等待timeout秒后还是没有取出数据的话,就返回nil)
brpop key1 [key2] timeout


朋友圈点赞,按照点赞顺序显示好友的点赞信息
如果取消点赞,移除对应的好友信息

  • 移除指定数据
  • lrem key count value (从左边开始删除指定个数的value)

Tips:
redis的list应用于具有操作先后顺序的数据控制

list中保存的数据都是string类型的,数据总量是有限的
list最多保存2^32-1个元素
list具有索引的概念,但是操作数据时通常以队列的形式进行入队操作,或以栈的形式进行入栈操作
获取全部数据操作结束索引设置为-1
list可以对数据进行分页操作,通常第1页的信息来自于list,第2页及更多的信息通过数据库的形式加载。


应用场景

微博/Twitter关注列表/粉丝列表,先关注的在前面;
新闻、咨询类网站如何将新闻或咨询按照发生的时间顺序展示;
企业运营过程中,系统将产生大量的运营数据,如何保障多台服务器操作日志的统一顺序输出?(每个服务器都网Redis中的list写,就能统一日志了)


解决方案
  • 依赖list的数据具有顺序的特征对信息进行管理;
  • 使用队列模型解决多路信息汇总合并的问题;
  • 使用栈模型解决最新消息的问题

4. set

添加数据
sadd key member1 [member2]


获取全部数据
smembers key


删除数据
srem key member1 [member2]


获取集合数据总量
scard key


判断集合中是否包含指定数据
sismember key member


Set类型数据的扩展操作

随机获取集合中指定数量的数据
srandmember key [count]


随机获取集合中的某个数据并将该数据移除集合
spop key


求两/多个集合的交、并、差集
sinter key1 [key2]

sunion key1 [key2]

sdiff key1 [key2]


求两/多个集合的交、并、差集并存储到指定集合中

sinterstore destination key1 [key2]

sunionstore destination key1 [key2]

sdiffstore destination key1 [key2]


将指定数据从原始集合中移动到目标集合中
smove source destination member


5.zset (sorted set)

在set的存储结构基础上添加可排序字段
添加数据
zadd key source1 member1 [score2 member2]


获取全部数据
zrange key start stop [WITHSCORES] (0 -1显示所有的数据)
zrevrange key start stop [WITHSCORES]


删除数据
zrem key member1 [member1]…


按照条件获取数据
zrangebyscore key min max [WITHSCORES] [LIMIT]
zrevrangebyscore key max min [WITHSCORES]


条件删除数据
zremrangebyrank key start stop
zremrangebyscore key min max


获取集合数据总量
zcard key
zcount key min max


集合交、并操作
zinterstore destination numkeys key [key …] [AGGREGATE SUM|MIN|MAX]
zunionstore destination numkeys key [key …]


获取某个值对应的索引(排名)
zrank key member
zrevrank key member


score值获取与修改
zscore key member
zincrby key increment member


score保存的数据存储空间是64位
score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失京都,使用时要慎重;
sorted_set底层存储还是基于set结构,因此数据不能重复,如果重复添加相同的数据,score值将被反复修改,保留最后一次修改的结果。


6. 通用命令

获取系统当前时间
time


key是一个字符串,针对哦key的操作

del key

exists key

type key (获取key的类型)


为指定key设置有效期

expire key seconds

pexpire key milliseconds

expireat key timestamp

pexpireat key milliseconds-timestamp


获取key的有效时间

ttl key

pttl key


切换key从时效性转换为永久性
persist key


查询key
keys pattern


匹配任意数量的任意符号   ?陪陪任意一个符号
keys *         所有
keys it*       查询所有以it开头
keys *heima    查询所有以heima结尾
keys ??heima   查询所有前面两个字符任意,后面以heima结尾
keys user:?    查询所有以user:开头,最后一个字符任意
keys u[st]er:1 查询所有以u开头,以er:1结尾,中间包含一个字母,s或t

为key改名

rename key newkey

renamenx key newkey


对所有key排序
sort


其他key通用操作
help @generic


7. 数据库通用操作

切换数据库
select index (Redis应该有16个数据库)


其他操作

quit 退出

ping 检查服务器是否能联通,不写key的话能联通则返回PONG

echo message


数据移动

move key db


数据库清除操作

dbsize (查询当前数据库里面有多少个key)

flushdb (清除当前数据库)

flushall (清除所有数据库)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值