缓存中间件
Redis
深漂小码哥
芝兰生于深林,不以无人而不芳;君子修道立德,不为穷困而改节!
展开
-
Java Redis发送短信验证码
package com.redis.demo;import redis.clients.jedis.Jedis;import java.util.Random;public class PhoneCode { public static void main(String[] args) { // 模拟验证码发送 verifyCode("13899996666"); } // 3.验证码校验 public static void ge.原创 2022-04-17 12:27:55 · 1765 阅读 · 0 评论 -
缓存雪崩、缓存穿透、缓存击穿及解决方案概述
1.缓存雪崩:大量的缓存在同一时间失效,导致大量请求直接到数据库 解决方案:(1)永久缓存或设置不同缓存时间或者(2)部署到不同物理节点上(3)定时任务刷新缓存2.缓存穿透:用户请求不存在的数据,不在缓存中,也不在数据库中,例如ID为负数解决方案:(1)无意义数据也进行缓存,下次就会命中(2)一般都是恶意用户,拉黑ip(3)参数合法性校验(4)布隆过滤器3.缓存击穿:一般某一热点key突然失效,例如秒杀的时候解决方案:(1)用户缓存(2)分布式锁..原创 2021-08-08 08:26:13 · 227 阅读 · 0 评论 -
Redis快照持久化和AOF持久化
redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)里,数据保存到硬盘的过程就叫做持久化。1.快照持久化(snap shotting)该持久化默认开启,一次性把redis中全部的数据保存存储在硬盘中,如果数据非常多(10-20G)就不适合频繁该持久化操作(1)快照持久化保留在本地硬盘的数据库备份文件:dump.rdb(2)快照持久化备份的频率,save 900 1 #900秒内如果超过1个key被修改,就原创 2021-04-17 00:08:55 · 254 阅读 · 0 评论 -
Redis哈希类型Hash常用命令
hset key field value // 设置hash, field 为指定值,如果key不存在,则先创建hget key field // 获取指定hash fieldhmget key filed1 field2 ... fieldN // 获取全部指定的hash fieldhmset key field1 value1 field2 value2 ... fieldN valueN // 同时设置hash 的多个fieldhincrby key field integer // 将指.原创 2021-04-16 23:19:08 · 233 阅读 · 0 评论 -
Redis排序集合类型Sort Set
1. 基本介绍sorted set 也是string类型元素的集合不同的是每一个元素都会关联一个权通过权值可以有序的获取集合中的元素2.应用场景获得热门帖子回复量最高的5个select * from message order by backnum desc limit 5;SQL语句比较耗费数据库资源集合每增加一个新元素,就把权值最低的那个元素删除(增加一个新元素就删除一个旧元素)3.常用命令zadd key score member // 添加元素到集合,原创 2021-04-16 22:15:25 · 614 阅读 · 0 评论 -
Redis集合类型
1.基本介绍redis 的set 是string类型的无序集合set最大可包含2^32-1个元素关于set集合类型,除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些可以很容易实现sns中好友推荐功能注意:每个集合中各个元素不能重复2.应用场景qq好友推荐:zhangsan的朋友圈:a, b,c,d,elisi的朋友圈:h,i, j,c, e则推荐好友: c, e3.常用原创 2021-04-16 20:47:04 · 458 阅读 · 0 评论 -
Redis链表List相关操作
1.基本介绍List类型其实就是一个双向链表,通过push,pop操作从链表的头部或尾部添加删除元素,这使得list既可以用作栈也可以用作队列2.应用场景获取最新的10个登录用户信息,select * from user order by logintime desc limit 10;以上SQL语句可以实现需求,但是数据多的时候,全部数据都要受到影响,对数据库的负载比较高,必要情况下,还需要给关键字(id或logintime)设置索引,索引也比较耗费系统资源如果通过List链表实原创 2021-04-16 18:48:17 · 256 阅读 · 0 评论 -
Redis 字符串类型string相关操作
1.基本说明string是redis最基本的类型redis的string可以包含任何数据,包括jpg图片或者序列化的对象单个value最大上限是1G字节如果只用string类型,redis就可以被看做是加上持久化的memchache2.常用命令set key value // 设置key对应的值为string类型的valuemset key1 value1... keyN valueN // 一次设置多个key的值mget key1... keyN // 一次获取多个key的值原创 2021-04-16 17:57:47 · 190 阅读 · 0 评论 -
Redis键key相关操作命令
keys键操作exists key // 测试指定key是否存在del key1 key2 ...keyN // 删除指定keytype key // 返回指定key的value类型keys pattern // 返回匹配指定模式的所有keyrename oldkey newkey // 重命名dbsize // 返回当前数据库的key数量expire key seconds // 为key指定过期时间ttl key // 返回key的剩余过期秒数select db-index //.原创 2021-04-16 17:21:01 · 312 阅读 · 0 评论 -
Redis和Memcache比较
1.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储2.Redis支持master-slave(主从)模式应用3.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重载的时候可以再次加载使用4.Redis单个value的最大限制是1GB,memcached只能保存1MB的数据...原创 2021-04-16 08:39:29 · 269 阅读 · 0 评论 -
缓存击穿及解决方案
缓存击穿:由于缓存热点键到时失效,导致用户直接访问数据库解决方案:1.设置缓存永远不过期2.分布式锁,单体应用可以用互斥锁。原理:首先大量的用户访问redis请求数据库,如果有数据就返回给用户,如果redis里的数据为空的话,就请求数据库,就在请求数据库这一步给它上锁,那么这时候就只有一个线程,能指到这个锁,所以也就只有一个线程能操作数据库,那么这个时候对数据库的压力就非常小,当查询到这个数据之后,就把缓存重新写到redis中去,其他没有抢到锁的线程,让它先睡几毫秒,然后再重新去redis里面去原创 2021-04-16 08:02:22 · 1945 阅读 · 0 评论 -
缓存穿透及解决方案
缓存穿透:是指缓存和数据库中都没有的数据。一般常见于黑客攻击。比如请求id=-1的数据,这种数据直接穿透缓存,打到数据库上,导致数据库挂掉。解决方案:1.无论查询到什么结果,都缓存到redis中去,这样下次同一参数再发请求的时候,就不会穿透redis2.将 这个IP拉黑3.对参数的合法性进行校验,参数不合法直接return掉4.使用布隆过滤器...原创 2021-04-16 07:54:27 · 222 阅读 · 0 评论 -
缓存雪崩及解决方案
缓存雪崩:redis缓存在key同一时间大量失效导致大量请求全部打到数据库,造成数据库挂掉解决方案:1.设置缓存的失效时间, 让它不要再同一时间失效,设置缓存的时候,随机初始化失效时间2.集群部署,热点的key,放到不同的节点上,让热点的key平均分不到不同的redis节点上3.不设置缓存失效时间,让它永远不失效4.定时任务,定时刷新缓存...原创 2021-04-16 07:50:33 · 402 阅读 · 0 评论 -
Golang操作Redis连接池
package mainimport ( "fmt" "github.com/garyburd/redigo/redis")var pool *redis.Pool// 程序启动时,初始化连接池func init() { pool = &redis.Pool{ MaxIdle: 8, // 最大空闲连接数 MaxActive: 0, // 数据库最大连接数,0表示不限制 IdleTimeout: 100, // 最大空闲时间 Dial: func() (redi.原创 2021-02-02 22:51:37 · 451 阅读 · 1 评论 -
Go语言操作Redis的Hash类型
package mainimport ( "fmt" "github.com/garyburd/redigo/redis")func main() { c, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { fmt.Println("Connect to redis error", err) return } defer c.Close() _, err = c.Do("HSET", "user01", ".原创 2021-02-02 21:49:12 · 394 阅读 · 0 评论 -
Go语言连接redis
package mainimport ( "fmt" "github.com/garyburd/redigo/redis")func main() { c, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { fmt.Println("Connect to redis error", err) return } defer c.Close() _, err = c.Do("SET", "golang", "h.原创 2021-02-02 21:32:35 · 387 阅读 · 0 评论 -
creating server tcp listening socket 127.0.0.1:6379: bind No error
window下安装redis报错:creating server tcp listening socket 127.0.0.1:6379: bind No error的解决方案如下按顺序输入如下命令就可以连接成功1. redis-cli.exe2. shutdown3. exit4. redis-server.exe redis.windows.conf...原创 2019-12-06 15:55:02 · 438 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】哈希类型之hMget
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->flu...原创 2018-08-31 08:43:58 · 1701 阅读 · 1 评论 -
【thinkphp5操作redis系列教程】字符串类型setex和psetex
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); //setEx() 给指定的k...原创 2018-08-25 15:26:34 · 2106 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之set和get
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); // 设置指定key的值 ...原创 2018-08-25 15:05:56 · 448 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】简单模拟消息队列
1.入队操作<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); $arr =...原创 2018-08-25 11:29:02 · 5035 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】pconnect(或popen)连接
1.pconnect /** * Connects to a Redis instance or reuse a connection already established with pconnect/popen. * * The connection will not be closed on close or end of request until...原创 2018-08-25 08:16:20 · 1248 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】connect(或open)连接
1.连接函数 /** * Connects to a Redis instance. * * @param string $host can be a host, or the path to a unix domain socket * @param int $port optional * ...原创 2018-08-25 07:39:16 · 3078 阅读 · 0 评论 -
win7以及ubuntu14下安装redis
1.下载https://github.com/MicrosoftArchive/redis/releases 解压2.解压目录Redis-x64-3.2.100.zip ,并将解压目录添加到系统pathz中3.打开一个 cmd 窗口 运行 redis-server.exe redis.windows.conf 。即可看到如下4.下载 phpredis.dll扩展包根据自...原创 2018-08-24 22:56:04 · 223 阅读 · 0 评论 -
php版本Redis扩展源码分析
<?php/** * php redis扩展 * @author Max Kamashev <max.kamashev@gmail.com> * @link https://github.com/ukko/phpredis-phpdoc * * @method echo string $string Sends a string to Redis, which re...原创 2018-08-24 21:42:11 · 1083 阅读 · 0 评论 -
redis基本数据类型简单demo
1.字符串(string)2.哈希(hash)3.列表(list)4.集合(set)5.有序集合(zset)原创 2018-08-23 07:42:47 · 333 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之delete
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); $redis->se...原创 2018-08-25 16:41:13 · 2089 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之getSet
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); // getset() 用于...原创 2018-08-25 16:56:58 · 573 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之multi,exec,discard
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); // multi() 将多个...原创 2018-08-25 17:06:43 · 557 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】集合类型之sRem,sRemove
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->flu...原创 2018-08-27 06:33:14 · 1446 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之getMultiple
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // getMultipl...原创 2018-08-26 08:08:55 · 1451 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之mGet
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); // mGet() 获取所有...原创 2018-08-26 08:08:46 · 829 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之setBit,getBit
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); // setBit() 设置...原创 2018-08-26 08:08:33 · 738 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之setRange,getRange
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); // setRange() ...原创 2018-08-26 08:08:22 · 523 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之append
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); // append() 对指...原创 2018-08-26 08:07:52 · 1265 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之incr,incrBy,decr,decrBy,incrByFloat
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); // incr() 对指定的...原创 2018-08-26 08:07:31 · 1513 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之exists
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); // exists() 判断...原创 2018-08-25 17:35:06 · 1009 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】字符串类型之watch,unwatch
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); // watch() 监控一...原创 2018-08-25 17:17:26 · 602 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】哈希类型之hMset
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->flu...原创 2018-08-31 08:43:47 · 1824 阅读 · 0 评论 -
【thinkphp5操作redis系列教程】哈希类型之hIncrBy,hIncrByFloat
<?phpnamespace app\index\controller;use Redis;class Index{ public function index() { $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->flu...原创 2018-08-30 08:56:24 · 967 阅读 · 0 评论