Redis2

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis2

6、Redis默认不是后台启动,需要修改配置文件

vim redis.conf

7、启动Redis,redis-server 通过制定的配置文件启动

redis-server my_redis_config/redis.conf


8、使用 redis-cli 进行测试连接


9、查看Redis进程是否开启


10、如何关闭Redis服务


11、再次查看进程是否存在


12、后面我们会使用单机多Redis启动集群测试!

2.4、测试性能

redis-benchmark 是一个压力测试工具,官方自带的性能测试工具。

redis 性能测试的基本命令如下:

redis-benchmark [option] [option value]

redis 性能测试工具可选参数如下所示(来自菜鸟教程)


我们来简单的测试一下

# 测试100个并发连接,100000请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000


如何查看这些分析?



2.5、Redis基础知识

Redis默认有16个数据库(可查看看配置文件)

默认使用的是第0个数据库

可以使用 select 进行切换数据库(例如切换为3号数据库)

127.0.0.1:6379> select 3 # 切换数据库
OK 
127.0.0.1:6379[3]> dbsize # 查看db大小
(integer) 0
127.0.0.1:6379[3]> 

查看当前数据库所有key

127.0.0.1:6379[3]> keys * # 查看当前数据库所有key
1) "name"
127.0.0.1:6379[3]>

清除当前数据库与清除全部数据库内容

127.0.0.1:6379[3]> flushdb # 清空数据库
OK
127.0.0.1:6379[3]> keys *
(empty array)
# flushall 清空全部数据库内容

思考:redis的端口号为什么是6379?(可网上查询,了解即可)

Redis是单线程的!(6.0版本以上,Redis网络处理是多线程)

官方表示Redis是很快的,Redis是给予内存操作的,CPU不是Redis的性能瓶颈,Redis的瓶颈是根据机器的内存和网络宽带,既然可以使用单线程来实现,就使用单线程了!


Redis是C 语言写的,官方提供的数据为100000+的QPS,完全不比同样是使用key-vale的Memecache差!


Redis为什么使用单线程还这么快?

误区1∶高性能的服务器一定是多线程的?
误区2∶多线程(CPU上下文会切换!)一定比单线程效率高!

速度快的原因:

核心:redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换︰耗时的操作! ! ! ),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上,在内存情况下,这种方案才是最佳的。

3、Redis五大数据类型

官方文档 Redis可以作为数据库、缓存、消息中间件

/* Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作 数据库、缓存和消息中间件
(MQ)。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合
(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 
索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),
事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)
提供高可用性(high availability */

3.1、Redis-key 学习

127.0.0.1:6379> keys * # 查看所有key
(empty array)
127.0.0.1:6379> set name howie
OK
127.0.0.1:6379> exists name # 判断key是否存在
(integer) 1
127.0.0.1:6379> move name 3 # 移动当前key到制定的数据库
(integer) 1
127.0.0.1:6379> set age 21
OK
127.0.0.1:6379> expire age 10 # 设置key的过期时间,单位是秒
(integer) 1
127.0.0.1:6379> ttl name # 查看当前key的剩余时间,单位是秒,负数代表当前key以到期
(integer) -2
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> type name # 查看当前key的数据类型
string
127.0.0.1:6379> type age
string

Redis的命令远不止这些,全部拿来学习也不现实,所以遇到不会的命令,我们要学会在官网上查询

官网命令查询地址:http://www.redis.cn/commands.html


3.2、String(字符串)

1、追加与获取长度

127.0.0.1:6379> set str "hello" # 设置值
OK
127.0.0.1:6379> get str # 获取值
"hello"
127.0.0.1:6379> append str " world" # 追加字符串,如果当前字符串不存在,就相当于set key
(integer) 11
127.0.0.1:6379> get str
"hello world"
127.0.0.1:6379> strlen str # 获取字符串长度
(integer) 11

2、自增/减,指定步长自增/减

127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views # 自增1
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> decr views # 自减1
(integer) 1
127.0.0.1:6379> incrby views 9 # 指定步长,自增
(integer) 10
127.0.0.1:6379> get views
"10"
127.0.0.1:6379> decrby views 9 # 指定步长,自减
(integer) 1
127.0.0.1:6379> get views
"1"

3、字符串范围 getrange

127.0.0.1:6379> set str "hello world"
OK
127.0.0.1:6379> getrange str 0 1 # 截取闭区间的子字符串,索引从0开始[0,1]
"he"
127.0.0.1:6379> getrange str 0 -1 # 获取全部字符串,这里和get key 是一样的
"hello world"

4、替换 setrange

127.0.0.1:6379> get str
"hello world"
127.0.0.1:6379> setrange str 6 "Java" # 替换指定位置开始的字符串
(integer) 11
127.0.0.1:6379> getrange str 0 -1
"hello Javad"
setex # set with expire 设置过期时间
setnx # set if not exist 不存在再设置(在分布式锁中经常使用)
127.0.0.1:6379> setex age 30 "21" # 设置过期时间
OK
127.0.0.1:6379> ttl age
(integer) 25
127.0.0.1:6379> get ge
(nil)
127.0.0.1:6379> set name "alex"
OK
127.0.0.1:6379> get name
"alex"
127.0.0.1:6379> setnx name "Java" # 设置key-value,如果key存在,不会覆盖,并且返回0,表示设置失败
(integer) 0
127.0.0.1:6379> get name
"alex"

5、批量设置(mset)和获取(mget)

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 # 批量设置
OK
127.0.0.1:6379> keys * # 查看所有的key
1) "k2"
2) "k1"
3) "k3"
127.0.0.1:6379> mget k1 k2 k3 # 批量获取
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4 # msetnx 是一个原子性的操作,要么一起成功,要么一起失败!
(integer) 0
127.0.0.1:6379> get k4
(nil)

6、对象

# 对象
set user:1 {name:alex,age:21} # 设置一个 user:1 对象,值为json字符来保存一个对象!
# 这里的 key 是一个巧妙的设计:user:{id}:{fild},如此设计在Redis中是完全ok的。
127.0.0.1:6379> mset user:1:name Java user:1:age 25
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "Java"
2) "25"

7、组合命令 getset

# 先get再set
127.0.0.1:6379> getset money "1w" # 如果不存在值,则返回nil,然后设置新值
(nil)
127.0.0.1:6379> get money
"1w"
127.0.0.1:6379> getset money "2w" # 如果存在值,则返回,并重新设置值
"1w"
127.0.0.1:6379> get money
"2w"
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
存储 消息中间件 NoSQL
|
7月前
|
存储 缓存 NoSQL
|
7月前
|
存储 缓存 NoSQL
|
8月前
|
运维 NoSQL Shell
redis-2
redis-2
50 0
|
8月前
|
存储 缓存 NoSQL
Redis初探
本篇深入介绍了Redis(Remote Dictionary Server)这一开源的内存数据存储系统,以及它在现代应用开发中的用途和优势。首先,我们对Redis进行了初步探索,解释了Redis是什么,它的主要特点以及适用场景。接着,我们详细讨论了Redis的安装和配置过程,提供了在Linux环境下安装Redis的步骤,并展示了如何启动和关闭Redis服务器。
205 0
|
11月前
|
存储 缓存 监控
|
11月前
|
NoSQL Java Redis
|
NoSQL Redis 流计算
使用redis
使用redis
58 0
|
存储 消息中间件 缓存
Redis总结(一)
Redis 的全称是:Remote Dictionary.Server,本质上是一个 Key-Value 类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构,此外单个 value 的最大限。
98 0
|
存储 NoSQL Redis
什么是Redis?
什么是Redis?
90 2
什么是Redis?