为何要学习并运用Redis?Redis有什么好处?咱们步入Redis的海洋,初识Redis。html
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它能够用做数据库、缓存和消息中间件。(来自官方的官方的解释!)redis
1.高频访问docker
2.热点数据shell
3.固定不变的数据数据库
4.读写比列读操做较高的数据缓存
注:等等,还有更多的运用场景,这是Redis特性所决定的!bash
1.数据库数据结构
2.缓存app
3.消息中间件分布式
4.注册中心
5.分布式锁 (另外一种实现方式:zookeeper)
Redis支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和地理空间(geospatial) 索引半径查询。
字符串
一般用SET command 和 GET command来设置和获取字符串值
例:
> set mykey somevalue OK > get mykey "somevalue"
参数:
**ex ** : 过时时间(秒) nx : 当key存在时SET会失败,或相反的,当key不存在时它只会成功。
1.判断是否存在
exists
exists mykey
返回1或0标识给定key的值是否存在
2.删除
del
del mykey
返回1或0标识值是被删除(值存在)或者没被删除(key对应的值不存在)
3.查看存储类型
type
type myket
返回key对应的值的存储类型
expire
expire key 5
设置超时时间,也可再次强调改变超时时间
使用 PERSIST 命令去除超时时间
参数
ex set key 100 ex 10
在建立值的时候设置超时时间
ttl
ttl key
查看key对应的值剩余存活时间
incr
incr mykey
将key 转换为 整型
散列
数据结构相似于Map<Object,Map<Object,Object>>
看起来就像一个 “hash” 的样子,由键值对组成
hmset
hmset person name admin age 10
设置 hash 中的多个域
hget
hget person age
取回单个域
例:
> hmset person name admin age 10 OK > hget person age "10"
列表
lpush
rpush mylist A
向list的左边(头部)添加一个新元素
rpush
lpush mylist first
向list的右边(尾部)添加一个新元素
lrange
lrange mylist 0 -1
从list中取出必定范围的元素 注: 带有两个索引,必定范围的第一个和最后一个元素 从尾部开始计数,所以-1表示最后一个元素,-2表示list中的倒数第二个元素,以此类推。
rpop
rpop mylist
从list中删除元素并同时返回删除的值。能够在左边或右边操做。
例:
> lpush list 1 (integer) 1 > rpush list 3 (integer) 2 > lrange list 0 10 6) "1" 7) "3" > rpop list "3"
集合
更适合不重复的数据类型
sadd
sadd myset 1 2 3
把新的元素添加到 set 中
smembers
smembers myset
查看
例:
127.0.0.1:6379> sadd myset 1 2 3 (integer) 3 127.0.0.1:6379> smembers myset 1) "1" 2) "2" 3) "3"
MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务相关的命令。事务能够一次执行多个命令, 而且带有如下两个重要的保证:
MULTI
用于开启一个事务,它老是返回 OK
EXEC
负责触发并执行事务中的全部命令
例:
127.0.0.1:6379> MULTI OK 127.0.0.1:6379> set name 10 QUEUED 127.0.0.1:6379> set name a QUEUED 127.0.0.1:6379> incr name QUEUED 127.0.0.1:6379> exec 1) OK 2) OK 3) (error) ERR value is not an integer or out of range
DISCARD
事务放弃, 事务队列会被清空, 而且客户端会从事务状态中退出
例:
127.0.0.1:6379> multi OK 127.0.0.1:6379> set name 100 QUEUED 127.0.0.1:6379> discard OK 127.0.0.1:6379> get name "a"
WATCH
使得 EXEC 命令须要有条件地执行 能够为 Redis 事务提供 check-and-set (CAS)行为 监控某些值,防止该值在十五提交过程当中被其余客户端改变
WATCH mykey val = GET mykey val = val + 1 MULTI SET mykey $val EXEC # 若值为nil 说明修改失败
入队前
大部分客户端都会中止并取消这个事务
入队后
命令可能在 EXEC 调用以后失败。 事务正常执行,不会影响已经入队的结果
Redis 命令只会由于错误的语法而失败(而且这些问题不能在入队时发现),或是命令用在了错误类型的键上面
拉去 Redis 5.0.4镜像
docker pull redis:5.0.4
启动 Redis
docker run --name redis -p 6379:6379 redis:5.0.4 redis-server --appendonly yes
进入Redis 容器内部
docker exec -it redis /bin/bash
链接服务端 redis-cli
参数 -h hostname -p port -n db(0~15)Database number