02. redis高级(一)

一、redis安装和配置

下载、安装

# 下载
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
# 解压
tar -xzf redis-5.0.7.tar.gz
#建立软连接
ln -s redis-5.0.7 redis
cd redis
make&&make install
# 在src目录下可以看到
# redis-server--->redis服务器
# redis-cli---》redis命令行客户端
# redis-benchmark---》redis性能测试工具
# redis-check-aof--->aof文件修复工具
# redis-check-rdb---》rdb文件检查工具
# redis-sentinel---》sentinel服务器,哨兵
# redis作者对windows维护不好,window自己有安装包

# 在任意路径上执行redis-server 都能运行redis服务:
	- 把可执行文件加入环境变量
    	- 用户变量(用户家路径下: .bash_profile)
        - 系统变量
    - 把可执行文件在usr路径下建立软连接

关于卸载redis

# 1、查看redis进程
    ps aux | grep redis
# 2、kill进程
    kill [进程id]
# 3、进入到redis目录
    cd /usr/local/
# 4、删除redis对应的文件
    rm -f /usr/local/redis/bin/redis*
    rm -f /usr/local/bin/redis*
# 5、删除对应的文件
    rm -rf redis	

简单启动服务

redis-server 

动态参数启动

redis-server --port 6380

重点:通过配置文件启动redis

# 配置文件启动
# 通过redis-cli连接,输入config get * 可以获得默认配置
# 在redis目录下创建config目录,copy一个redis.conf文件
#daemonize--》是否是守护进程启动(no|yes)
#port---》端口号
#logfile--》redis系统日志
#dir--》redis工作目录
bind 0.0.0.0
daemonize NO
protected-mode no
requirepass 123456

普通客户端链接

redis-cli -h ip -p port
redis-cli 

带密码的

# 方式一
redis-cli -h 127.0.0.1  -p 6370 -a 123456
# 方式二
redis-cli -h 127.0.0.1  -p 6370
先登陆,再通过auth输入密码

注意

CONFIG GET *   # 一百多对建值
CONFIG SET maxmemory 128M  # 设置最大使用的内存
CONFIG set requirepass 123456  # 设置密码
CONFIG REWRITE  # 保存到配置文件

二、API

### 1-keys 
#打印出所有key
keys * 
#打印出所有以he开头的key
keys he*
#打印出所有以he开头,第三个字母是h到l的范围
keys he[h-l]
#三位长度,以he开头,?表示任意一位
keys he?
#keys命令一般不在生产环境中使用,生产环境key很多,时间复杂度为o(n),用scan命令

### 2-dbsize   计算key的总数
dbsize #redis内置了计数器,插入删除值该计数器会更改,所以可以在生产环境使用,时间复杂度是o(1)

### 3-exists key 时间复杂度o(1)
#设置a
set a b
#查看a是否存在
exists a
(integer) 1
#存在返回1 不存在返回0
###4-del key  时间复杂度o(1)
删除成功返回1,key不存在返回0
###5-expire key seconds  时间复杂度o(1)
expire name 3 #3s 过期
ttl name  #查看name还有多长时间过期
persist name #去掉name的过期时间
###6-type key  时间复杂度o(1)
type name #查看name类型,返回string


### 7 其他
info命令:内存,cpu,主从相关
client list  正在连接的会话
client kill ip:端口
dbsize  总共有多少个key
flushall  清空所有
flushdb  只清空当前库
select 数字  选择某个库  总共16个库
monitor  记录操作日志,夯住
###1---hget,hset,hdel
hget key field  #获取hash key对应的field的value 时间复杂度为 o(1)
hset key field value #设置hash key对应的field的value值 时间复杂度为 o(1)
hdel key field #删除hash key对应的field的值 时间复杂度为 o(1)
#测试
hset user:1:info age 23
hget user:1:info ag
hset user:1:info name lqz
hgetall user:1:info
hdel user:1:info age
###2---hexists,hlen
hexists key field  #判断hash key 是否存在field 时间复杂度为 o(1)
hlen key   #获取hash key field的数量  时间复杂度为 o(1)
hexists user:1:info name
hlen user:1:info  #返回数量
        
###3---hmget,hmset
hmget key field1 field2 ...fieldN  #批量获取hash key 的一批field对应的值  时间复杂度是o(n)
hmset key field1 value1 field2 value2  #批量设置hash key的一批field value 时间复杂度是o(n)

###4--hgetall,hvals,hkeys
hgetall key  #返回hash key 对应的所有field和value  时间复杂度是o(n)
hvals key   #返回hash key 对应的所有field的value  时间复杂度是o(n)
hkeys key   #返回hash key对应的所有field  时间复杂度是o(n)
###小心使用hgetall
##1 计算网站每个用户主页的访问量
hincrby user:1:info pageview count
##2 缓存mysql的信息,直接设置hash格式

三、高级用法

# 慢查询相关
# pipeline与事务
	- pipeline每次只能作用在一个redis的节点上,(如果做了集群,就没有pipeline了)
    
 	- 悲观锁和乐观锁
    - redis只能实现乐观锁:https://www.cnblogs.com/liuqingzheng/p/9997092.html

模拟乐观锁

# 在开启事务之前,先watch
watch age
multi
decr age
exec

# 另一台机器
mutil 
decr age
exec  # 限制性,上面的执行就会失败(悲观锁,被watch的事务不会执行成功)

发布订阅

# Bitmap位图
# HypeLog:极小的空间完成独立数量统计
    - pfadd key element  # 增加(重复了不会增加)
    - pfcount key  # 统计个数
    - 去重,独立用户统计,有错误率
   
# GEO(redis, es)
# 插入数据
geoadd cities:locations 106.14.60.93 beijing  # 把北京地理信息天津到cites:location中
geoadd cities:locations 117.12 39.08 tianjin
geoadd cities:locations 114.29 38.02 shijiazhuang
geoadd cities:locations 118.01 39.38 tangshan
geoadd cities:locations 115.29 38.51 baoding
# 计算北京到天津的距离
geodist cities:locations beijing tianjing km
# 计算北京方圆150km内的城市
georadiusbymember cities:locations beijing 150 km

四、持久化

# 两种方案:
- rbd:缓存
- aof;对数据准确性要求高一点

rbd方案(三种触发方式)

# 手动 save
# 手动 bgsave

# 配置文件示例:
    配置	seconds changes
    save  900     1
    save  300     10
    save  60      10000

# 最佳配置
save 900 1
save 300 10
save 60 10000
dbfilename dump-3306.rdb  # 以端口号作为文件名,一台机器上启动很多redis服务也不会乱
dir /bigdiskpath  # 保存路径放到一个大硬盘位置目录
stop-writes-on-bgsave-error yes  # 出现错误停止
rdbcompression yes  # 压缩
rdbchecksum yes  # 校验

AOF方案

# 原理:
	客户端每写入一条命令,都记录一条日志,放到日志文件中,如果出现宕机,可以将数据完全恢复

# AOF重写 如何实现的?
	本质上就是把过期的、无用的、重复的、可以优化的命令,来做优化
	这样,可以减少磁盘的占用量,加速恢复速度

# aof的最佳配置
appendonly yes  # 将该选项设置成yes,打开
appendfilename "appendonly-3396.aof"  # 文件保存的名字
appendfsnyc everysec  # 采用第二种策略
dir /data  # 存放的路径
no-appendfsync-on-rewrite yes

五、主从复制原理与优化

# 手动配置6380上执行(去从配置,配置主库)

# 127.0.0.1 6379 主库
# 127.0.0.1 6380 从库
# 在从库上执行,就建立了主从
slaveeof 127.0.0.1
# 取消主从
slaveof no one  # 取消复制,不会把之前的数据清除

# 配置文件配置
daemonize no
pidfile redis.pid
bind 0.0.0.0
protected-mode no
port 6379
timeout 0
logfile redis.log
dbfilename dump.rbd
dir /data
# 指定主库为10.0.101 6379
slaveof 10.0.0.101 
# 从库只读
slave-read-only yes
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: StackExchange.Redis 是一个.NET平台下的开源Redis客户端库,它提供了一种高性能、稳定和易于使用的方式来与Redis服务器进行通信。它支持异步和同步操作,并提供了一些高级特性,如管道、发布/订阅等。 StackExchange.Redis 具有以下特点: - 快速:通过使用高性能、低级别的Redis通信协议,StackExchange.Redis 可以实现高效的数据访问。 - 可扩展性:StackExchange.Redis 支持分区功能,使它能够在多个Redis节点上分布数据,并且可以在需要时轻松地添加或删除节点。 - 可靠性:StackExchange.Redis 有一个内置的连接池来管理与Redis服务器的连接,从而可以提高性能和可靠性,并避免了频繁的连接/断开开销。 - 易用性:StackExchange.Redis 提供了一个简单的API,使得开发人员能够轻松地与Redis进行交互。 总的来说,如果你在.NET平台上使用Redis,StackExchange.Redis 应该是你的首选。 ### 回答2: StackExchange.Redis 是一个基于Redis的 .Net客户端库,由StackExchange团队开发和维护。Redis内存数据库是非常流行的键值对存储,支持复杂数据结构,速度快,有完善的集群方案,在web应用程序、消息系统等应用场景中被广泛使用。 StackExchange.Redis提供了方便易用、高性能、可扩展的API,可以直接向Redis发送命令、订阅和发布消息、连接Redis集群等。他进一步扩展了Redis命令,使其更加简单易用,并支持事务、管道和多线程操作。同时,StackExchange.Redis支持Redis高级特性,如SortedSet和Hash;而且,它还能够在运行时自动检测Redis服务状态,支持Redis Sentinel、Cluster和多节点环境。 此外,StackExchange.Redis还支持应用程序跟踪(application tracing),采用异步API调用,从而提高了性能和可伸缩性。与其他Redis客户端库不同,StackExchange.Redis实现了连接池、序列化和反序列化器等高级功能,使用起来更加方便和优雅,可以减少代码量和复杂性。 总的来说,StackExchange.Redis是一个很不错的Redis客户端库,它提供了强大而与Redis完全兼容的API,打破了语言壁垒,使得开发者可以在自己喜欢的语言环境(例如.Net)中使用 Redis 。 许多一流的公司如 StackOverflow和GitHub都使用 StackExchange.Redis,证明了它的可靠性和性能优势。 ### 回答3: StackExchange.RedisRedis数据库的一个适用于 .NET 编程语言的客户端。它提供了一组丰富的功能,用于在 .NET 框架内与Redis数据库进行交互。 StackExchange.Redis旨在为 .NET 开发人员提供最佳的Redis集成体验。StackExchange.Redis提供了许多优点,其中最主要的有: 高度优化的读写操作。StackExchange.Redis客户端库具有非常高的效率,用于从Redis服务器读取和写入数据时,可大大减少网络流量和延迟。这使得它成为处理高吞吐量负载的很好的选择。 支持许多复杂数据类型。除了提供基本的字符串和整数类型之外,StackExchange.Redis还支持许多复杂的数据类型,例如哈希表、排序集合和列表数据类型。这些数据类型将极大地帮助开发人员设计和实施高效的Redis应用程序。 易于使用和集成。StackExchange.Redis具有完美的适配性,可以很简单地与 .NET 中的 ASP.NET 应用程序、Windows 服务、控制台应用程序等相集成。此外,它具有丰富的文档、教程和API reference,可以让开发者轻松入手。 另外,StackExchange.Redis还包括许多其他特性,如:连接复用、事务支持、发布与订阅、管道等。这使得它成为在 .NET 编程语言中使用Redis数据库的非常好的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值