01 redis 基础入门

课程学习地址:
https://www.bilibili.com/video/BV1S54y1R7SB?p=23
中间手册地址:
http://www.redis.cn/

介绍

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

特点

redis与memcache比较

1.存储类型:m string r:字哈链俩集合,空基bitmaps
2.持久化:m 内存 r:内存/硬盘
3.存在大小 一个键m:1M r:1G

适用场景

redis 核心配置说明

daemonize:#是否以后台守护进程方式运行

pidfile:#pid 文件位置

port:#监听的端口号

timeout:#请求超时时间

loglevel:#log 信息级别,总共支持四个级别:debug、verbose、notice、 默认为 verbose

logfile:#默认为标准输出(stdout) ,如果配置为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/

databases:#开启数据库的数量。使用“SELECT 库 ID”方式切换操作各个数据库

save * *:#保存快照的频率,第一个*表示多长时间,第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。

rdbcompression:#保存快照是否使用压缩

dbfilename:#数据快照文件名(只是文件名,不包括目录) 。默认值为 dump.rdb

dir:#数据快照的保存目录(这个是目录)

requirepass:#设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需 要通过 AUTH <password>命令提供密码,默认关闭

Redis 对key的通用操作命令

常用命令

key是一个字符串,通过key获取redis中保存的数据

key所涉及的操作

对于key自生状态的相关操作,例如:删除,判定存在,获取类型等

对于key有效性控制的相关操作,例如:有效期设定,判断是否有效,有效状态的切换等

对于key快速查询操作,例如:按指定策略查询key

key基本操作

删除指定key: del key

获取key是否存在:exists key

获取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

    查询模式规则

        *:匹配任意数量的任意字符

        ?:匹配一个任意符号

        []:匹配一个指定符号

key的其他操作

    为key改名

        rename key newkey

        renamenx key newkey

    对所有key排序

        sort

    删除key

        del key1 key2 ... keyn

    其他key的通用操作

        help @generic

127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name haima
OK
127.0.0.1:6379> set age 19 # 设置键值
OK
127.0.0.1:6379> get name # 获取键值
"haima"
127.0.0.1:6379> dbsize # 返回当前库里所有的key的数量
(integer) 2
127.0.0.1:6379> move age 2 # 移动某一个键到其他仓库
(integer) 1
127.0.0.1:6379> exists age #判断key是否存在
(integer) 0
127.0.0.1:6379> select 2 #选择库  有0-15个库
OK
127.0.0.1:6379[2]> get age
"19"
127.0.0.1:6379[2]> select 0  #选择库  有0-15个库
OK
127.0.0.1:6379> keys * # keys* 获取所有的key 慎用
1) "name"
127.0.0.1:6379> KEYS na* #获取以na开头的key *通配任意多个
1) "name"
127.0.0.1:6379> KEYS *ame*
1) "name"
127.0.0.1:6379> keys a?? # ?通配单个字符
1) "age"
redis 127.0.0.1:6379> keys ag[eaw]
"age"
127.0.0.1:6379> exists name # 查key是否存在 
(integer) 1
127.0.0.1:6379> type age # 获取key值的类型
string
127.0.0.1:6379> set a 11
OK
127.0.0.1:6379> get a
"11"
127.0.0.1:6379> del a # 删除key
(integer) 1
127.0.0.1:6379> get a
(nil)
127.0.0.1:6379> expire nme 10 #作用:设置key 10秒后过期
(integer) 1
127.0.0.1:6379> ttl nme # 查看key还有多久过期
(integer) 6
127.0.0.1:6379> ttl age # -1 为永久 
(integer) -1
127.0.0.1:6379> ttl b  # -2 key不存在
(integer) -2

127.0.0.1:6379> persist nme # 作用:把指定key设置为永久有效

127.0.0.1:6379> randomkey # 从当前数据库中随机返回一个 key 。 
"name"
127.0.0.1:6379> randomkey
"age"

127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> rename name name2 # 修改 key 的名称 如果新key已经存在,会覆盖key里的值
OK
127.0.0.1:6379> keys *
1) "name2"
2) "age"
127.0.0.1:6379> renamenx name2 name # 仅当 newkey 不存在时,将 key 改名为 newkey 。
(integer) 1
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> renamenx name age # 如果新key已经存在了,就修改不成功
(integer) 0


127.0.0.1:6379> flushdb #删除当前数据库
OK
127.0.0.1:6379> flushall #删除所有库中的数据
OK

字符串

基本介绍:

命名规范:

常用命令

127.0.0.1:6379> set key1 v1 设置key值
OK
127.0.0.1:6379> get key1 # 获key值
"v1"
127.0.0.1:6379> keys * # 获取所有的key
1) "key1"
127.0.0.1:6379> exists key1 # 判断key是否存在
(integer) 1
127.0.0.1:6379> append key1 hello # append:在尾部追加值,格式是:append key值 追加的值
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> strlen key1 # 获取key值的长度
(integer) 7
127.0.0.1:6379> append key1 ,haima  #append:在尾部追加值,格式是:append key值 追加的值
(integer) 13
127.0.0.1:6379> strlen key1
(integer) 13
127.0.0.1:6379> get key1
"v1hello,haima"
# i++  
# 步长 i+=

127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views # 自增1 浏览量变为1
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> decr views  # 自减1 浏览量变为1
(integer) 0
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incrby views 10 # 自增 步长10 
(integer) 10
127.0.0.1:6379> get views
"10"
127.0.0.1:6379> decrby views 5 # 自减 步长5 
(integer) 5
127.0.0.1:6379> get views
"5"

# 客符串范围 range
127.0.0.1:6379> set key1 hello,haima
OK
127.0.0.1:6379> get key1
"hello,haima"
127.0.0.1:6379> getrange key1 0 3 # 截取范围[0,3]
"hell"
127.0.0.1:6379> getrange key1 0 -1 # 获取全部的字符串,和get key是一样的
"hello,haima" 

应用场景:
1.字符串
2.对象字符串 # set user:1 {name:zhangsan,age:30}
3.这里的key是一个巧妙的设计: user:{id}:{filed} #如此设计在redis中是完全ok的

127.0.0.1:6379> mset user:1:name haima user:1:age 30
OK
127.0.0.1:6379> mget user:1:name user:1:age    
1) "haima"
2) "30"

Hash类型

Map集合,key-map!时候这个值是一个map集合!本质和String类型没有太大区别,还是一个简单的key-value!

命令:

存/取/删除操作:

##############################################################################################
127.0.0.1:6379> hset user01 name haima # 设置
(integer) 1
127.0.0.1:6379> hget user01 name # 获取
"haima"
127.0.0.1:6379> hmset user01 gender nan gender 30  # 批量设置
OK
127.0.0.1:6379> hmget user01 name gender gender # 批量获取
1) "haima"
2) "nan"
3) "30"
127.0.0.1:6379> hdel user01 denger # 删除指定的map里的key
(integer) 1
127.0.0.1:6379> hgetall user01  # 获取所有的map 键值
1) "name"
2) "haima"
3) "gender"
4) "nan"

##############################################################################################
# hlen # 获取map表的字段数量
# hexists # 判断健是否存在

127.0.0.1:6379> hmset user1 name haima denger nan
OK
127.0.0.1:6379> hgetall user1
1) "name"
2) "haima"
3) "denger"
4) "nan"
127.0.0.1:6379> hlen user1 # 获取map表的字段数量
(integer) 2

127.0.0.1:6379> hexists user1 name # 判断健是否存在 返回 1:存在 0:不存在
(integer) 1
127.0.0.1:6379> hexists user1 age
(integer) 0

##############################################################################################
# 只获取所有的field
# 只获取所有的value
127.0.0.1:6379> hkeys user1
1) "name"
2) "denger"
127.0.0.1:6379> hvals user1
1) "haima"
2) "nan"

##############################################################################################
incr 正int/负int
127.0.0.1:6379> hset user1 age 30 # 指定增量
(integer) 1
127.0.0.1:6379> hincrby user1 age 2
(integer) 32
127.0.0.1:6379> hincrby user1 age -1
(integer) 31
127.0.0.1:6379> hsetnx user1 height 170  # 如果key不存在,添加成功
(integer) 1
127.0.0.1:6379> hsetnx user1 height 171  # 如果key存在,添加失败
(integer) 0

使用场景:

hash适合对象的存储,string适合字符串的存储

保存经常变更的信息(用户信息):
hmset user:1 name haima age 30

更多文章
posted @ 2020-09-18 08:55  HaimaBlog  阅读(111)  评论(0编辑  收藏  举报