Redis数据库的安装与基础操作
### Redis数据库
-
Redis简介
- Redis (Remote Dictionary Server)是用C语言编写的开源数据库,可以将数据放入内存,也可以持久化存储到磁盘
- Redis不同于传统关系型数据库,以key-value的形式存储数据,value可以为string字符串、list列表、set集合、sorted sets有序集合、hash哈希等多种类型
- Redis早期由意大利人Salvatore Sanfilippo开发(网名antirez),2010年作者受雇于VMWARE,2013年由子公司Pivotal Software支持,从2015年起,由Redis实验室支持其开发工作
- Redis将数据放置与内存,性能优越,官方给的测试结果:读取数据速度是110000次/s,写入速度为81000次/s
- Redis开源免费,提供多种编程语言接口,包括主流的:java,python,php,c#等几十种编程语言,遵从BSD协定
-
适用于:
- 缓冲高并发读写的实时数据
- 网站最新信息列表,用户点击计数器,各类信息的实时排名
-
不适用于:
- 对事务要求高的业务
- 需要使用SQL的业务场景
-
Redis的安装
-
下载安装包
-
上传安装包至服务器
-
安装依赖及redis软件
-
相关文件位置
- 配置文件位置:/etc/redis.conf
- 数据文件位置:/var/lib/redis
- 默认日志文件位置:/var/log/redis/redis.log
-
修改配置文,允许远程连接
-
启动服务
-
关闭服务
-
本地连接redis
-
远程连接
redis-cli -h 192.168.10.40
或
redis-cli -h 192.168.10.40 -p 6379
-
使用图形化工具连接redis
安装后打开并进行连接
默认开启16个库,可以在配置文件中使用参数databases指定默认开启的库的数量
-
-
redis中常用数据类型
-
strings
- value值是字符串
-
Lists
- value值是一系列string字符串的列,按照插入的顺序排列
-
Sets
- value值是一系列string字符串元素的集合,不能有重复值,不排序
-
Sorted sets
- value值是一系列string字符串元素的集合,但是集合中的每个元素都关联一个浮点数值,叫做score,集合元素按照score排序,比较容易实现范围查找,如:列出集合元素中的前10或后10名
-
Hashes
- value值是多个键值对(field:value),键值对由field和其对应的value组成类似于编程语言中的hash数组
-
-
redis中的key
- redis的key用来定位数据,可以想象成引用数据的标签
- key在当前数据库中不能有重值(默认16个数据库,数据库可以想象成分类目录,一般情况一个业务系统的数据放在一个数据库中)
- key的名字不宜过长(超过1024),否则影响性能
- key最多可以存512M
-
String 字符串
set mykey values #设置key为mykey,value为values的键值对 get mykey #获取mykey对应的value值
-
incr 递增 incrby 指定递增步长
-
decr 递减 decrby 指定递减步长
-
mset 一次性为多个key赋值,mget 一次性获取多个key的值
-
del 删除键值对,可同时删除多个
-
exists 判断指定的key是否存在,存在返回1,不存在返回0
-
type 查看指定key对应的value的数据类型
-
expire 设置key过期时长(单位:秒),ttl 查看剩余生命周期(单位:秒),超过设置时长后会自动清除指定的key
-
-
Lists 列表
-
lpush 从左侧添加元素到列表中(新添加的元素位于列表首部)
-
lrange 从左侧显示列表中的元素
lrange mylist 0 -1 #显示列表中的元素 从0到-1,-1为最后一位
-
llen 获得列表中元素的个数
-
rpush 从右侧添加元素到列表(新添加的元素位于列表尾部)
-
rpop 删除右侧一个元素(尾部删除)
-
lpop 删除左侧一个元素(首部删除)
-
linsert 将元素插入指定位置(after位于指定元素后,defore位于指定元素前)
-
lset 修改指定位置元素的值(坐标从0开始)
-
lrem 删除指定的value
lrem mylist1 0 "a" lrem mylist1 1 "c" lrem mylist1 -1 "hello" #格式:lrem key count value #count #为0 删除所有value #大于0 从左删除count个value(从首部) #小于0 从右删除count个value(从尾部)
-
ltrim保留指定范围内的元素,其他的删除
-
-
Sets 集合
-
sadd设置key对应的value集合
-
smembers 查看指定key的集合中的成员
注:集合成员不会按照插入的顺序显示
-
sismember 查看指定元素是否属于指定的集合,1为真,0为假
-
sinter查看多个集合的交集
-
sdiff 查看多个集合中的差集
注:顺序不同差集也不相同,那个集合在前显示那个集合中有而其他集合中不存在的元素
-
sunion 查看多个集合的合集
-
scard 查看集合中元素的个数
-
-
Sorted sets 有序集合
-
zadd 设置key对应的value的有序集合
zadd myzset 1 a 2 b 3 c #格式:zadd key [NX|XX] [CH] [INCR] score member [score member ...] #排序按照score从小到大排序,当score相同时比较member
-
查看集合中的元素
-
显示集合中的元素及score
-
zrevrange显示有序集合的元素(score从大到小)
-
修改score值
-
-
hashes 哈希
-
hmset 将多个field与value的键值对写入到指定key中,Redis 中每个 hash 可以存储 2的32次方-1个键值对(40多亿)
hmset users:10 uid 15 uname zhangsan password 1234 birth 1990-10-10 #语法格式:hmset key field value [field value ...]
-
hget 获取指定key中指定field对应的value
-
hmget 获取指定key中指定的多个field对应的value
-
hgetall 获取指定key中所有field和value键值对数据
-
hlen 获取指定key中所有field和value键值对的数量
-
hkeys 获取指定key中所有field数据
-
hvals 获取指定key中所有field对应value数据
-
hdel 删除指定key中多个field及其对应value数据
-
hset 修改key中一个field对应的值
-
hmset 修改key中一个field或多个field对应的值
-
-
其他常用命令
-
flushdb清空当前数据库的所有值(慎用)
-
select 切换数据库
注:端口号后中括号内的数值标识了当前所处的数据库
-
scan 查看当前数据库中所有的key
scan 0 scan 0 match * count 3 scan 3 match * count 3 #语法格式 scan cursor [MATH pattern] [COUNT count] #cursor 游标 #SCAN命令是一个基于游标的迭代器 #游标为 0 时,服务器将开始一次新的迭代, 返回值为 0 的游标时, 表示迭代已结束 #可以使用返回的游标作为继续下一次迭代显示的游标 #MATH 匹配模式 * 匹配所有 #count 指定显示的数量
-