当前位置: 首页 > news >正文

西安借贷购物网站建设长沙seo排名外包

西安借贷购物网站建设,长沙seo排名外包,WordPress支持you2php吗,武邑网站建设代理记录之前刚学习Redis 的笔记#xff0c; 主要包括Redis的基本数据结构、Redis 发布订阅机制、Redis 事务、Redis 服务器相关及采用Spring Boot 集成Redis 实现增删改查基本功能 一#xff1a;常用命令及数据结构 1.Redis 键(key) # 设置key和value 127.0.0.1:6379 set … 记录之前刚学习Redis 的笔记 主要包括Redis的基本数据结构、Redis 发布订阅机制、Redis 事务、Redis 服务器相关及采用Spring Boot 集成Redis 实现增删改查基本功能 一常用命令及数据结构 1.Redis 键(key) # 设置key和value 127.0.0.1:6379 set mykey hello OK# 获取key对应的内容 127.0.0.1:6379 get mykey hello# 序列化给定 key 并返回被序列化的值 127.0.0.1:6379 dump mykey \x00\x05hello\t\x00\xb3\x80\x8e\xba1\xb2C\xbb# 判断是否存在某个key是否存在 127.0.0.1:6379 exists mykey (integer) 1 127.0.0.1:6379 exists mykey1 (integer) 0# 查询所有的key 127.0.0.1:6379 keys * 1) mykey 2) mylist1 3) key1 4) list 5) myList 6) mylist 7) friend:a 8) friend:b# 设置key的过期时间 127.0.0.1:6379 expire mykey 20 (integer) 1 127.0.0.1:6379 get mykey hello# 以秒为单位返回给定 key 的剩余生存时间 127.0.0.1:6379 ttl mykey (integer) -2# 返回 key 所储存的值的类型 127.0.0.1:6379 set mykey hello OK 127.0.0.1:6379 type mykey string 127.0.0.1:63792Redis字符串 # 设置键 127.0.0.1:6379 set mykey hello OK 127.0.0.1:6379 get key (nil) 127.0.0.1:6379 get mykey hello# 返回 key 中指定长度的字符串值的子字符 127.0.0.1:6379 getrange mykey 0 4 hello 127.0.0.1:6379 getrange mykey 0 2 hel# 重新设置key的值并且返回老的值 127.0.0.1:6379 getset mykey helloworld hello 127.0.0.1:6379# 获取多个key对应的值 127.0.0.1:6379 mget mykey mykey1 mykey2 mykey3 mykey4 1) helloworld 2) java 3) spring 4) springboot 5) mysql 127.0.0.1:6379# 为指定的 key 设置值及其过期时间如果存在则修改值如果不存在则新增并赋值 127.0.0.1:6379 SETEX mykey4 20 spark OK 127.0.0.1:6379 get mykey4 spark 127.0.0.1:6379 SETEX mykey5 20 Hbase OK 127.0.0.1:6379 get mykey5 Hbase# SETNX 命令在指定key不存在时创建key并设置当key存在时则不处理--原生Redis分布式就是采用这个性质 127.0.0.1:6379 exists presto (integer) 0 127.0.0.1:6379 setnx presto hiveSql (integer) 1 127.0.0.1:6379 get presto hiveSql 127.0.0.1:6379 setnx presto hiveSqlsearch (integer) 0 127.0.0.1:6379 get presto hiveSql 127.0.0.1:6379# 获取指定key值的长度 127.0.0.1:6379 get mykey3 springboot 127.0.0.1:6379 strlen mykey3 (integer) 10# 批量设置key和value 127.0.0.1:6379 mset mykey4 kafka mykey5 redis mykey6 nginx mykey7 oracle OK # 批量获取key和value 127.0.0.1:6379 mget mykey4 mykey5 mykey6 mykey7 1) kafka 2) redis 3) nginx 4) oracle 127.0.0.1:6379# 设置nkey 值为100 127.0.0.1:6379 set nkey 100 OK 127.0.0.1:6379 get nkey 100 # 自增1 127.0.0.1:6379 incr nkey (integer) 101 # 自减1 127.0.0.1:6379 decr nkey (integer) 100 # 加上一定的数 127.0.0.1:6379 incrby nkey 100 (integer) 200 # 减去一定的数 127.0.0.1:6379 decrby nkey 100 (integer) 100# 给指定的key对应的值后面拼接字符串 127.0.0.1:6379 get mykey7 oracle 127.0.0.1:6379 append mykey7 11 (integer) 8 127.0.0.1:6379 get mykey7 oracle11 127.0.0.1:63793Redis 哈希(Hash) # 设置hash表key为field1值为mysql 127.0.0.1:6379 hset hkey field1 mysql (integer) 1 127.0.0.1:6379 hset hkey field2 oracle (integer) 1# 获取hash表的值 127.0.0.1:6379 hget hkey field1 mysql# 获取所有的key 127.0.0.1:6379 hkeys hkey 1) field1 2) field2# 判断hash表中指定key是否存在 127.0.0.1:6379 hexists hkey field3 (integer) 0127.0.0.1:6379 hset hkey field3 spring (integer) 1 127.0.0.1:6379 hget hkey field3 spring# 获取hash表的长度及hash表的元素个数 127.0.0.1:6379 hlen hkey (integer) 3# 获取hash表中所有的key 127.0.0.1:6379 hkeys hkey 1) field1 2) field2 3) field3# hash表元素增加指定量 127.0.0.1:6379 hset hkey field4 100 (integer) 1 127.0.0.1:6379 hget hkey field4 100 127.0.0.1:6379 hincrby hkey field4 100 (integer) 200# 获取hash表中所有的值 127.0.0.1:6379 hvals hkey 1) mysql 2) oracle 3) spring 4) 200# 获取hash表中的多个字段的值 127.0.0.1:6379 hmget hkey field1 field2 field3 field4 1) mysql 2) oracle 3) spring 4) 200# 只有在字段 field 不存在时设置哈希表字段的值 127.0.0.1:6379 hsetnx hkey field5 springboot (integer) 1 127.0.0.1:6379 hsetnx hkey field6 springcloud (integer) 1 127.0.0.1:6379 hsetnx hkey field7 springCloud (integer) 1 127.0.0.1:6379 hsetnx hkey field6 springCloud (integer) 0 127.0.0.1:63794Redis 列表(List) # push 127.0.0.1:6379 lpush lkey spring springboot mybatis mysql oracle kafka redis hive presto clickhourse es spark hbase flink vue (integer) 15# 求长度 127.0.0.1:6379 llen lkey (integer) 15# 根据索引获取元素 127.0.0.1:6379 lindex lkey 0 vue 127.0.0.1:6379 lindex key 1 (nil) 127.0.0.1:6379 lindex lkey 1 flink 127.0.0.1:6379 lindex lkey 5 clickhourse# 获取指定范围索引的值 127.0.0.1:6379 lrange lkey 0 -11) vue2) flink3) hbase4) spark5) es6) clickhourse7) presto8) hive9) redis 10) kafka 11) oracle 12) mysql 13) mybatis 14) springboot 15) spring 127.0.0.1:6379 lrange lkey 0 1 1) vue 2) flink 127.0.0.1:63795.Redis 集合(Set) Set 是 String 类型的无序、不可重复的集合 D:\software\redisredis-cli.exe -h 127.0.0.1 -p 6379\ # 往Set集合添加元素 127.0.0.1:6379 sadd skey redis (integer) 1# 查询Set集合中的元素个数 127.0.0.1:6379 scard skey (integer) 1# 查询Set集合中所有的元素 127.0.0.1:6379 smembers skey 1) redis# 往Set集合中批量添加元素 127.0.0.1:6379 sadd skey mysql oracle hive presto spark hadoop kafka spring springboor springCloud mybatis (integer) 11# 查询Set集合中所有的元素 127.0.0.1:6379 smembers skey1) redis2) spring3) hadoop4) spark5) mybatis6) springboor7) presto8) kafka9) springCloud 10) hive 11) mysql 12) oracle# 往Set集合中添加已经存在的元素添加失败 127.0.0.1:6379 sadd skey redis (integer) 0127.0.0.1:6379 smembers skey1) spring2) hadoop3) spark4) mybatis5) springboor6) presto7) kafka8) springCloud9) hive 10) mysql 11) oracle 12) redis# 批量往Set集合添加元素 127.0.0.1:6379 sadd skey1 mysql oracle hive presto spark hadoop kafka spring springboor springCloud mybatis nginx linux (integer) 13127.0.0.1:6379 smembers skey11) spring2) hadoop3) spark4) mybatis5) springboor6) presto7) kafka8) hive9) mysql 10) springCloud 11) oracle 12) linux 13) nginx# 查询差集在skey集合中存在但是在skey1集合中不存在的数据 127.0.0.1:6379 sdiff skey skey1 1) redis # 查询差集在skey1集合中存在但是在skey集合中不存在的数据 127.0.0.1:6379 sdiff skey1 skey 1) nginx 2) linux 127.0.0.1:6379 sinter skey skey11) spring2) hadoop3) spark4) mybatis5) springboor6) presto7) kafka8) springCloud9) hive 10) mysql 11) oracle# 查询集合skey和集合skey1的差集(在skey存在但是在skey1中不存在的数据)并且存在skey3 127.0.0.1:6379 sdiffstore skey3 skey skey1 (integer) 1 127.0.0.1:6379 smembers skey3 1) redis# 查询集合skey和集合skey1的交集并且存在skey4 127.0.0.1:6379 sinterstore skey4 skey skey1 (integer) 11 127.0.0.1:6379 smembers skey41) hadoop2) kafka3) presto4) spark5) springCloud6) spring7) springboor8) mybatis9) mysql 10) hive 11) oracle# 查询skey4中是否存在元素linux 127.0.0.1:6379 sismember skey4 linux (integer) 0 127.0.0.1:6379 sismember skey4 kafka (integer) 1127.0.0.1:6379 smembers skey11) spring2) hadoop3) spark4) mybatis5) springboor6) presto7) kafka8) hive9) mysql 10) springCloud 11) oracle 12) linux 13) nginx# 把linux元素从skey1移动到skey4(移动后-返回1skey1不存在skey4存在该元素) 127.0.0.1:6379 smove skey1 skey4 linux (integer) 1127.0.0.1:6379 smembers skey41) spring2) hadoop3) spark4) springboor5) mybatis6) presto7) kafka8) springCloud9) mysql 10) hive 11) oracle 12) linux# srandmember表示从集合中一个或多个随机数 127.0.0.1:6379 srandmember skey4 linux 127.0.0.1:6379 srandmember skey4 springCloud 127.0.0.1:6379 srandmember skey4 springboor 127.0.0.1:6379 srandmember skey4 mybatis 127.0.0.1:6379 srandmember skey4 spark 127.0.0.1:6379 srandmember skey4 kafka 127.0.0.1:6379 srandmember skey4 springCloud 127.0.0.1:6379 srandmember skey4 oracle127.0.0.1:6379 smembers skey41) spring2) hadoop3) spark4) springboor5) mybatis6) presto7) kafka8) springCloud9) mysql 10) hive 11) oracle 12) linux 127.0.0.1:6379 smembers skey11) spring2) hadoop3) spark4) mybatis5) springboor6) presto7) kafka8) hive9) mysql 10) springCloud 11) oracle 12) nginx# 返回所有给定集合的并集 127.0.0.1:6379 sunion skey1 skey41) spring2) hadoop3) spark4) springboor5) mybatis6) presto7) kafka8) hive9) springCloud 10) mysql 11) oracle 12) linux 13) nginx# 移除集合中一个或多个成员 127.0.0.1:6379 srem skey4 springCloud (integer) 1# 移除并返回集合中的一个随机元素 127.0.0.1:6379 spop skey4 spark127.0.0.1:6379 smembers skey41) spring2) hadoop3) springboor4) mybatis5) presto6) kafka7) mysql8) hive9) oracle 10) linux 127.0.0.1:6379 spop skey4 kafka 127.0.0.1:6379 smembers skey4 1) spring 2) hadoop 3) springboor 4) mybatis 5) presto 6) mysql 7) hive 8) oracle 9) linux 127.0.0.1:63796.Redis 有序集合(sorted set) sorted set是一个有序、不重复的集合。每个元素都会关联一个double类型的分数通过分数为集合中的成员进行从小到大进行排序。底层是通过哈希表实现的添加、删除、查询的时间复杂度都是O(1) 有序集合的元素不可重复但是分数可以重复 D:\software\redisredis-cli.exe -h 127.0.0.1 -p 6379# 新建key为C的sorted set并往里批量添加元素 127.0.0.1:6379 zadd C 99 zhangsan 89 lisi 88 wangwu 79 zhaoliu 60 xiaoqi (integer) 5# 查询有序集合中的成员数 127.0.0.1:6379 zcard C (integer) 5# 查询指定区间分数min max的元素个数 127.0.0.1:6379 zcount C 90 100 (integer) 1 127.0.0.1:6379 zcount C 80 90 (integer) 2 127.0.0.1:6379 zcount C 70 80 (integer) 1 127.0.0.1:6379 zcount C 60 70 (integer) 1# 给有序集合中某个元素的分数添加上指定的值 127.0.0.1:6379 zincrby C 10 xiaoqi 70# 查询有序集合中的全部的元素 127.0.0.1:6379 zrange C 0 -1 1) xiaoqi 2) zhaoliu 3) wangwu 4) lisi 5) zhangsan# 查询有序集合中的全部的元素及值 127.0.0.1:6379 zrange C 0 -1 WITHSCORES1) xiaoqi2) 703) zhaoliu4) 795) wangwu6) 887) lisi8) 899) zhangsan 10) 99# 查询有序集合中的指定分数区间对应的元素 127.0.0.1:6379 ZRANGEBYSCORE C 90 100 1) zhangsan# 查询有序集合中所有的元素并且按照升序排序 127.0.0.1:6379 ZRANGEBYSCORE C -inf inf 1) xiaoqi 2) zhaoliu 3) wangwu 4) lisi 5) zhangsan# 查询有序集合中所有的元素及分数并且按照升序排序 127.0.0.1:6379 ZRANGEBYSCORE C -inf inf WITHSCORES1) xiaoqi2) 703) zhaoliu4) 795) wangwu6) 887) lisi8) 899) zhangsan 10) 99# 查询有序集合中分数为90以下的元素 127.0.0.1:6379 ZRANGEBYSCORE C -inf 90 1) xiaoqi 2) zhaoliu 3) wangwu 4) lisi# 查询有序集合中分数为90以下的元素及对应的分数 127.0.0.1:6379 ZRANGEBYSCORE C -inf 90 WITHSCORES 1) xiaoqi 2) 70 3) zhaoliu 4) 79 5) wangwu 6) 88 7) lisi 8) 89# 查询有序集合中分数为90以下的元素及对应的分数 127.0.0.1:6379 ZRANGEBYSCORE C 70 inf WITHSCORES1) xiaoqi2) 703) zhaoliu4) 795) wangwu6) 887) lisi8) 899) zhangsan 10) 99# 查询指定元素在有序集合中的元素排序不存在会返回nil 127.0.0.1:6379 zrank zkey zhangsan (nil) 127.0.0.1:6379 zrank C zhangsan (integer) 4 127.0.0.1:6379 zrank C xiaoqi (integer) 0 127.0.0.1:6379 zrank C zhaoliu (integer) 1# 返回有序集中指定分数区间内的元素分数从高到低排序 ZREVRANGEBYSCORE key max min 127.0.0.1:6379 ZREVRANGEBYSCORE C 100 60 1) zhangsan 2) lisi 3) wangwu 4) zhaoliu 5) xiaoqi# 返回有序集中指定分数区间内的元素及分数分数从高到低排序 ZREVRANGEBYSCORE key max min 127.0.0.1:6379 ZREVRANGEBYSCORE C 100 60 WITHSCORES1) zhangsan2) 993) lisi4) 895) wangwu6) 887) zhaoliu8) 799) xiaoqi 10) 70# 查询有序集合中所有的元素 按照分数从大到小 127.0.0.1:6379 ZREVRANGEBYSCORE C inf -inf 1) zhangsan 2) lisi 3) wangwu 4) zhaoliu 5) xiaoqi# 查询有序集合中所有的元素 按照分数从大到小 ZREVRANGEBYSCORE key max min 127.0.0.1:6379 ZREVRANGEBYSCORE C 60 80 (empty list or set)127.0.0.1:6379 ZREVRANGEBYSCORE C 80 60 1) zhaoliu 2) xiaoqi# 查询有序集合中所有的元素及对应的分数 按照分数从大到小 ZREVRANGEBYSCORE key max min 127.0.0.1:6379 ZREVRANGEBYSCORE C 80 60 WITHSCORES 1) zhaoliu 2) 79 3) xiaoqi 4) 70# 返回有序集合中指定元素在集合中的排名按照分数降序排序 127.0.0.1:6379 zrevrank C zhangsan (integer) 0 127.0.0.1:6379 zrevrank C xiaoqi (integer) 4# 返回有序集合中指定元素对应的分数 127.0.0.1:6379 zscore C zhangsan 99# 新建Java 有序集合 127.0.0.1:6379 zadd Java 99 zhangsan 89 lisi 88 wangwu 79 zhaoliu 60 xiaoqi (integer) 5# 计算两个有序集合的分数值 127.0.0.1:6379 ZINTERSTORE scores 2 C Java (integer) 5 127.0.0.1:6379 zrange scores 0 -1 1) xiaoqi 2) zhaoliu 3) wangwu 4) lisi 5) zhangsan # 查询计算分数值后的有序集合 127.0.0.1:6379 zrange scores 0 -1 WITHSCORES1) xiaoqi2) 1303) zhaoliu4) 1585) wangwu6) 1767) lisi8) 1789) zhangsan 10) 198 127.0.0.1:6379二Redis发布与订阅 发布端 D:\software\redisredis-cli.exe -h 127.0.0.1 -p 6379# 发布消息 127.0.0.1:6379 publish mychat start my chat (integer) 1127.0.0.1:6379 publish mychat hello ! (integer) 1 127.0.0.1:6379 pubsub channels 1) mychat 127.0.0.1:6379 punsubscribe mychat 1) punsubscribe 2) mychat 3) (integer) 0 127.0.0.1:6379 publish mychat hello ! (integer) 1 127.0.0.1:6379三Redis 事务 什么是Redis事务 Redis 事务可以一次执行多个命令 批量操作在发送EXEC命令前被放入到缓存中【开始事务】收到EXEC命令后进入事务执行事务中任意命令执行失败其余的命令依然被执行【命令入列】在事务执行过程其他客户端提交的命令请求不会插入到事务执行命令序列中【执行事务】 事务案例 D:\software\redisredis-cli.exe -h 127.0.0.1 -p 6379 # 开启事务 127.0.0.1:6379 multi OK # 往List里面批量添加元素返回QUEUED表示命令存入队列中 127.0.0.1:6379 lpush book C Java C Linux Spring SpringBoot Hive Presto QUEUED# 查询List中所有元素返回QUEUED表示命令存入队列中 127.0.0.1:6379 lrange book 0 -1 QUEUED# 错误命令演示 127.0.0.1:6379 sadd C 90 zhangsan 88 lisi 79 wangwu 94 zhaoliu QUEUED# 执行命令 127.0.0.1:6379 exec# 第一个命令执行成功往List里面添加了8个元素 1) (integer) 8# 第二个命令执行成功返回List中的所有数据 2) 1) Presto2) Hive3) SpringBoot4) Spring5) Linux6) C7) Java8) C# 第三个命令执行错误 3) (error) WRONGTYPE Operation against a key holding the wrong kind of value 127.0.0.1:6379# 演示取消事务 # 开启事务 127.0.0.1:6379 multi OK 127.0.0.1:6379 lpush book1 C Java C Linux Spring SpringBoot Hive Presto QUEUED 127.0.0.1:6379 lrange book1 0 -1 QUEUED 127.0.0.1:6379 discard OK 127.0.0.1:6379 lrange book1 0 -1 (empty list or set) 127.0.0.1:6379事务可以理解为一个打包的批量执行脚本但批量指令并非原子化的操作中间某条指令的失败不会导致前面已做指令的回滚也不会造成后续的指令不做。 四Redis服务器 # 手动触发异步式重写AOF 127.0.0.1:6379 bgrewriteaof Background append only file rewriting started# 异步保存当前数据库的数据到磁盘 127.0.0.1:6379 BGSAVE Background saving started# 获取连接到服务器的客户端连接列表 127.0.0.1:6379 client list id9 addr127.0.0.1:56993 fd11 name age6255 idle0 flagsN db0 sub0 psub0 multi-1 qbuf26 qbuf-free32742 obl0 oll0 omem0 eventsr cmdclient# 关闭客户端连接 127.0.0.1:6379 client kill 127.0.0.1:56993 OK # 之前的连接已经被关闭CLI 客户端又重新建立了连接,之前端口号是56993 现在是59469 127.0.0.1:6379 client list id10 addr127.0.0.1:59469 fd10 name age0 idle0 flagsN db0 sub0 psub0 multi-1 qbuf26 qbuf-free32742 obl0 oll0 omem0 eventsr cmdclient# 获取连接的客户端的名称 127.0.0.1:6379 client getname (nil) # 设置连接客户端的名称 127.0.0.1:6379 client setname hello-wordld-connection OK 127.0.0.1:6379 client getname hello-wordld-connection# 获取Redis命令详情 127.0.0.1:6379 command # 获取Redis命令总数 127.0.0.1:6379 command count (integer) 200# 获取Reids 中所有的key 127.0.0.1:6379 dbsize (integer) 30 127.0.0.1:6379 set k v OK 127.0.0.1:6379 dbsize (integer) 31# 切换到1号数据库dbsize查看1号数据库的key为0 127.0.0.1:6379 select 1 OK 127.0.0.1:6379[1] dbsize (integer) 0 # 在1号数据库添加数据 127.0.0.1:6379[1] set key Java OK 127.0.0.1:6379[1] set Key1 C OK 127.0.0.1:6379[1] get key Java 127.0.0.1:6379[1] get Key1 C 127.0.0.1:6379[1] dbsize (integer) 2 # 清空整个 Redis 服务器的数据 127.0.0.1:6379[1] fluahall (error) ERR unknown command fluahall, with args beginning with: 127.0.0.1:6379[1] flushall OK 127.0.0.1:6379[1] dbsize (integer) 0# 返回最近一次Redis成功把数据保存到磁盘上的时间以 UNIX 时间戳格式表示 127.0.0.1:6379[1] lastsave (integer) 1687104505# 列出连接客户端 127.0.0.1:6379 client list id15 addr127.0.0.1:61301 fd13 name age68 idle0 flagsN db0 sub0 psub0 multi-1 qbuf26 qbuf-free32742 obl0 oll0 omem0 eventsr cmdclient# Slaveof 命令可以将当前服务器转变为指定服务器的从属服务器(slave server) # 如果当前服务器已经是某个主服务器(master server)的从属服务器那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步丢弃旧数据集转而开始对新主服务器进行同步 # 对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能并从从属服务器转变回主服务器原来同步所得的数据集不会被丢弃 # 利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性可以在主服务器失败的时候将从属服务器用作新的主服务器从而实现无间断运行。 127.0.0.1:6379 SLAVEOF 127.0.0.1 61301 OK 127.0.0.1:6379五Redis GEO Redis GEO 主要用于存储地理位置信息并对存储的信息进行操作该功能在 Redis 3.2 版本新增。 Redis GEO 操作方法有 geoadd添加地理位置的坐标。geopos获取地理位置的坐标。geodist计算两个位置之间的距离。georadius根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。georadiusbymember根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。geohash返回一个或多个位置对象的 geohash 值。 六Redis客户端 1.Jedis 优点 以Redis命令作为方法的名称学习成本低简单使用提供了比较全面的Redis命令支持 缺点 Jedis实例是线程不安全的同步阻塞IO不支持异步多线程环境下需要基于连接池来使用 使用案例 1创建项目引入依赖 dependencies!-- Jedis --dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion3.7.0/version/dependencydependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter/artifactIdversion5.7.1/versionscopetest/scope/dependency/dependencies2编写测试代码 public class JedisTest {private Jedis jedis;BeforeEachvoid setUp() {//1.建立连接jedis new Jedis(127.0.0.1, 6379);//2.设置密码如果Reis有设置密码的话必须手动设置密码否则无须指定密码// jedis.auth(123456);//3.选择库jedis.select(0);}Testvoid testString() {//存入String key k1;String value 张三;String result jedis.set(key, value);System.out.println(result result);//读取String name jedis.get(key);System.out.println(name name);}Testvoid testHash() {MapString, String map new HashMap();map.put(k, C);map.put(k1, Java);map.put(k2, C);map.put(k3, Spring);map.put(k4, SpringBoot);String key tech;Long result jedis.hset(key, map);if (result ! 0) {//获取所有的keySetString hkeys jedis.hkeys(key);System.out.println(获取所有的key hkeys.toString());//获取hash表的值ListString hvals jedis.hvals(key);System.out.println(获取hash表的值 Arrays.toString(hvals.toArray()));//获取hash表长度Long hlen jedis.hlen(key);System.out.println(获取hash表长度,len hlen);//获取hash表中多个字段的值ListString hmget jedis.hmget(key, k, k1, k2, k3);System.out.println(获取hash表中多个字段的值 Arrays.toString(hmget.toArray()));}}//执行后AfterEachvoid tearDown() {if (null ! jedis) {jedis.close();}} }上述代码在多线程场景下会出现线程安全问题可以采用Jedis的线程池处理 // 定义工具类 public class JedisConnectionFactory {private static final JedisPool jedisPool;static {JedisPoolConfig jedisPoolConfig new JedisPoolConfig();// 最大连接jedisPoolConfig.setMaxTotal(8);// 最大空闲连接jedisPoolConfig.setMaxIdle(8);//最小空闲连接jedisPoolConfig.setMinIdle(0);// 设置最长等待时间msjedisPoolConfig.setMaxWaitMillis(200);jedisPool new JedisPool(jedisPoolConfig, 127.0.0.1X, 6379, 1000);}public static Jedis getJedis() {return jedisPool.getResource();} }对于上述代码改造只需要把创建连接的方式调整成从连接吃里面获取即可 BeforeEachvoid setUp() {jedis JedisConnectionFactory.getJedis();jedis.select(0);}2.Lettuce 优点 Lettuce是基于Netty实现的支持同步、异步和响应式编程方式并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。 缺点 API更抽象学习成本高 3.Redisson 优点 Redisson是一个基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map、Queue、Lock、 Semaphore、AtomicLong等强大功能。 缺点 API更抽象学习成本高 七SpringBoot 整合Redis 1.创建SpringBoot 项目 2.引入依赖完整pom文件 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.5.7/versionrelativePath//parentgroupIdcom.example/groupIdartifactIdspring-redis/artifactIdversion0.0.1-SNAPSHOT/versionnamespring-redis/namedescriptionspring-redis/descriptionpropertiesjava.version8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency!--common-pool--dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId/dependency!--Jackson依赖--dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build/project3.配置文件 application.yaml spring:data:redis:host: 127.0.0.1port: 6379lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: 100ms4.测试使用RedisTemplate操作Redis SpringBootTest class SpringRedisApplicationTests {Autowiredprivate RedisTemplate redisTemplate;Testvoid testString() {redisTemplate.opsForValue().set(zhangsan, 张三);Object zhangsan redisTemplate.opsForValue().get(zhangsan);System.out.println(name zhangsan);}}八Redis 序列化器 RedisSerializer又包含以下几个序列化器 我们可以自定义Redis 序列化器具体如下 Configuration public class RedisConfig {Beanpublic RedisTemplateString, Object redisTemplate(RedisConnectionFactory connectionFactory){// 创建RedisTemplate对象RedisTemplateString, Object template new RedisTemplate();// 设置连接工厂template.setConnectionFactory(connectionFactory);// 创建JSON序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer new GenericJackson2JsonRedisSerializer();// 设置Key的序列化template.setKeySerializer(RedisSerializer.string());template.setHashKeySerializer(RedisSerializer.string());// 设置Value的序列化template.setValueSerializer(jsonRedisSerializer);template.setHashValueSerializer(jsonRedisSerializer);// 返回return template;} }使用自定义序列化器后就能解决上述不规则的字节形式 存储对象时自定义的Redis序列化器也会自动把对象转成JSON后存储反序列化时可以把JSON转成对象 Testvoid testSaveUser() {// 写入数据redisTemplate.opsForValue().set(user:100, new User(李四, 18));// 获取数据User o (User) redisTemplate.opsForValue().get(user:100);System.out.println(o o);}执行成功可以查看到此时存储的是JSON格式的数据 尽管JSON的序列化方式可以满足我们的需求但依然存在一些问题如图 为了在反序列化时知道对象的类型JSON序列化器会将类的class类型写入json结果中存入Redis会带来额外的内存开销。 StringRedisTemplate 使用StringRedisTemplate解决上述出现的问题具体如下 SpringBootTest class RedisStringTests {Autowiredprivate StringRedisTemplate stringRedisTemplate;Testvoid testString() {// 写入一条String数据stringRedisTemplate.opsForValue().set(k3, 老六);// 获取string数据Object name stringRedisTemplate.opsForValue().get(k3);System.out.println(k3 name);}private static final ObjectMapper mapper new ObjectMapper();Testvoid testSaveUser() throws JsonProcessingException {// 创建对象User user new User(王五, 19);// 手动序列化String json mapper.writeValueAsString(user);// 写入数据stringRedisTemplate.opsForValue().set(user:200, json);// 获取数据String jsonUser stringRedisTemplate.opsForValue().get(user:200);// 手动反序列化User user1 mapper.readValue(jsonUser, User.class);System.out.println(user1 user1);}Testvoid testHash() {stringRedisTemplate.opsForHash().put(user:400, name, 王五);stringRedisTemplate.opsForHash().put(user:400, age, 19);MapObject, Object entries stringRedisTemplate.opsForHash().entries(user:400);System.out.println(entries entries);} }此时只存对象的类型不会存储对象所在类的类型。
http://www.sczhlp.com/news/200167/

相关文章:

  • 中医院网站建设方案网络推广培训机构哪个比较好
  • 东莞网站建设员seo推广排名平台有哪些
  • 怎样建设网站最好抖音代运营服务流程
  • 地铁公司招聘信息网站乐从网站制作
  • 南京网站设计公司有哪些公司十款免费软件app下载入口
  • se 网站优化wordpress 迁移 域名
  • 建设银行网站的特点优势网站建设全网推广
  • 网站建设的优势何江免费域名解析网站
  • 江门关键词排名工具贵州网站优化公司
  • 网站seo主要是做什么的石家庄邮电职业技术学院
  • 2017做哪些网站致富锡山区企业网络推广
  • 菏泽县建设局网站刘强东当年做网站读的什么书
  • 网站备案 更换接入商wordpress鼠标停留
  • 网站上做视频如何盈利加盟店排行榜加盟项目排行榜
  • 酒店网站建设与设计公司h5小程序开发多少钱一天
  • 网站推广指标包括怎么提高网站百度权重
  • 网站模板 带后台徐州经济开发区网站
  • 剪映高级感口播动态文字字幕排版预设标题入场出场动画素材850款
  • JavaScript 中的安全编码:10 个关键实践
  • 2025 年最新推荐!国内优质球墨铸铁管厂家排行榜,涵盖市政 / 给水 / 水利工程适用产品
  • STM32 代码
  • 2025 年最新冷水机定制厂家排行榜:工业 / 防爆 / 低温 / 水冷 / 螺杆 / 超低温等多类型冷水机优质品牌推荐
  • 热 网站正在建设中在线二级域名子域名查询
  • 企业网站建设的主要步骤肇庆城乡建设网站
  • 中英文网站设计便民信息发布平台
  • 东莞网站的制作温州市人才市场招聘网最新招聘
  • 做漆包线的招聘网站wordpress 打卡
  • 沂源网站建设yx718wordpress所有图片都裁剪
  • 广西建设工程质量安全监督网站wordpress htaccess 下载
  • 设计类投稿网站2018年淘宝客网站怎么做