Redis期末复习(一)

安装redis

启动redis

在安装目录的bin目录下启动redis服务器
[root@localhost ~]# cd /usr/local/redis-3.0.0/bin

[root@localhost bin]# ./redis-server redis.conf
[root@localhost bin]# ./redis-cli -h 127.0.0.0 -p 6379

如果不指定端口号也可以

[root@hadoop bin]# ./redis-cli
127.0.0.1:6379> quit // 退出

关闭redis

[root@localhost bin]# ./redis-cli shutdown

Redis数据类型

Redis中存储数据是通过key-value存储的,对于value类型有以下几种:

  • 字符串
  • Hash类型
  • List
  • Set
  • SortedSet(zset)

在redis中的命令语句中,命令是忽略大小写的,但key是不忽略大小写的

String类型

  1. 赋值
127.0.0.1:6379>set test 123
  1. 取值
127.0.0.1:6379>get test 
  1. 设置/获取多个键值对
127.0.0.1:6379>mset k1 v1 k2 v2 k3 v3
127.0.0.1:6379>mget k1 k2 k3
  1. 取值并赋值
    127.0.0.1:6379>getset key value
127.0.0.1:6379>getset k1 111
127.0.0.1:6379>get k1
  1. 删除
127.0.0.1:6379>del k1
  1. 数据增减
    incr num 或者 incrby num 1
    decr num 或者decrby num 1

  2. 向尾部追加值
    APPEND的作用是向键值的末尾追加value。如果键不存在则将该键
    的值设置为value,即相当于SET key value。返回值是追加后字符串的总长度

    append key value

127.0.0.1:6379>set str hello
127.0.0.1:6379>append str " world!"
# 12
127.0.0.1:6379>get str
# hello world!
  1. 获取字符串的长度
127.0.0.1:6379>set str hello
127.0.0.1:6379>strlen str
#5
  1. 应用到自增主键
    商品编号、订单号采用string的递增数字特性生成。2024618001
    定义商品编号key:productId
127.0.0.1:6379>set productId 2024618001
127.0.0.1:6379>incr productId
#2024618002

Hash类型

假设有User对象以JSON序列化的形式存储到Redis中,User对象有id,username,password,age等属性,存储过程如下:

{
id : 1,
username: zhangsan
....
}

set user { Id : 1,username: zhangsan}
保存、更新:
User对象----->json(string) -------> redis
如果在业务上只是更新age属性,其他的属性并不做更新我应该怎么做呢?如果仍然采用上边的方法在传输、处理时会造成资源浪费,下边讲的hash可以很好的解决这个问题。

redis hash介绍
hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其他类型。

  1. 赋值 hset user username zhangsan
    多字段赋值hmset user username lisi age 21 gender female city henan
    当字段不存在时赋值,类似HSET,区别在于如果字段存在,该命令不执行任何操作hsetnx key field value
hsetnx user username lisi
  1. 取值
  • 一次只能获取一个字段值hget user username
  • 一次可以获取多个字段值hmget user username age gender city
  • 获取所有字段和字段值hgetall user
  1. 删除字段
    可以删除一个或多个字段,返回值是被删除的字段个数
    语法:HDEL key field [field …]
  • 删除一个字段hdel user username
  • 删除多个字段hdel user age gender city
  1. 增加数值
hincrby user age 2
# 23
hget user age
#23
  1. 判断字段是否存在
    语法:hexists key field
    查看user中是否有age字段hexists user age
    查看user中是否有username字段hexists user username

  2. 只获取字段名或字段值

  • 只获取字段名hkeys user
  • 只获取字段值hvals user
  1. 获取属性数量
hlen user
  1. 应用到存储商品信息
  • 商品字段
    【商品id、商品名称、商品描述、商品库存、商品好评】
  • 定义商品信息的key
    商品1001的信息在Redis中的key为:[items:1001]
  • 存储商品信息
hmset wahaha id 001 classname water price 2
  • 获取商品信息
hmget wahaha id classname
hgetall wahaha

List类型

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段
列表类型内部是使用双向链表(double linked list)实现的,所以获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。

  1. 命令
  • 向列表左边增加元素
    语法:lpush key value
lpush list 1 2 3
  • 向列表右边增加元素
    语法:rpush key value
rpush list a b c
  1. 查看列表
    LRANGE命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。
    lrange key start stop
lrange list 0 5 或者 lrange list 0 -1
  1. 从列表两端弹出元素
    LPOP命令从列表左边弹出一个元素,会分两步完成:
    第一步是将列表左边的元素从列表中移除
    第二步是返回被移除的元素值。
    语法:LPOP key RPOP key
lpop list 
#1
rpop list
#c
127.0.0.0:6379> lrange list 0 -1
1) "2"
2) "1"
3) "a"
4) "b"

  1. 获取列表中元素的个数
llen list
#4

5.获取/设置指定索引的元素值

  • 获取指定索引的元素值
lindex list 2
  • 设置指定索引的元素值
lset list 2 c
lrange list 0 -1 //查询所有
  1. 向列表中插入元素
    该命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。
    语法:linsert list before|after pivot value
lrange list 0 -1
linsert list after 3 4
  1. 将元素从一个列表转移到另一个列表中
    语法:rpoplpush list newlist
rpoplpush list newlist
lrange list 0 -1
lrange newlist 0 -1
  1. 应用到商品评价列表
lpush items:comment:1001 '{"id":1,"name":"商品不错,很
好!!","date":1430295077289}'

Set类型

集合中的数据是不重复且没有顺序。
集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在
Redis还提供了多个集合之间的交集、并集、差集的运算

  1. 命令
  • 增加/删除元素
sadd key1 1 2 3
sadd key1 4
srem key1 2 3
  • 获取集合中的所有元素
smembers key1
  • 判断元素是否在集合中
sismember key1 2
  • 查看键类型
type key1
  1. 运算命令
  • 集合的差集运算A-B
sadd setA 1 2 3
sadd setB 2 3 4
sdiff setA setB
sdiff setB setA
  • 集合的交集运算A∩B
sinter setA setB
  • 集合的并集运算A∪B
sunion setA setB
  1. 其他命令
  • 获取集合中元素的个数
smembers setA
scard setA
  • 从集合中弹出一个元素

注意:由于集合是无序的,所有 SPOP 命令会从集合中随机选择一个元素弹出

spop setA

SortedSet类型zset

在集合类型的基础上,有序集合类型为集合中的每个元素都关联一个分数,这使得我们不仅可以完成
插入、删除判断元素是否存在在集合中,还能够获得分数最高或最低的前 N 个元素、获取指定分数范围内的元素等与分数有关的操作。
在某些方面有序集合列表类型有些相似

  1. 二者都是有序的。
  2. 二者都可以获得某一范围的元素。

二者也有着很大区别

  1. 列表类型是通过链表实现的,获取靠近两端的数据度极快,而当元素增多后,访问中间数据的速度会变慢。
  2. 有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。
  3. 列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现)
  4. 有序集合要比列表类型更耗内存。

命令

  • 增加元素
    向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素
zadd scoreboard 90 zhangsan 89 lisi 80 zhaoliu
  • 获取元素的分数
zscore scoreboard lisi
  • 删除元素
zrem scoreboard lisi
  • 获得排名在某个范围的元素列表
zrange scoreboard 0 1
zrevrange scoreboard 0 -1
#如果需要获得元素的分数的可以在命令尾部加上*WITHSCORES*参数
zrange scoreboard 0 1 withscores
  • 获取指定分数范围的元素
zrangebyscore scoreboard 80 90
# 语法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT off set count]
zrangebyscore scoreboard 80 90 limit 1 2
  • 增加某个元素的分数
zincrby scoreboard 6 zhangsan
  • 获取集合中元素的数量
zcard scoreboard
  • 获取指定分数范围内的元素个数
zcount scoreboard 90 100
  • 按照排名范围删除元素
zremrangebyrank scoreboard 0 0
  • 按照分数范围删除元素
zremrangebyscore scoreboard 90 100 limit 1 2
  • 获取元素的排名
zrank scoreboard zhangsan
zrevrank scoreboard zhangsan
  • 应用到商品销售排行榜
zadd goods:001 9 1001 10 1002
zincrby good:001 3 1001
zrange goos:001 0 9 withscores
  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值