Redis2

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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
相关文章
|
18天前
|
NoSQL Redis
redis红锁
在Redis集群中,若请求分布式锁成功后Master宕机且Slave未同步此锁,会导致锁被多次获取。为解决此问题,可对集群每个节点加锁,当大多数节点(N/2+1)加锁成功时,视为获取锁成功。尽管Redisson实现了红锁,但其无法确保每个锁分布在不同Master上,因此建议直接使用Redisson的普通锁。
30 5
|
2月前
|
存储 NoSQL Redis
Redis
Redis
|
6月前
|
消息中间件 缓存 NoSQL
【Redis】 初识 Redis
【Redis】 初识 Redis
|
7月前
|
存储 NoSQL Redis
Redis介绍以及日常使用
​ 介绍 Redis(REmote DIctionary Server)是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、非关系类型的Key-Value数据库。它提供了多种语言的API,如Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等,使得在各种语言环境下使用Redis都变得非常方便。 Redis是一个高性能的Key-Value数据库,其性能在很大程度上补偿了如Memcached这类Key-Value存储的不足,并且在某些场景下,它还可以作为关系数据库的良好补充。它支持的数据结构类型
194 1
|
运维 NoSQL Shell
redis(2)
Redis Cluster 是 redis的分布式解决方案,在3.0版本正式推出 当遇到单机、内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡目的。 Redis Cluster之前的分布式方案有两种: 1)客户端分区方案: 优点分区逻辑可控,缺点是需要自己处理数据路由,高可用和故障转移等。 2)代理方案: 优点是简化客户端分布式逻辑和升级维护便利,缺点加重架构部署和性能消耗。 官方提供的 Redis Cluster集群方案,很好的解决了集群方面的问题
|
7月前
|
存储 NoSQL Go
Redis 双端链表
Redis 双端链表
49 0
|
缓存 NoSQL 关系型数据库
|
存储 NoSQL 中间件
redis
redis
55 0
|
存储 缓存 NoSQL
|
存储 缓存 NoSQL
Redis5
Redis5
125 0