Redis :
1.概念:redis 是一款高性能的NOSQL系列的非关系型数据库
2.下载安装:
1、官网:https://redis.io
2、中文网:http://www.redis.net.cn/
3.解压可以直接使用:
redis.windows.conf : 配置文件
redis-cli.exe : redis 的客户端
redis-server.exe : redis 服务器端
3.命令操作
1、redis 的数据结构:
redis存储的是:key,value 格式的数据【键值对】,其中key都是字符串,value有5种不同的数据结构
value 的数据结构 :
(1)、字符串类型 :string
(2)、哈希类型 hash : map格式
(3)、列表类型 list :linkedList格式【链表】
(4)、集合类型 set :元素不重复
(5)、有序集合类型 sortedset :排序、元素不重复
2.字符串类型:string
1、存储:set key value
set username zhangsan
2、获取:get key
get username --> "zhagnsan"
3、删除:del key
del username
3.哈希类型 hash
1、存储 :hset key field value
hset myhash username lisi
2、获取 :hget key field
hget key field : 获取指定的 field 对应的值
hget myhash username
hgetall key : 获取所有的field和value
hgetall myhash
3、删除 :hdel key field
hdel myhash username
4.列表类型 list : 可以添加一个元素到列表的头部(左边)或者尾部(右边)
1、添加:
1. lpush key value : 从元素加入到列表的左边
lpush mylist a
lpush mylist b
2. rpush key value : 将元素加入列表右边
rpush mylist c
2、获取:
1. lrange key start end : 范围获取
lrange mylist 0 -1 --> "b","a","c"
3、删除:
lpop key : 删除列表最左边的元素,并将元素返回
lpop mylist --> "b" 【"a","c"】
rpop key : 删除列表最右边的元素,并将元素返回
rpop mylish --> "c"【"a"】
5.集合类型 set : 不允许重复元素(无序)
1.存储 :sadd key value
sadd myset a b c d
2.获取 :smembers key : 获取 set 元素集合中所有元素
smembers myset --> "a","b","d","c"
3.删除 : srem key value : 删除 set 集合中的某个元素
srem myset a --> "b","d","c"
6.有序集合类型 sortedset : 不允许重复元素,且元素有序
1、存储 :zadd key score value : 【value:数据,score:分数,将来会按照score(double类型) 排序 value】
zadd mysort 60 zhangsan
zadd mysort 50 lisi
zadd mysort 80 wangwu
2、获取 :zrange key start end
zrange mysort 0 -1 --> 【"lisi","zhangsan","wangwu"】
获取值带上value :zrange mysort 0 -1 withscors --> 【"lisi","50","zhangsan","60","wangwu","80"】
3、删除 :zrem key value
zrem mysort lisi --> 【"zhangsan","wangwu"】
--------------------------------------------------------------------------------
ps : zadd mysort zhangsan 600 --> 【"wangwu","zhangsan"】, 即:如果添加的键名一样但是 score 不一样,则会根据新添加的键名的 score 进行排序
7.通用命令
1.key * : 查询所有的键
2.type key : 获取键对应的 value 类型
3.del key :删除指定的 key value
4.持久化
1.redis 是一个内存数据库,当redis服务器重启,或者电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中
2.redis 的持久化机制 :
1.RDB【推荐使用】 : 默认方式,不需要进行配置,默认就使用这种机制
在一定的间隔事件中,检测 key 的变化情况,然后去持久化数据
1.编辑 redis.windows.conf 文件
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
eg : 900秒(15分钟)之后有一个 key 发生变化就持久化一次
2.重新启动 redis 服务器并指定配置文件名称 : redis-server.exe redis.windows.conf
2.AOF : 日志记录的方式,可以记录每一条命令的操作,可以每一次命令操作后,持久化数据
1.编辑 redis.windows.conf 文件
【默认关闭AOF】 ,把 no 更改为 yes 【开启AOF】
always : 每一次操作都进行持久化
everysec :每隔一秒进行一次持久化
no : 不进行持久化 【redis就相当于非常大的一个 map 集合】
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
步骤:修改配置文件 --> ,然后从命令行以配置文件的方式启动redis服务器 : redis-server.exe redis.windows.conf,会生成一个 .aof 的文件,此后的数据将会随着陪着文件的更改从而【每次操作 || 每一秒 || 从不】持久化一次数据
5. Java 客户端 Jedis
Jedis : 一款Java操作redis数据库的工具
使用步骤:
1.下载 Jedis 的 jar 包
2.使用
//1、获取连接 Jedis jedis = new Jedis("localhost",6379); //2、操作 jedis.set("username","zhangsan"); //3、关闭连接 jedis.close();
Jedis 操作各种 redis 中的数据结构
(1)字符串类型 string
get
set
//1、获取连接 Jedis jedis = new Jedis(); //如果使用空参构造,默认值 "localhost",6379 端口 //2、存储 jedis.set("username","zhangsan"); //获取 String username = jedis.get("username"); System.out.println(username); //可以使用setex() 方法可以指定过期时间的 key -- value //将 activecode : hehe 键值对存入redis,并且20秒后自动删除该键值对 jedis.setex("activecode",20,"hehe"); //3、关闭连接 jedis.close();
(2)哈希类型 hash : map 格式
hset
hget / hgeall
//1、获取连接 Jedis jedis = new Jedis(); //如果使用空参构造,默认值 "localhost",6379 端口 //2、存储 jedis.hset("user","name","lisi"); jedis.hset("user","age","23"); jedis.hset("user","gender","male"); //获取 hash String name = jedis.hget("user","name"); //System.out.println(name); //获取 hash 的所有 map 中的数据 Map<String,String> user = jedis.hgetAll("user"); Set<String> keySet = user.keySet(); for (String key : keySet) { String value = user.get(key); System.out.println(key + "--" + value); } //3、关闭连接 jedis.close();
(3) 列表类型 list : linkedList 格式,支持重复元素
lpush / rpush\
lpop / rpop
lrange start end : 范围获取
//list的操作 @Test public void test4(){ //1、获取连接 Jedis jedis = new Jedis(); //如果使用空参构造,默认值 "localhost",6379 端口 //2、存储 jedis.lpush("mylist","a","b","c"); // c b a jedis.rpush("mylist","a","b","c"); // a b c //list 范围获取 List<String> mylist = jedis.lrange("mylist", 0, -1); System.out.println(mylist); //list弹出 String ele1 = jedis.lpop("mylist"); //左边弹出 System.out.println(ele1); String ele2 = jedis.rpop("mylist");//右边弹出 System.out.println(ele2); //3、关闭连接 jedis.close();
(4)集合类型 set : 不允许重复元素
sadd
smembers : 获取所有数据
//1、获取连接 Jedis jedis = new Jedis(); //如果使用空参构造,默认值 "localhost",6379 端口 //2、存储 jedis.sadd("myset","java","php","c++"); //获取 Set<String> myset = jedis.smembers("myset"); System.out.println(myset); //3、关闭连接 jedis.close();
(5)有序集合类型 sortedset : 不允许重复元素,且元素有顺序
zadd
//1、获取连接 Jedis jedis = new Jedis(); //如果使用空参构造,默认值 "localhost",6379 端口 //2、存储 jedis.zadd("mysortedset",3,"亚瑟"); jedis.zadd("mysortedset",30,"后羿"); jedis.zadd("mysortedset",25,"孙悟空"); //获取 Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1); System.out.println(mysortedset); //3、关闭连接 jedis.close();
Jedis 连接池 :JedisPool
使用 :
1.创建 JedisPool 连接池对象
2.调用方法 getResource()方法获取Jedis连接
//拓展 :创建一个配置对象 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(50); //最大连接数 config.setMaxIdle(10); //最大空闲连接 //1、创建 Jedis 连接池对象 JedisPool jedisPool = new JedisPool(config,"localhost",6379); //2、获取连接 Jedis jedis = jedisPool.getResource(); //3、使用 jedis.set("hehe","heihei"); //4、关闭 归还到连接池中 jedis.close(); }
Jedis连接池工具类:
/* 1、加载配置文件,配置连接池的参数 2、提供获取连接的方法 */ public class JedisPoolUtils { private static JedisPool jedisPool; //加载配置文件 static { //读取配置文件 InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties"); //创建Properties对象 Properties properties = new Properties(); //关联文件 try { properties.load(is); } catch (IOException e) { throw new RuntimeException(e); } //获取数据,设置到JedisPoolConfig中 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal"))); config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle"))); //初始化JedisPool jedisPool = new JedisPool(config,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port"))); } //获取连接方法 public static Jedis getJedis(){ return jedisPool.getResource(); } }
//Jedis连接池工具类使用 @Test public void test8(){ //通过连接池工具类获取 Jedis jedis = JedisPoolUtils.getJedis(); jedis.set("hello","world"); //4、关闭 归还到连接池中 jedis.close(); }
案例:
案例需求:
1.提供 index.html 页面,页面中有一个省份 下拉列表
2.当页面加载完成后,发送 Ajax 请求,加载所有省份
案例代码提交至码云:点击跳转
注意 :使用 redis 缓存一些不经常发生变化的数据
数据库的数据一旦发生改变,则需要更新缓存
数据库的的表执行增删改的相关操作【service对应方法】,需要将 redis 缓存数据清空,再次存入。
标签:--,redis,day23,获取,jedis,value,key,Jedis From: https://www.cnblogs.com/yumengqifei/p/16949646.html