Redis

Redis是一种开源的内存数据库,支持多种数据结构如字符串、哈希表和列表。在Windows上安装Redis需要通过Cygwin并修改源码。Redis提供命令行客户端,以及用于性能测试和数据检查的工具。此外,文章还提到了Redis的持久化、内存策略和集群配置。
摘要由CSDN通过智能技术生成
Redis
一、简介

Redis是 Remote Dictionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过 TCP 协议读写 字典中的内容,是一种内存数据库,但它提供了可异步写入硬盘的功能。
  Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串(String)、哈希表(Hash)、列表(List)、集合(Set)、有序集合(ZSet),位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
  每一个 Redis 实际上支持0-15 共16个数据库,Redis 总是自动使用0号数据库,数据库直接数据并非隔离,且其密码相同,只能使用编号不能自定义数据库名,不同应用程序应该使用不同的 Redis 实例而非共用一个 Redis 实例的多个数据库。

二、Windows 上安装 Redis

已编译程序下载地址:https://github.com/dmajkic/redis/downloads**

1、安装Cygwin
2、修改 Redis 源码
a、编辑src目录下的redis.h 文件,头部加入

#ifdef CYGWIN
#ifndef SA ONSTACK
#define SA ONSTACK 0x08000000
#endif
#endif

b、编辑 object.c 文件,头部加入

#define strtold(a,b)((long double)strtod((a),(b)))

c、使用 make 命令编译 Redis

三、Redis 可执行文件
文件名说明
redis-serverRedis 服务器
redis-cliRedis 命令行客户端
redis-benchemarkRedis 性能测试工具
redis-check-aofAOF 文件修复工具
redis-check-dumpRDB 文件检查工具
四、Redis 命名实践规范

1、“type🆔prop”:该键存储类型为type的对象,其唯一标识为id,属性为prop的指;
2、"types:count:该键的指存储自增编号,因为其总数是总是等于type新增对象的id

五、Redis 命令
Redis 命名说明
KEYS *获取键名列表,支持*,?,[],\x 通配
EXISTS key判断键是否存在
DEL key [key…]删除键并返回删除的键数
INCR key自增
INCRBY key increment增加指定的整数
DECR key自减
DECR key decrement减少指定的整数
INCRBYFLOAT key increment增加指定浮点数
APPEND key value向键值末尾追加 value,返回追加后字符串的总长度。
STRLEN key返回键值的长度,键不存在则返回 0
MGET key [key …]同时获取多个键值
MSET key value [key value …]同时设置多个键值
GETBIT key offset
SETBIT key offset value获取一个字符串类型键指定位置的二进制值,offset 从 0 开始
BITCOUNT key [start] [end]
BITOP operation destkey key [key …]
HGET key field获取散列值类型key的field字段的指
HSET key field value设置散列值类型key的field字段的值
HGET key field [key field …]
HSET key field value [key field value]
HGETALL key获取散列值类型的所有键值
HEXISTS key field判断字段是否存在
HSETNX key field value当字段不存在时才进行赋值
HINCRBY key filed increment给字段增加值
LPUSH key value [value …]向列表类型 key 前加入 value
RPUSH key value [value …]向列表类型 key 后加入 value
LPOP key弹出列表左边的元素
RPOP key弹出列表右边的元素
LLEN key获取列表长度,该值是一个静态值,无需统计
LRANGE key start stop获取列表片段
LREM key count value删除列表中前 count 个值为 value 的元素,返回实际删除的元素个数
LINDEX key index获取指定索引的元素值
LSET key index value设置指定索引元素值
LTRIM key start end只保留列表指定片段,其他删除
LINSERT key BEFOREAFTER pivot value
RPOPLPUSH source destination将元素从一个列表转到另一个列表
SADD key member [member …]增加元素
SREM key member [member …]删除元素
SMEMBERS key获取集合中所有元素
SISMEMBER key member判断元素是否在集合中
SDIFF key [key…]求差集
SINTER key [key…]求交集
SUNION key [key…]求并集
SCARD key求集合中元素个数
SDIFFSTORE dest_key key[key…]求差集并将结果保存到 dest_key
SINTERSTORE dest_key key [key…]求交集并将结果保存到 dest_key
SUNION dest_key key [key…]求并集并将结果保存到 dest_key
SRANDMEMBER key count随机生成弹出一个元素集合,当count为负数时出现重复元素可能性很高,这是由哈希与哈希桶原理导致的
SPOP key随机弹出一个元素
EXPIRE key seconds设置一个键的生存时间,成功返回1,否则为0
TTL key返回键的剩余时间,键不存和永久键(默认)在时返回 -1
PERSIST key设置键为永久键,SET与GETSET均会清空过期时间
PEXPIRE key milseconds设置一个键的生存周期,毫秒级
PTTL key返回键的剩余时间,毫秒级
SORT list_key[set_key] [desc limit start end]列表、集合排序
ZADD key向有序集合加入一个元素
ZSCORE key获取元素的分数
ZRANGE key获取排名在某个范围内的元素列表
ZRANGEBYSCORE key获取指定分数范围内的元素
ZINCRBY key inc member增加某个元素的分数
ZCARD key获取集合汇总元素的数量
ZCOUNT key获取指定分数范围内的元素个数
ZREM key删除一个或多个元素
ZREMRANGEBYRANGE key start stop按照排名范围删除元素
ZREMRANGEBYSCORE key min max按照排放分数范围删除元素
ZRANK key member获取元素排名
HKEYS key查看 Hash 的键列表
HVALS key查看 Hash 的值列表
HLEN key查看 Hash 的长度
CONFIG SET修改配置
CONFIG GET获取配置
六、Redis 服务
  1. Redis 服务默认端口为6379
redis-server #最简启动
redis-server /path/to/redis.conf --loglevel warning --port 6380	#设置配置文件,启动端口,修改配置参数
七、Redis 命令行客户端

1、发送命令

redis-cli -h 127.0.0.1 -p 6379 # 连接 Redis 服务器
redis-cli SHUTDOWN #关闭 Redis 服务
redis-cli PING #测试客户端与 Redis 的连接
redis- cli //进入交互模式,方便发送多个命令
redis 127.0.0.1:6379>PING //交互模式中发送PING 命令
PONG //服务器响应,PONG 代表连接成功
redis 127.0.0.1:6379>   //等候输入命令
redis 127.0.0.1:6379> auth 123456   //输入Redis 密码123456

2、命令返回值

redis-cli PING  //发送 PING 命令
PONG # 状态回复
redis-cli ERRORCOMMAND #不存在 ERRORCOMMAND 命令,故错误回复
(error) ERR unknown command 'ERRORCOMMAND'
redis-cli INCR foo
(integer) 1 # 整数回复
redis-cli GET str
"str"  # 字符串回复,空串返回 (nil)
#多行字符串回复,如果没有存储数据返回(empty list or set)
redis-cli KEYS *
1) "str"     
2) "foo"
七、Redis 事务
MULTI
...
EXEC

事务出现语法错误时,所有语句不执行,事务出现运行时错误时,
其他语句正常执行,但 Redis 错误要自行维护,Redis 不支持事务回滚。

八、Redis 内存策略(maxmemory-policy)

注:maxmemory-samples 参数要设置

规则说明
volatile-lru使用 LRU 算法删除一个键(设置了Expire)
allkeys-lru使用 LRU 算法删除一个键
volatile-random随机删除一个键(设置了Expire)
allkeys-random随机删除一个键
volatile-ttl删除生存时间最近的一个键
noeviction不删除键,只返回错误
九、Redis 持久化
  1. 根据配置规则进行自动快照
  2. 用户执行 SAVE 或 BGSAVE
  3. 执行 FLUSHALL 命令
  4. 执行复制(replication)
十、集群
#启动主从服务器
redis-server --port 6380 --slaveof 127.0.0.1 6379
#启动客户端
redis-cli -p 6379
redis-cli -p 6380

节点取余和一致性哈希

十一、docker 运行
# 运行服务端
docker run --name redis  -d -p 6379:6379 -v /opt/data/redis:/data daocloud.io/library/redis:6.0.5
#运行客户端
docker run -it --link redis:redis --rm redis redis-cli -h redis -p 6379 

缓存存在的问题

缓存穿透:
缓存雪崩:指在某个时间点,缓存中的Key集体发生过期失效导致大量的查询数据库的请求都落在数据库上,导致数据库负载过高,压力暴增。
缓存击穿:指缓存中某个频繁被访问的Key过期失效,导致高并发的请求直接请求数据库导致数据库压力一瞬间暴增

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值