首页 > 数据库 >redis day1

redis day1

时间:2022-08-14 12:11:53浏览次数:48  
标签:返回 数据库 元素 redis value day1 key

nosql(not only sql)

,意思是不仅仅是sql,泛指非关系型数据库。

·可以利用nosql解决的问题:

如商城网络中对商品数据频繁查询,对热搜商品的排行统计,订单超时问题,以及微信朋友圈(音频,视频)存储等;

nosql的四大分类:

1.键值(key-value)存储数据库

# 1.说明: 
- 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。

# 2.特点
- Key/value模型对于IT系统来说的优势在于简单、易部署。  
- 但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。

# 3.相关产品
- Tokyo Cabinet/Tyrant,
- Redis  基于内存的(快)    运行软件--->磁盘--->内存中
- SSDB   基于磁盘的(慢)    直接与磁盘做交互--> IO
- Voldemort 
- Oracle BDB

 2. 列存储数据库 ----> Hbase

# 1.说明
- 这部分数据库通常是用来应对分布式存储的海量数据。

# 2.特点
- 键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。列簇
- rowkey

# 3.相关产品
- Cassandra、HBase、ClickHouse等.

  3.文档型数据库---hbase

# 1.说明
- 文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。
文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高 {'id':1001,'name':xiaohu} {'id':1001,'name':'xiaohu2,'address':'anhuihefei','likes':['play','eat'],'study':{'yuyan':java,'ruanjian':'mysql'}} 文档数据库对于单条数据来说,他的事务支持并没有那么强大 目前的mongodb5,支持了单条数据的事务,但是多条不行 # 2.特点 - 以文档形式存储 # 3.相关产品 - MongoDB、CouchDB、 MongoDb(4.x). 国内也有文档型数据库SequoiaDB,已经开源。

 4.图形(Graph)数据库

# 1.说明
- 图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。

# 2.特点
- NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。

# 3.相关产品
- Neo4J、InfoGrid、 Infinite Graph、OSS

  

NoSQL应用场景

  • 数据模型比较简单

  • 需要灵活性更强的IT系统

  • 对数据库性能要求较高

  • 不需要高度的数据一致性(NoSql数据库对事务的支持都不是太好)

 

redis是一个内存型的数据库。

Redis特点

  • Redis是一个高性能key/value内存型数据库 在redis中,所有的数据形式都是以键值对的方式来存储的

  • Redis支持丰富的数据类型 string,list,set,sorted set 指的是键值对中的值的类型

  • Redis支持持久化 持久化:将数据落盘,

  • Redis单线程,单进程 由于是单线程和单进程的,所以它的线程是安全的,我们之前说的java中的多线程安全在分布式中不起作用,当时只针对一个JVM中是有效的。

redis安装

1.下载redis源码包
- https://redis.io/

2.下载完整源码包
- redis-7.0.0.tar.gz

3.先在虚拟机当中拍个快照,在/usr/local/soft/目录下创建redis-install文件夹,mkdir-install打开xftp把解压包传过来(解压目录)

4.解压缩文件
 tar -zxvf redis-7.0.10.tar.gz

redis底层是由c语言编写的,所以我们需要先编译

5.进入到redis 7.0。0目录中,安装gcc
- yum install -y gcc

# 6.进入解压缩目录执行如下命令
# 注意。一定要在Makefile文件的同目录下使用下面的命令对redis做编译(切记:不要make test)
- yum install -y tcl
- make MALLOC=libc

7.编译完成后执行如下命令
- make install PREFIX=/usr/local/soft/redis(安装目录)

8.进入/usr/redis目录启动redis服务 (服务只能启动一次)

export是让其子进程也能使用

在启动服务之前需要先配置环境变量,在/etc/profile/文件中(vim /etc/profile)添加export REDIS_HOME=/usr/local/soft/redis

并且在已经配置好的java环境变量中后面加上(:$REDIS_HOME/bin)

配置好之后让他生效 source /etc/profile(有三种脚本文件让它生效sh,script,source)
- ./redis-server

 

9.Redis服务端口默认是 6379
ps aux|grep redis

10.进入bin目录执行客户端连接操作(在另一个机器启动的方式)
- ./redis-cli -h localhost –p 6379

如果是在一台机器上,可以省略后面的
- ./redis-cli

 

Redis数据库相关指令

1、redis服务默认的启动端口号是6379
2、如果想要启动多个redis服务,就得修改端口号
	如何修改端口号?
	我们猜测,它自身有一个默认的端口号,就应该有一个地方可以去配置这个端口号,而这个地方应该是一个配置文件,但是呢,我们安装后就只有一个bin目录,
并没有看到其他的文件,所以我们去源码(解压)/usr/local/soft/bigdata/redis-install/目录下去找,找到一个叫做redis.conf的文件,这里面有地方进行修改端口号,
这个文件就是redis启动的时候需要读取配置的文件 注意:不要直接在源码目录下修改该文件,请先将redis.conf文件复制到外面某一个目录 第二步,可以修改端口号 port 7000 第三步,启动服务 3、即使你改过了配置文件,但是默认的启动服务方式,依旧是读取源码目录中的redis.conf文件,要想在启动的时候读取的是我们自己修改后的配置文件,
就应该去修改启动服务命令的格式:redis-server 配置文件的路径 比如:redis-server ./redis.conf 4、客户端启动的时候,默认是与6379端口号的redis服务连接,所以当自己指定端口号启动的时候,客户端的连接也需要发生变化 redis-cli -h 服务器的ip -p 端口号 5、redis数据库,默认会有16个数据库,这16个数据库的名字是按照序号从0开始编号,一直到15,默认客户端一开始进入使用的是0号库 如何切换库呢?select dbid 库与库之间键能否重名? set name xiaohu get name 库与库之间的数据是相对隔离的,不同的库可以定义不同的

 数据库操作指令

1.redis中有16个库,从0-15,可以使用select来选择进入哪个库

2.清空当前库:flushdb;清空全部的库:flushall

3.redis客户端显示中文:./redis-cli -p -6379  --raw

操作key相关指令

# 1.DEL指令
- 语法 :  DEL key [key ...] 
- 作用 :  删除给定的一个或多个key 。不存在的key 会被忽略。多个key之间使用空格隔开
- 可用版本: >= 1.0.0
- 返回值: 被删除key 的数量。(已存在的) 

# 2.EXISTS指令
- 语法:  EXISTS key
- 作用:  检查给定key 是否存在。多个key之间使用空格隔开,只要有一个key存在,返回值就是1 新版本中会提示几个键存在
- 可用版本: >= 1.0.0
- 返回值: 若key 存在,返回1 ,否则返回0。 

# 3.EXPIRE(只能对当前已存在的key设置时间)
- 语法:  EXPIRE key seconds
- 作用:  为给定key 设置生存时间,当key 过期时(生存时间为0 ),它会被自动删除。
- 可用版本: >= 1.0.0
- 时间复杂度: O(1)
- 返回值:设置成功返回1 。
ttl:查看剩余的时间,显示-2则已经删除

 

# 4.KEYS
- 语法 :  KEYS pattern
- 作用 :  查找所有符合给定模式pattern 的key 。
- 语法:
	KEYS * 匹配数据库中所有key 。
	KEYS h?llo 匹配hello ,hallo 和hxllo 等。(?是占位符)
	KEYS h*llo 匹配hllo 和heeeeello 等。
	KEYS h[ae]llo 匹配hello 和hallo ,但不匹配hillo 。特殊符号用 "\" 隔开(正则表达式)
- 可用版本: >= 1.0.0
- 返回值: 符合给定模式的key 列表。

# 5.MOVE - 语法 : MOVE key db (move name 1----将name键移动到1号库) - 作用 : 将当前数据库的key 移动到给定的数据库db 当中。 - 可用版本: >= 1.0.0 - 返回值: 移动成功返回1 ,失败则返回0 。 # 6.PEXPIRE - 语法 : PEXPIRE key milliseconds - 作用 : 这个命令和EXPIRE 命令的作用类似,但是它以毫秒为单位设置key 的生存时间,而不像EXPIRE 命令那样,以秒为单位。 - 可用版本: >= 2.6.0 - 时间复杂度: O(1) - 返回值:设置成功,返回1 key 不存在或设置失败,返回0
# 7.PEXPIREAT - 语法 : PEXPIREAT key milliseconds-timestamp(时间戳) - 作用 : 这个命令和EXPIREAT 命令类似,但它以毫秒为单位设置key 的过期unix 时间戳,而不是像EXPIREAT那样,以秒为单位。 - 可用版本: >= 2.6.0 - 返回值:如果生存时间设置成功,返回1 。当key 不存在或没办法设置生存时间时,返回0 。(查看EXPIRE 命令获取更多信息)
# 8.TTL - 语法 : TTL key - 作用 : 以秒为单位,返回给定key 的剩余生存时间(TTL, time to live)。 - 可用版本: >= 1.0.0 - 返回值: 当key 不存在时,返回-2 。 当key 存在但没有设置剩余生存时间时,返回-1 。 否则,以秒为单位,返回key 的剩余生存时间。 - Note : 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。 # 9.PTTL - 语法 : PTTL key - 作用 : 这个命令类似于TTL 命令,但它以毫秒为单位返回key 的剩余生存时间,而不是像TTL 命令那样,以秒为单位。 - 可用版本: >= 2.6.0 - 返回值: 当key 不存在时,返回-2 。当key 存在但没有设置剩余生存时间时,返回-1 。 - 否则,以毫秒为单位,返回key 的剩余生存时间。 - 注意 : 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。 # 10.RANDOMKEY - 语法 : RANDOMKEY - 作用 : 从当前数据库中随机返回(不删除) 一个key 。 - 可用版本: >= 1.0.0 - 返回值:当数据库不为空时,返回一个key 。当数据库为空时,返回nil 。 # 11.RENAME - 语法 : RENAME key newkey - 作用 : 将key 改名为newkey 。当key 和newkey 相同,或者key 不存在时,返回一个错误。当newkey 已经存在时,RENAME 命令将覆盖旧值。 - 可用版本: >= 1.0.0 - 返回值: 改名成功时提示OK ,失败时候返回一个错误。 # 12.TYPE - 语法 : TYPE key - 作用 : 返回key 所储存的值的类型。 - 可用版本: >= 1.0.0 - 返回值: none (key 不存在) string (字符串) list (列表) set (集合) zset (有序集) hash (哈希表)

 String类型

内存存储模型

 

常用操作命令

命令 说明
set 设置一个key/value
get 根据key获得对应的value
mset 一次设置多个key value
mget 一次获得多个key的value
getset 获得原始key的值,同时设置新值
strlen 获得对应key存储value的长度
append 为对应key的value追加内容
getrange 索引0开始 截取value的内容 到末尾-1
setex 设置一个key存活的有效期(秒)
psetex 设置一个key存活的有效期(毫秒
setnx 存在不做任何操作,不存在添加
msetnx原子操作(只要有一个存在不做任何操作) 可以同时设置多个key,只有有一个存在都不保存
decr 进行数值类型的-1操作
decrby 根据提供的数据进行减法操作
Incr 进行数值类型的+1操作
incrby 根据提供的数据进行加法操作
Incrbyfloat 根据提供的数据加入浮点数(不是四舍五入)

 

List类型

list 列表 相当于java中list 集合 特点 元素有序 且 可以重复,key还是一个字符串,值是一个list

内存存储模型

 

先添加进去的索引会在后面

常用操作指令 
命令说明
lpush 将某个值加入到一个key列表头部 lpush list xiaohu xiaohei xiaoming 当列表不存在的时候会进行创建
lpushx 同lpush,但是必须要保证这个key存在 必须在列表进行存在的情况下从左插入
rpush 将某个值加入到一个key列表末尾
rpushx 同rpush,但是必须要保证这个key存在
lpop 返回和移除列表左边的第一个元素
rpop 返回和移除列表右边的第一个元素
lrange 获取某一个下标区间内的元素 lrange list 0 -1
llen 获取列表元素个数
lset 设置某一个指定索引的值(索引必须存在)
lindex 获取某一个指定索引位置的元素
lrem 删除重复元素
ltrim 保留列表中特定区间内的元素
linsert 在某一个元素之前,之后插入新元素

 set类型

特点: Set类型 Set集合 元素无序 不可以重复

内存存储模型

 

 常用操作指令
命令说明
sadd 为集合添加元素
smembers 显示集合中所有元素 无序
scard 返回集合中元素的个数
spop 随机返回一个元素 并将元素在集合中删除
smove 从一个集合中向另一个集合移动元素 必须是同一种类型
srem 从集合中删除一个元素
sismember 判断一个集合中是否含有这个元素
srandmember 随机返回元素 后面可以加数字 表示每次返回的个数
sdiff 去掉第一个集合中其它集合含有的相同元素
sinter 求交集
sunion 求和集

 

 

ZSet类型

特点: 可排序的set集合 排序 不可重复

ZSET 官方 可排序SET sortSet

内存模型

常用操作指令
命令说明
zadd 添加一个有序集合元素 zadd zset 2 xiaohu 3 xiaohu2
zcard 返回集合的元素个数
zrange 升序 zrevrange 降序 返回一个范围内的元素 如果想看看分数 withscores
zrangebyscore 按照分数查找一个范围内的元素 zrangebyscore zset 0 20 withscores limit 0 2
zrank 返回排名
zrevrank 倒序排名
zscore 显示某一个元素的分数
zrem 移除某一个元素
zincrby 给某个特定元素加分

 hash类型

特点: value 是一个map结构 存在key value key 无序的

redis key(String) value(map)

Map<String,Map<String,value>> map

举例:map name zhangsan

内存模型

 

 常用操作类型
命令说明
hset 设置一个key/value对
hget 获得一个key对应的value
hgetall 获得所有的key/value对
hdel 删除某一个key/value对
hexists 判断一个key是否存在
hkeys 获得所有的key
hvals 获得所有的value
hmset 设置多个key/value
hmget 获得多个key的value
hsetnx 设置一个不存在的key的值
hincrby 为value进行加法运算(只能针对数值做运行)
hincrbyfloat 为value加入浮点值

 

 

安装可视化工具

把/usr/local/soft/redis/下的redis.conf文件中的bind 127.0.0.1注释掉,和把protected-mode yes改成protected-mode no,才能把redis和redis可视化工具连接成功

标签:返回,数据库,元素,redis,value,day1,key
From: https://www.cnblogs.com/wqy1027/p/16584504.html

相关文章

  • 安装redis
    获取redis安装包:wgethttps://download.redis.io/redis-stable.tar.gz编译redistar-xzvfredis-stable.tar.gzcdredis-stablemake安装redissudomakeinstall复......
  • redis碰到的问题
    SpringBoot整合redis连接报错:UnabletoconnecttoRedis;nestedexceptionisorg.springframework.data.redis.connection.PoolException:Couldnotgetaresour......
  • Day1
    Markdown学习标题三级标题四级标题几个#+空格就是几级标题最多支持六级标题字体Hello,World!双星号加粗****Hello,World!单星号斜体**Hello,World!三星号......
  • Redis hash类型
    Redishash类型Redishash类型是键值对的集合类型。经常被用来做对象的映射。Redishash命令hash格式如下hash_key_namefieldvalue  fieldvalue。field必须和va......