成神之路之Redis从头开始学习(一)

一 Redis介绍

1.1 引言

  1. 由于用户量增大,请求数量也随之增大,数据库压力过大。
  2. 多台服务器之间,数据不同步。
  3. 多台服务器之间的锁,已经不存在互斥性了。

1.2 NoSQL

Redis就是一款NoSql

NoSQL -> 非关系型数据库 -> Not Only SQL

  1. key-value: Redis...
  2. 文档型:MongoDB,ElasticSearch,solr...
  3. 面向列:Hbase...
  4. 图形化:Neo4j...

NoSQL只是一种概念,泛指非关系型数据库,和关系型数据库做一个区分。

1.3 Redis介绍

有一位意大利人,在开发一款LLOOGG的统计页面,因为MySQL的性能不好,自己研发了一款非关系型数据库,并命名为Redis

Redis(Remote Dictionary Server)即远程字典服务,Redis是c语言编写的,是一款基于key-value的NoSQL,而且Redis是基于内存存储数据的,Redis还提供多种持久化机制,性能可以达到110000次/s读取数据已经810000次/s写入数据,Redis还提供了主从,哨兵以及集群的搭建方式,可以更方便的横向扩展和垂直扩展。

二 Redis安装

2.1-1 docker安装

docker镜像市场:http://hub.daocloud.io/

新建docker-compose.yml

version: '3.1'
services:
redis:
image: daocloud.io/library/redis:5.0.7
restart: always
container_name: redis
environment:
- TZ=Asia/Shanghai
ports:
- 6379:6379

使用docker-compose up命令下载安装启动。

2.1-2 虚拟机安装

#编译安装
##下载和编译
1. yum install wget #如没有wget,先安装wget
2. wget https://download.redis.io/releases/redis-5.0.9.tar.gz #下载redis源码包
3. tar xf redis-5.0.9.tar.gz #解压redis压缩包
4. cd redis-5.0.9
5. vi README.md #查看说明文档,里面有告诉我们怎么编译安装
6. make #尝试使用make命令进行编译,此时如果服务器没有gcc环境会报错
7. yum install gcc -y #安装gcc
8. make distclean #由于之前已经make了一次,需要先清理之前的make 
9. make #继续编译
#安装
10. make PREFIX=/opt/bigdata/redis5 install #指定安装目录进行安装
11 vi /etc/profile #添加环境变量
export REDIS_HOME=/opt/bigdata/redis5
export PATH=$PATH:$REDIS_HOME/bin
12 source /etc/profile 或者 . /etc/profile #使环境变量生效,source和.是一样的
#后台服务
13 cd utils #进入redis目录下面的utils目录
14 ./install_server.sh #执行安装后台服务脚本,按照提示输入信息即可完成后台服务安装,可多次执行,安装多个实例
# 通过系统命令可启动关闭redis
15 service reids_6379 start/status/stop (centos6.x) systemctl redis_6379 start/status/stop (centos7.x)

2.2 使用redis-cli连接Redis

#进入容器docker exec -it 容器id bash#在容器内使用客户端连接redis-cli

2.3 使用图形化界面连接Redis

下载地址:链接: https://pan.baidu.com/s/1Fujnmu4g8rgvSh6CsFYn8A 提取码: 1234

傻瓜式安装

三 Redis常用命令

3.1 Redis存储数据的结构

常用的5种数据结构

  • key-string:一个key对于一个值
  • key-hash:一个key对应一个Map
  • key-list:一个key对应一个列表
  • key-set:一个key对应一个集合
  • key-zset:一个key对应一个有序的集合

另外三种数据结构

HyperLogLog:计算近似值

GEO:地理位置

BIT:位图,一般存储的也是一个字符串,存储的是一个byte[]

五种常用的存储数据结构图

key-string:最常用,一般用于存储一个值

key-hash:存储一个对象数据

key-list:使用list结构实现栈和队列结构

key-set:交集,差集和并集的操作

key-zset:排行榜,积分存储等操作

3.2 string常用命令

文档:http://redisdoc.com/string/index.html#

# 1、添加值
set key value

#2、取值
get key

#3、批量操作
mset key value [key value...]
mget key [key...]


#4、自增命令(自增1)
incr key

#5、自减命令(自减1)
decr key

#6、自增或自减指定数量
incrby key increment
decrby key increment


#7、设置值的同时设置生存时间(每次向redis中添加数据时,尽量都设置生存时间)
setex key second value

#8、设置值,如果当前key不存在的话(如果这个key存在,什么事都不做,如果这个key不存在,和set命令一样)
setnx key value

#9、在key对应的value后,追加内容
append key value

#10、查看value字符串的长度
strlen key

3.3 hash常用命令

#1、存储数据
hset key field value

#2、获取数据
hget key field

#3、批量操作
hmset key field value [field value ...]
hmget key field [field ...]


#4、自增(指定自增的值)
hincrby key field increment


#5、设置值(如果key-field不存在,那么就正常添加,如果存在,什么事都不做)
hsetnx key field value

#6、检查field是否存在
hexists key field 

#7、删除key对应的某个或多个field
hdel key field [field...]


#8、获取当前hash结构中的全部field和value
hgetall key

#9、获取当前hash结构中的全部field
hkeys key

#10、获取当前hash结构中的全部value
hvals key

#11、获取当前hash结构中field的数量
hlen key

3.4 list常用命令

#1、存储数据(从左侧插入数据,从右侧插入数据)
lpush key value [value...]
rpush key value [value...]

#2、存储数据(如果key不存在,什么事都不做,如果key存在,但是不是list机构,什么都不做)
lpushx key value
rpushx key value

#3、修改数据(修改指定索引位置的值,如果index超出整个列表的长度会失败)
lset key index value


#4、弹栈方式获取数据(左侧/右侧弹出数据)
lpop key
rpop key

#5、获取指定索引范围的数据(start从0开始,stop输入-1,代表最后一个,-2代表倒数第二部)
lrange key start stop

#6、获取指定索引位置的数据
lindex key index

#7、获取整个列表的长度
llen key


#8、删除列表中的数据(他是删除当前列表中的count个value值,count>0从左侧向右侧删除,count<0从右侧向左侧删除),count=0,删除列表全部的value
lrem key count value

#9、保留列表中的数据(保留指定范围内的数据,超过整个索引范围被移除掉)
ltrim key start stop

#10、将一个列表中最后的一个数据,插入到另外一个列表的头部位置
rpoplpush list1 list2

3.5 set常用命令

#1、存储数据
sadd key member [member...]

#2、获取数据(获取全部数据)
smembers key

#3、随机获取一个数据(获取的同时移除数据,count默认为1,代表弹出数据的数量)
spop key [count]


#4、交集(取多个set集合交集)
sinter set1 set2...

#5、并集(获取全部集合中的数据)
sunion set1 set2...

#6、差集(获取多个集合中不一样的数据,使用第一个集合进行取进行比较)
sdiff set1 set2...


#7、删除数据
srem key member [member...]

#8、查看当前的set集合中是否包含这个值
sismember key member

3.6 zset常用命令

#1、添加数据(score必须是数值,member不允许重复)
zadd key score member [score member...]

#2、修改member的分数、(如果member是存在于key中的,正常增加分数,如果member不存在,这个命令相当于zadd)
zincrby key increment member


#3、查看指定的member的分数
zscore key member

#4、获取zset中数据的数量
zcard key

#5、根据score的范围查询member数量
zcount key min max

#6、删除zset中的成员
zrem key member [member...]


#7、根据分数从小到大排序,获取指定范围内的数据(withscores如果添加这个参数,那么会返回member对应的分数)
zrange key start stop [withscores]

#8、根据分数从大到小排序,获取指定范围内的数据(withscores如果添加这个参数,那么会返回member对应的分数)
zrevrenge key start stop [withscores]

#9、根据分数的范围获取member(withscores代表同时返回score,添加limit,就和MySQL中一样,如果不希望等于min或者max的值被查询出来,可以采用‘(分数’ 相当于<或者>,但不等于,是一个开区间,最大值和最小值使用+inf和-inf来标识)
zrangebyscore key min max [withsores] [limit offset count]

#10、根据分数的范围获取member(withscores代表同时返回score,添加limit,就和MySQL中一样)
zrevrangebyscore key max min [withsores] [limit offset count]

3.7 key常用命令

#1、查看Redis中的全部key(pattern:*,xxx*,*xxx)
keys pattern

#2、查看某一个key是否存在(1 - key存在,0 - key不存在)
exists key

#3、删除key
del key [key...]


#4、设置key的生存时间,单位为秒,单位为毫秒.
expire key second
pexpire key milliseconds

#5、设置key的生存时间,单位为秒,单位为毫秒,设置能活到什么时间点
expireat key timestamp
pexpireat key milliseconds

#6、查看key的剩余生存时间,单位为秒,单位为毫秒(-2 - 当前key不存在;-1 - 当前key没有设置生存时间;具体的生存时间)
ttl key
pttl key

#7、移除key的生存时间(1 - 移除成功,0 - key不存在生存时间,key不存在)
persist key


#8、选择操作的库
select 0~15

#9、移动key到另外一个库中
move key db

3.8 库的常用命令

#1、清空当前所在的数据库
flushdb

#2、清空全部数据库
flushall

#3、查看当前数据库中有多少个key
dbsize

#4、查看随后一次操作的时间
lastsave

#5、实时监控Redis服务接收到的命令
monitor

本次是这次Redis学习的前三部分,下一篇文章会分享

  • Java连接Redis
  • Redis其他配置以及集群
  • Redis常见问题

学无止境,关注我(微信搜索“良辰”或扫描下面的二维码),我们一起进步。如果觉得文章还可以,请给我三连击,谢谢~我们下期见。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章