开课吧之Redis 学习笔记一
学习目标:
1、Redis是什么?
2、Redis的主要应用场景有哪些?
3、Redis单机安装要掌握?
4、Redis数据类型有哪些?
5、Redis的数据类型各自的使用场景及注意事项是什么?
6、Redis的消息模式是如何实现的?
7、Redis的事务是如何实现的?
1、Redis是什么?
2、Redis应用场景
3、Redis单机版安装配置
参考文章:Windows 安装Redis 单机版
4、Redis数据类型
4.1 String 类型
4.1.1 赋值
语法:
SET key value
示例 :
127.0.0.1:6379> set test 123
OK
4.1.2 取值
语法:
GET key
示例 :
127.0.0.1:6379> get test
"123“
4.1.3 取值并赋值
语法:
GETSET key value
示例 :
127.0.0.1:6379> getset s2 222
"111"
127.0.0.1:6379> get s2
"222"
4.1.4 数值增减
注意:
1、 当value为整数数据时,才能使用以下命令操作数值的增减。
2、 数值递增都是【原子】操作。
3、 redis中的每一个单独的命令都是原子性操作。当多个命令一起执行的时候,就不能保证原子性,不过我们可以使
INCR key
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
INCRBY key increment
示例 :
127.0.0.1:6379> incrby num 2
(integer) 5
127.0.0.1:6379> incrby num 2
(integer) 7
127.0.0.1:6379> incrby num 2
(integer) 9
DECR key
示例 :
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
DECRBY key decrement
示例 :
127.0.0.1:6379> decr num
(integer) 6
127.0.0.1:6379> decr num
(integer) 5
127.0.0.1:6379> decrby num 3
(integer) 2
127.0.0.1:6379> decrby num 3
(integer) -1
setnx key value
redis> EXISTS job # job 不存在
(integer) 0
redis> SETNX job "programmer" # job 设置成功
(integer) 1
redis> SETNX job "code-farmer" # 尝试覆盖 job ,失败
(integer) 0
redis> GET job # 没有被覆盖
"programmer"
向尾部追加值:
APPEND key value
示例 :
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str " world!"
(integer) 12
127.0.0.1:6379> get str
"hello world!"
STRLEN key
示例 :
127.0.0.1:6379> strlen str
(integer) 0
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> strlen str
(integer) 5
MSET key value [key value …]
或
MGET key [key …]
示例 :
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> mget k1 k3
1) "v1"
2) "v3"
192.168.101.3:7003> INCR items:id
(integer) 2
192.168.101.3:7003> INCR items:id
(integer) 3
4.2 Hash 类型

HSET key field value
127.0.0.1:6379> hset user username zhangsan
(integer) 1
HMSET key field value [field value ...]
127.0.0.1:6379> hmset user age 20 username lisi
OK
HSETNX key field value
示例:
127.0.0.1:6379> hsetnx user age 30 # 如果user中没有age字段则设置age值为30,否则不做任何操作 (integer) 0
4.2.2 取值
获取一个字段值
语法:
HGET key field
示例:
127.0.0.1:6379> hget user username
"zhangsan“
HMGET key field [field ...]
示例:
127.0.0.1:6379> hmget user age username
1) "20"
2) "lisi"
HGETALL key
示例:
127.0.0.1:6379> hgetall user
1) "age"
2) "20"
3) "username"
4) "lisi"
4.2.3 删除字段
可以删除一个或多个字段,返回值是被删除的字段个数
语法:
HDEL key field [field ...]
示例:
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hdel user age name
(integer) 0
127.0.0.1:6379> hdel user age username
(integer) 1
4.2.4 增加数字
语法:
HINCRBY key field increment
示例:
127.0.0.1:6379> hincrby user age 2 # 将用户的年龄加2
(integer) 22
127.0.0.1:6379> hget user age # 获取用户的年龄
"22“
4.2.5 其他命令
HEXISTS key field
示例:
127.0.0.1:6379> hexists user age #查看user中是否有age字段
(integer) 1
127.0.0.1:6379> hexists user name #查看user中是否有name字段
(integer) 0
HKEYS key
HVALS key
示例:
OK127.0.0.1:6379> hkeys user
1) "age"
2) "name"
127.0.0.1:6379> hvals user
1) "20"
2) "lisi"
HLEN key
示例:
127.0.0.1:6379> hlen user
(integer) 2
hgetall key
string类型和hash类型的区别
【商品id、商品名称、商品描述、商品库存、商品好评】
商品ID为1001的信息在 Redis中的key为:[items:1001]
192.168.101.3:7003> HMSET items:1001 id 3 name apple price 999.9
OK
192.168.101.3:7003> HGET items:1001 id
"3"
192.168.101.3:7003> HGETALL items:1001
1) "id"
2) "3"
3) "name"
4) "apple"
5) "price"
6) "999.9"
4.3 List类型

LPUSH key value [value ...]
RPUSH key value [value ...]
示例:
127.0.0.1:6379> lpush list:1 1 2 3
(integer) 3
127.0.0.1:6379> rpush list:1 4 5 6
(integer) 3
4.3.2 取值(LRANGE )
功能描述:获取列表中的某一片段。将返回`start`、`stop`之间的所有元素(包含两端的元素),索引从`0`开始。索引可以 是负数,如:“`-1`”代表最后边的一个元素。
LRANGE key start stop
示例:
127.0.0.1:6379> lrange list:1 0 2
1) "2"
2) "1"
3) "4
4.3.3弹出(LRANGE )
LPOP key
RPOP key
示例:
127.0.0.1:6379>lpop list:1
"3“
127.0.0.1:6379>rpop list:1
"6“
4.3.4 LLEN
功能描述:获取列表中元素的个数
语法:
llen key
示例:
127.0.0.1:6379> llen list:1
(integer) 2
4.3.5 其他命令
LREM:删除列表中指定个数的值
注意:LREM 命令会删除列表中前 count 个值为 value 的元素,返回实际删除的元素个数。根据 count 值的不同,该命令的执行方式会有所不同.
LREM key count value
LINDEX key index
示例:
127.0.0.1:6379>lindex l:list 2
"1"
LSET:设置指定索引的元素值
语法:
LSET key index value
示例:
127.0.0.1:6379> lset l:list 2 2
OK
127.0.0.1:6379> lrange l:list 0 -1
1) "6"
2) "5"
3) "2"
4) "2"
LTRIM key start stop
示例:
127.0.0.1:6379> lrange l:list 0 -1
1) "6"
2) "5"
3) "0"
4) "2"
127.0.0.1:6379> ltrim l:list 0 2
OK
127.0.0.1:6379> lrange l:list 0 -1
1) "6"
2) "5"
3) "0"
LINSERT key BEFORE|AFTER pivot value
示例:
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> linsert list after 3 4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "4"
3) "2"
4) "1"
RPOPLPUSH :将元素从一个列表转移到另一个列表中
语法:
RPOPLPUSH source destination
示例:
127.0.0.1:6379> rpoplpush list newlist
"1"
127.0.0.1:6379> lrange newlist 0 -1
1) "1"
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "4"
3) "2"
192.168.101.3:7001> LPUSH items:comment:1001 '{"id":1,"name":"商品不错,很 好!!","date":1430295077289}'
4.4 set类型

SADD key member [member ...]
SREM key member [member ...]
示例:
127.0.0.1:6379> sadd set a b c
(integer) 3
127.0.0.1:6379> sadd set a
(integer) 0
127.0.0.1:6379> srem set c d
(integer) 1
4.4.2 SMEMBERS
功能描述:获得集合中的所有元素
语法:
SMEMBERS key
示例:
127.0.0.1:6379> smembers set
1) "b"
2) "a”
4.4.3 SISMEMBER
功能描述:判断元素是否在集合中
语法:
SISMEMBER key member
示例:
127.0.0.1:6379>sismember set a
(integer) 1
127.0.0.1:6379>sismember set h
(integer) 0
4.4.4 集合运算
SDIFF:集合的差集运算 A-B:属于A并且不属于B的元素构成的集合。
语法:
SDIFF key [key ...]
示例:
127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sdiff setA setB
1) "1"
127.0.0.1:6379> sdiff setB setA
1) "4"
SINTER key [key ...]
示例:
127.0.0.1:6379> sinter setA setB
1) "2"
2) "3"
SUNION key [key ...]
示例:
127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"
4.4.5 其他命令
SCARD:获得集合中元素的个数
SCARD key
示例:
127.0.0.1:6379> smembers setA
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> scard setA
(integer) 3
SPOP key
示例:
127.0.0.1:6379> spop setA
"1“
4.5 zset类型
ZADD key score member [score member ...]
示例:
127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu
(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi
(integer) 0
4.5.2 ZRANGE/ZREVRANGE
功能描述: 获得排名在某个范围的元素列表。
- ZRANGE:按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]
示例:
127.0.0.1:6379> zrange scoreboard 0 2
1) "zhangsan"
2) "wangwu"
3) "lisi“
127.0.0.1:6379> zrevrange scoreboard 0 2
1) " lisi "
2) "wangwu"
3) " zhangsan “
127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES
1) "zhangsan"
2) "80"
3) "wangwu"
4) "94"
4.5.3 ZSCORE
ZSCORE key member
示例:
127.0.0.1:6379> zscore scoreboard lisi
"97"
4.5.4 ZREM
功能描述:删除元素。
移除有序集合key中的一个或多个成员,不存在的成员将被忽略。
ZREM key member [member ...] 1
127.0.0.1:6379> zrem scoreboard lisi
(integer) 1
4.5.5 其他命令
ZRANGEBYSCORE:获得指定分数范围的元素。
语法:
ZRANGEBYSCORE key min max [WITHSCORES]
示例:
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 90 97 WITHSCORES
1) "wangwu"
2) "94"
3) "lisi"
4) "97"
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 70 100 limit 1 2
1) "wangwu"
2) "lisi"
ZINCRBY key increment member
示例:
127.0.0.1:6379> ZINCRBY scoreboard 4 lisi
"101“
ZCARD key
示例:
127.0.0.1:6379> ZCARD scoreboard
(integer) 3
ZCOUNT key min max
127.0.0.1:6379> ZCOUNT scoreboard 80 90
(integer) 1
ZREMRANGEBYRANK key start stop
示例:
127.0.0.1:6379> ZREMRANGEBYRANK scoreboard 0 1
(integer) 2
127.0.0.1:6379> ZRANGE scoreboard 0 -1
1) "lisi"
ZREMRANGEBYSCORE:按照分数范围删除元素
语法:
ZREMRANGEBYSCORE key min max
示例:
127.0.0.1:6379> zadd scoreboard 84 zhangsan
(integer) 1
127.0.0.1:6379> ZREMRANGEBYSCORE scoreboard 80 100
(integer) 1
ZRANK key member
ZREVRANK key member
示例:
127.0.0.1:6379> ZRANK scoreboard lisi
(integer) 0
127.0.0.1:6379> ZREVRANK scoreboard zhangsan
(integer) 1
设计:定义商品销售排行榜(sorted set集合),Key为items:sellsort,分数为商品销售量。
写入商品销售量:
商品编号 1001 的销量是 9 ,商品编号 1002 的销量是 10
192.168.101.3:7007> ZADD items:sellsort 9 1001 10 1002 1
192.168.101.3:7001> ZINCRBY items:sellsort 1 1001 1
192.168.101.3:7001> ZREVRANGE items:sellsort 0 9 withscores 1
5、Redis通用命令
5.1 Keys
功能描述:返回满足给定pattern 的所有key
语法:
keys pattern
示例:
redis 127.0.0.1:6379> keys mylist*
1) "mylist"
2) "mylist5"
3) "mylist6"
4) "mylist7"
5) "mylist8"
5.2 del
语法:
DEL key
示例:
127.0.0.1:6379> del test
(integer) 1
5.3 exists
功能描述:确认一个key 是否存在
语法:
exists key
示例:从结果来看,数据库中不存在 HongWan 这个 key ,但是 age 这个 key 是存在的
redis 127.0.0.1:6379> exists HongWan
(integer) 0
redis 127.0.0.1:6379> exists age
(integer) 1
redis 127.0.0.1:6379>
5.4 expire(重点)
功能描述:Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。
语法:
EXPIRE key seconds 设置key的生存时间(单位:秒)key在多少秒后会自动删除
TTL key 查看key生于的生存时间
PERSIST key 清除生存时间
PEXPIRE key milliseconds 生存时间设置单位为:毫秒
示例:
192.168.101.3:7002> set test 1 #设置test的值为1
OK
192.168.101.3:7002> get test #获取test的值
"1"
192.168.101.3:7002> EXPIRE test 5 #设置test的生存时间为5秒
(integer) 1
192.168.101.3:7002> TTL test #查看test的生于生成时间还有1秒删除
(integer) 1
192.168.101.3:7002> TTL test
(integer) -2
192.168.101.3:7002> get test #获取test的值,已经删除
(nil)
5.5 rename
功能描述:重命名key
语法:
rename oldkey newkey
示例:age 成功的被我们改名为 age_new 了
redis 127.0.0.1:6379[1]> keys *
1) "age"
redis 127.0.0.1:6379[1]> rename age age_new
OK
redis 127.0.0.1:6379[1]> keys *
1) "age_new"
5.6 type
功能描述:显示指定key的数据类型
语法:
type key
示例:这个方法可以非常简单的判断出值的类型
redis 127.0.0.1:6379> type addr
string
redis 127.0.0.1:6379> type myzset2
zset
redis 127.0.0.1:6379> type mylist
list
6、Redis消息模式
6.1 队列模式
6.2 发布订阅模式
订阅消息(subscribe)
示例: 客户端定义指定通道的消息
subscribe kkb-channel

publish kkb-channel “我是灭霸詹”

7、Redis 事务
7.1 Redis 事务介绍
7.2 事务命令
MULTI
功能描述:用于标记事务块的开始。
Redis会将后续的命令逐个放入队列中,然后使用EXEC命令原子化地执行这个命令序列。
语法:
multi
EXEC
功能描述:在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态
语法:
exec
DISCARD
功能描述:清除所有先前在一个事务中放入队列的命令,然后恢复正常的连接状态。
语法:
discard
WATCH
功能描述:当某个[事务需要按条件执行]时,就要使用这个命令将给定的[键设置为受监控]的状态。
语法:
watch key [key…]
unwatch
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set s1 111
QUEUED
127.0.0.1:6379> hset set1 name zhangsan
QUEUED
127.0.0.1:6379> exec
1) OK
2) (integer) 1
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set s2 222
QUEUED
127.0.0.1:6379> hset set2 age 20
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> exec
(error) ERR EXEC without MULTI
127.0.0.1:6379> watch s1
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set s1 555
QUEUED
127.0.0.1:6379> exec # 此时在没有exec之前,通过另一个命令窗口对监控的s1字段进行修改
(nil)
127.0.0.1:6379> get s1
111


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。