Golang-Redis

引入 1 go get github.com/redis/go-redis 基础使用 连接 基于配置的连接 1 2 3 4 5 rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // 没有密码,默认值 DB: 0, // 默认DB 0 }) 基于URL的连接 1 2 3 4 5 6 opt, err := redis.ParseURL("redis://<user>:<pass>@localhost:6379/<db>") if err != nil { panic(err) } rdb := redis.NewClient(opt) 配置TLS 1 2 3 4 5 6 rdb := redis.NewClient(&redis.Options{ TLSConfig: &tls.Config{ MinVersion: tls.VersionTLS12, ServerName: "你的域名", }, }) 基于SSH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 sshConfig := &ssh.ClientConfig{ User: "root", Auth: []ssh.AuthMethod{ssh.Password("password")}, HostKeyCallback: ssh.InsecureIgnoreHostKey(), Timeout: 15 * time.Second, } sshClient, err := ssh.Dial("tcp", "remoteIP:22", sshConfig) if err != nil { panic(err) } rdb := redis.NewClient(&redis.Options{ Addr: net.JoinHostPort("127.0.0.1", "6379"), Dialer: func(ctx context.Context, network, addr string) (net.Conn, error) { return sshClient.Dial(network, addr) }, // SSH不支持超时设置,在这里禁用 ReadTimeout: -1, WriteTimeout: -1, }) 上下文 go-redis支持Context,可以使用它控制超时或者传递一些数据,也可以监控go-redis性能。 ...

2024-09-12 · 2 分钟 · Nebula

Java-Redis

springboot整合 配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 spring: data: redis: # Redis数据库索引(默认为0) database: 1 # Redis服务器地址 host: 127.0.0.1 # Redis服务器连接端口 port: 6379 # Redis服务器连接密码(默认为空) password: # 连接超时时间 timeout: 10s lettuce: pool: # 连接池最大连接数 max-active: 200 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # 连接池中的最大空闲连接 max-idle: 10 # 连接池中的最小空闲连接 min-idle: 0 创建配置类 1 2 3 4 5 6 7 8 9 10 11 12 //设置序列化器 @Configuration public class RedisConfig { @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); //把对象转为json字符串的序列化工具 template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer()); return template; } } 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Autowired private RedisTemplate redisTemplate; @Test public void testObj() throws Exception { User user=new User(1, "java的架构师技术栈", "man"); ValueOperations<String, User> operations=redisTemplate.opsForValue(); operations.set("fdd2", user); boolean exists=redisTemplate.hasKey("fdd2"); System.out.println("redis是否存在相应的key"+exists); User getUser = (User)redisTemplate.opsForValue().get("fdd2"); System.out.println("从redis数据库获取的user:"+getUser.toString()); } //redisTemplate.opsForValue();//操作字符串 //redisTemplate.opsForHash();//操作hash //redisTemplate.opsForList();//操作list //redisTemplate.opsForSet();//操作set //redisTemplate.opsForZSet();//操作有序set

2024-08-09 · 1 分钟 · Nebula

Redis

配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #redis.conf 设置显示行号 :set nu 搜索 /daemonize 把daemonize no 的no改为yes #(该配置为是否让redis作为服务(守护进程)在后台启动) 搜索 /protected-mode 把protected-mode yes 改为no #(该配置为resis的安全模式,当他开启就会禁止别人访问redis,如操作redis的工具) 搜索 /bind 127.0.0.1 -::1 注释掉bind 127.0.0.1 -::1 #(该配置生效时表示只有本机能访问redis,这显然是不行的,注释掉它) 搜索requirepass foobared 把改行的注释取消掉 并把 foobared 改成自己的密码 (该配置为设置自己的redis登录密码) 搜索 /port 6379 把端口号修改成自己需要的端口。 服务启动/结束 1 2 3 4 5 6 7 8 9 10 11 12 13 #使用我们修改好的 redis.conf 配置文件启动服务! redis-server /opt/redis-7.0.0/redis/redis.conf #查看redis服务是否启动 ps -aux | grep redis | grep -v grep #使用我们修改过的 密码 以及 端口号 登录客户端! redis-cli -a 你的密码 -p 你的端口 #在Redis命令行中:输入shutdown退出(quit退出服务) #在Redis命令行外: redis-cli -a 你的密码 -p 你的端口(可填多个端口) shutdown 常用命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 help @? # 查询帮助,比较有用 set k v #设置一个String类型的数据k 值为v get k #获取k?的值 keys * #查询所有key exists k #k是否存在,返回1表示存在 type k #查询数据类型 del k #删除指定key unlink k #异步删除,对于大数据的删除,使用异步防止阻塞 ttl k #数据是否过期,返回-1表示永不过期,-2表示已过期。数据在默认情况下永不过期 expire k S #设置k在s秒后过期(过期会删除该值) move k index #将k移动到下标为index的数据库中 select index #切换到下标为index的数据库 #(redis中我们默认处于0号数据库) dbsize #统计数据库中key的数量 flushdb #清空当前数据库(谨慎使用!) flushall #清空所有数据库(谨慎使用!) 十大数据类型 String(字符串) String是redis中最基本的数据类型,一个key对应1个value redis中的String是二进制安全的(支持序列化),这意味着我们可以将二进制存储的文件存入其中,比如:一张图片。 redis中单个String的最大容量为521M 基础命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 set命令中的可选参数分别有 get EX PX EXAT PXNX NX XX KEEPTTL GET用法 set k1 jack GET #它会把k1赋值为jack,但同时返回k1之前的值 EX用法 set k1 jack EX 10 #设置k1值为jack,但在10秒后过期(expire) PX用法 set k1 jack PX 100 #设置k1值为jack,但在100毫秒后过期 EXAT用法 set k1 jack EXAT 1685775704 #设置k1值为jack,但在指定的秒级unix时间戳后过期 set K1 JACK PXAT 1685775857409 #设置k1值为jack,但在指定的毫秒级unix时间戳后过期 NX用法 set k1 jack NX #当k1不存在时设置k1的值为jack XX用法 set k1 tom XX #当k1存在时才将k1的值设为tom KEEPTTL用法 set k1 jack KEEPTTL #当我们在设置给key赋值时偶然或遇到这样的业务需求,只改变key的值,但不要改变之前设置的过期时间。 #这时我们就需要用到KEEPTTL,要知道普通的set赋值会改变value的过期时间(默认为-1:即永不过期) mset k1 v1 k2 v2 k3 v3 #设置多个值(m multi多个) #注意 mset k1 v1 k2 v2 k3 v3 NX 当其中一个不满足条件则全部失败 mget k1 k2 k3 k4 #获取多个值 getrange k1 1 2 #截取k1,从下标1-下标2 getrange k1 0 -1 #获取全长 setrange k1 1 omomom #定位替换,从下标1开始替换字符串 INCR k2 #递增k2(k2必须为数字!) DECR K2 #递减k2(k2必须为数字!) INCRBY k2 2 #每次递增步长为2 DECRBY k2 #每次递减步长为2 strlen k1 #获取k1的长度 append k1 #往k1尾部插入字符 getset k1 v1 #与set k1 v1 get一样,它会把k1赋值为v1,但同时返回k1之前的值 分布式锁 1 2 3 4 5 setnx k1 jack #当k1不存在设置值为jack setex k1 jack #当k1存在设置值为jack set k1 jack nx与setnx k1 jack区别 ...

2024-08-09 · 7 分钟 · Nebula