一 Redis介绍
1.1 引言
- 由于用户量增大,请求数量也随之增大,数据库压力过大。
- 多台服务器之间,数据不同步。
- 多台服务器之间的锁,已经不存在互斥性了。
1.2 NoSQL
Redis就是一款NoSql
NoSQL -> 非关系型数据库 -> Not Only SQL
- key-value: Redis...
- 文档型:MongoDB,ElasticSearch,solr...
- 面向列:Hbase...
- 图形化: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常见问题
学无止境,关注我(微信搜索“良辰”或扫描下面的二维码),我们一起进步。如果觉得文章还可以,请给我三连击,谢谢~我们下期见。