Redis入门之基本操作命令

非关系型数据库redis相比于mysql数据库优缺点都很明显

优点:

  1. 内存数据库,读写速度比mysql快很多
  2. 支持数据持久化,便于备份、恢复
  3. 支持简单的事务,即原子性,Redis的所有操作都是原子性的
  4. 数据类型丰富  ,支持 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作 支持主从复制,哨兵机制

缺点:

  1. 数据存储在内存,容易丢失。
  2. 作为缓存时,存在与数据库数据不一致的问题
  3. 雪崩问题、缓存击穿问题、缓存并发竞争问题

String类型数据操作

  1. 设置key-value

>set name jack
>mset name jack age 23 addr China        设置多个
>append key val          追加

     2. 获取key的值

get name
mget name age hobby                获取多个
127.0.0.1:6379[2]> set name Jack
OK
127.0.0.1:6379[2]> mset name Jack age 23 addr China
OK
127.0.0.1:6379[2]> get name
"Jack"
127.0.0.1:6379[2]> mget name age addr
1) "Jack"
2) "23"
3) "China"

     3. 设置key时,设置过期时间

set name jack ex 10       #10s后过期
ttl name            #查看多久过期:返回-2 key不存在;-1 则key存在,但没有过期时间;
                                  或者返回具体时间 ​
 

   4.获取字符串值的长度

strlen name

   5. 获取字符串的分片

set name jack
getrange name 0 1 #包含1
-->ja

  6. 设置字符串的片段值

set name beikehan
setrange name 1 oo
-->bookehan

  7. 数值加1、减1

set age 23
incr age  只能整型数值
-->24
decr age
-->23

    8.数值加5、减5

set age 10
incrby age 5    增加5只能整形
decrby age 5    减去5

incrbyfloat age 1.3   转为字符串类型
incrbyfloat age -1.2
127.0.0.1:6379[2]> set age 10
OK
127.0.0.1:6379[2]> incrby age 5
(integer) 15
127.0.0.1:6379[2]> decrby age 5
(integer) 10
127.0.0.1:6379[2]> incrbyfloat age 1.3
"11.30000000000000071"
127.0.0.1:6379[2]> incrbyfloat age -1.2
"10.10000000000000142"

字符串的使用场景

  1. 作为缓存;并发计数,点赞、秒杀

  2. 带有效期的验证码,过期自动删除

List类型

Redis列表是简单的字符串列表

插入列表

# 头插法
lpush key val1 val2 ...
127.0.0.1:6379> lpush numbers 1 2 3
(integer) 3
​
# 尾插法
127.0.0.1:6379> rpush numbers 8 9 0
(integer) 6

更新列表

# 修改某下标的值
lset key index val
127.0.0.1:6379> lset numbers 5 10  
OK

删除列表

# 头删法
lpop key # 删除第一个值, 并立即返回该值
127.0.0.1:6379> lpop numbers
"3"
​
# 尾删法
rpop key # 删除最后一个值, 并立即返回
127.0.0.1:6379> rpop numbers
"10"
​
​
# 删除指定的值
lrem key count value # 返回的是删除的个数
127.0.0.1:6379>lrem numbers 0 2  # 删除所有值为2的元素
(integer) 4
​
127.0.0.1:6379>lrem numbers -2 1  # 从表尾开始删除2个值为1的元素
(integer) 2
 
127.0.0.1:6379> lrem numbers 2 1  # 从表头开始删除2个值为1的元素
(integer) 2
​
# 截取数据
ltrim key start stop
127.0.0.1:6379> ltrim numbers 2 5  # 保留下标为 【2,5】之间的所有元素,删除其余元素

查询列表

lrange key start stop # 返回指定区间内的内容
127.0.0.1:6379> lrange numbers 0 -1
llen key  #获取列表的长度
127.0.0.1:6379[2]> lpush numbers 1 2 3
(integer) 3
127.0.0.1:6379[2]> rpush numbers 8 9 0
(integer) 6
127.0.0.1:6379[2]> lset numbers 5 10
OK
127.0.0.1:6379[2]> llen numbers
(integer) 6
127.0.0.1:6379[2]> lrange numbers 0 -1
1) "3"
2) "2"
3) "1"
4) "8"
5) "9"
6) "10"

Hash

hash 特别适合用于存储字典数据。

插入哈希

# 设置单个 hset key field value 
127.0.0.1:6379> hset user:123 name jack 
(integer) 1
# 设置多个 hmset key field value [field2 value2]  # 同时将多个 field-value (域-值)对设置到哈希表中;
#键和字段存在时,属于更新
127.0.0.1:6379> hmset user:123 name xiaomi age 23 gender man # 存储用户123的个人信息{'name': 'xiaomi', 'age': 23, 'gender': '男'}
(integer) 3
​
hincrby key field increment  # 为哈希表 key 中的指定字段的整数值加上增量
127.0.0.1:6379> hincrby user:123 age 5  # 用户123的年龄加5岁
(integer) 24

查询哈希

hget key field #指定字段的值
127.0.0.1:6379> hget user:123 name
"xiaomi"
​
hgetall key # 获取所有字段和值
127.0.0.1:6379> hgetall user:123
1) "name"
2) "xiaomi"
3) "age"
4) "24"
5) "gender"
6) "man"
​
hkeys key  #获取所有的字段
hvals key   #获取所有的值

删除哈希

hdel key field1 [field2] # 删除一个或多个哈希字段, 返回删除的个数
127.0.0.1:6379> hdel user:123 gender # 用户123的性别
(integer) 1 

Hash类型练习

  1. 更新用户123 的购物车中id为3的商品数量

  2. 修改用户123的购物车中id为3的商品数量为5个

  3. 获取用户123的所有购物车数据

  4. 删除用户123的购物车中id为3的商品

    127.0.0.1:6379> hincrby cart_123 3 5
    (integer) 5
    127.0.0.1:6379> hincrby cart_123 3 -2
    (integer) 3
    127.0.0.1:6379> hset cart_123 3 5
    (integer) 0
    127.0.0.1:6379> hgetall cart_123
    1) "3"
    2) "5"
    127.0.0.1:6379> hdel cart_123 3
    (integer) 1

Set

Set 是 String 类型的无序的容器结构。集合成员是唯一的,不能出现重复的数据。

插入集合

sadd key member1 [member2] # 向集合添加一个或多个成员
127.0.0.1:6379> sadd  workers  tom lucy jack
(integer) 3

删除集合

srem key member1 [member2] # 移除集合中一个或多个成员
127.0.0.1:6379> srem workers  tom 
(integer) 1

查询集合

scard key  # 获取集合的成员数
127.0.0.1:6379> scard workers
(integer) 3
smembers key  # 返回集合中的所有成员
127.0.0.1:6379> smembers workers
1) "tom"
2) "jack"
sismember workers tom  # 判断是否集合中的成员

Set类型的练习

  1. 选中用户123 购物车中id为3的商品
  2. 取消选中用户123 购物车中id为3的商品
  3. 查询用户123购物车中所有选中的商品
  4. 查询用户123购物车中所有选中的商品个数
127.0.0.1:6379> sadd cart_selected_123 3
(integer) 1
127.0.0.1:6379> srem cart_selected_123 3
(integer) 1
127.0.0.1:6379> smembers cart_selected_123
1) "3"
127.0.0.1:6379> scard cart_selected_123
(integer) 1

Zset

String 类型元素的有序集合,每个元素唯一且都会关联一个 double 类型的分值,根据分值来为集合中的成员从小到大排序。

插入有序集合

# zadd key score1 member1 [score2 member2]  # 向有序集合添加一个或多个成员,或者更新已存在成员的分数
127.0.0.1:6379> zadd salary 10000 Jim 8000 Tom 12000 JiMi 10000 Hake
(integer) 1

删除有序集合

zrem key member [member ...]  # 移除有序集合中的一个或多个成员
127.0.0.1:6379> zrem salary Hake  # 删除员工Hake
(integer) 1
​
# zremrangebyrank key start stop  # 根据排名区间【0,3】 删除成员,区间根据索引删除
127.0.0.1:6379> zremrangebyrank salary 1 2
(integer) 2
127.0.0.1:6379> zrange salary 0 -1
1) "dandan"
​
zremrangebyscore key min max  # 根据分数区间【10,30】删除成员
127.0.0.1:6379> zremrangebyscore salary 10 30
(integer) 2
127.0.0.1:6379> zrange salary 0 -1
1) "liuyang"
2) "dandan"

更新有序集合

zincrby key increment member  # 对指定成员的分数加上增量 increment
127.0.0.1:6379> zincrby salary 300 Jim  # 给员工Jim涨300元薪资 
"10300"

查询有序集合

zcard key #有序集合的所有成员数

zcount key min max  # 统计在指定分数区间的成员数

​zrank key member  # 返回指定成员的排名
​
zrevrank key member  #分值降序排序后的 排名
​
zscore key member  # 返回成员的分数值
​
zrange key start stop [WITHSCORES]  # 返回有序集合指定索引区间内的成员
​
zrevrange key start stop [WITHSCORES]  # 分值降序后获取索引区间的成员

zrangebyscore key min max [WITHSCORES] [LIMIT]  # 返回指定分数区间内的成员

zrevrangebyscore key max min [withscores]  # 返回有序集中指定分数区间内的成员,分数从高到低

有序集合练习

成员的分数
查询所有成员
 返回指定成员的排名
分值降序排序后的 排名
 查询指定成员的薪资
返回有序集合指定索引区间内的成员(及薪资)
查询所有员工以及对应得薪资
查询所有员工以及对应得薪资,按照薪资降序展示 

127.0.0.1:6379> zadd salary 10000 Jim 8000 Tom 12000 JiMi 10000 Hake
(integer) 1
127.0.0.1:6379> zcard salary  
(integer) 4
127.0.0.1:6379> zrank salary Tom  
(integer) 0
127.0.0.1:6379> zrevrank salary Tom  
(integer) 2
127.0.0.1:6379> zscore salary Tom  
"8000"
127.0.0.1:6379> zrange salary 0 -1
1) "Tom"
2) "Jim"
127.0.0.1:6379> zrange salary 0 -1 withscores  
1) "Tom"
2) "8000"
3) "Jim"
4) "10300"
127.0.0.1:6379> zrevrange salary 0 -1 withscores  
1) "JiMi"
2) "12000"
3) "Jim"
4) "10300"
5) "Tom"
6) "8000"
127.0.0.1:6379> zrangebyscore salary 8000 20000  
1) "Tom"
2) "Hake"
3) "Jim"
4) "JiMi"
127.0.0.1:6379> zrangebyscore salary 8000 20000 limit 2 1 withscores  
1) "Jim"
2) "10300"

127.0.0.1:6379> zrevrangebyscore salary 20000 8000 
1) "JiMi"
2) "Jim"
3) "Tom"
127.0.0.1:6379> zrevrangebyscore salary 20000 8000 limit 2 1 withscores  
1) "Tom"
2) "8000"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值