https://www.cnblogs.com/qizi/p/8427702.html 自动生成 mapper.xml
---------------------------------------------------------------------redis-cli.exe -h 127.0.0.1 -p 6379 进行redis set mykey abcget mykey ------------------------hmset myhash fieldel "abc" field2 "hello"hget myhash field2------------------------lpush my1 hellolpush my1 nihaolpush my1 bybelrange my1 0 10-------------------------127.0.0.1:6379> sadd my2 red(integer) 1127.0.0.1:6379> sadd my2 ageren(integer) 1127.0.0.1:6379> sadd my2 blak(integer) 1127.0.0.1:6379> smembers my21) "ageren"2) "red"3) "blak"-----------------import redis.clients.jedis.Jedis;public class RedisJava{ public static void main(String[] args){ Jedis iedis =new Jedis("localhost",6379);System.out.println("连结成功");System.out.println(“服务正在运行:"+jedis.ping());jedis.set("runoobkey",”www.runoob.com“);sy}}--------------------------redis.clients/jedis/2.5.2 Jedis maven依赖<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.5.2</version></dependency>---------------------------------------list 集合public static void main(String[] args){ Jedis jedis=new Jedis("127.0.0.1",6379);jedis.lpush("list","aa");jedis.lpush("list","bb");jedis.lpush("list","cc");List<String>listCache=jedis.lrange("list",0,3);for(int i=0; i<listCache.size(); i++){ System.out.println("缓存输出"+listCache.get(i));}}---------------------------------------哈希类型Map<String,String >hashMap=new HashMap<String,String>();hashMap.put("xiaoming","man");hashMap.put("xiaohua","women");hashMap.put("xiaoma","man");jedis.hmset("test",hashMap);Map<String,String>hashData=jedis.hgetAll("test");System.out.print("获得hash缓存数据(xiaoming):"+hashData.get("xiaoming"));System.out.print("获得hash缓存数据(xiaohua):"+hashData.get("xiaohua"));输出结果:[plain] view plain copy连接成功! 获取hash缓存数据(xiaoming):man 获取hash缓存数据(xiaohua):women --------------------------------------Set(无序,不重复集合) 类型实例 jedis.sadd("test1","java");jedis.sadd("test1","hello");jedis.sadd("test1","php");Set<String> setCache=jedis.smembers("test1");for(String setStr: setCache){ System.out.print("Set集合缓存输出 "+setStr)};----------------------------------------------------------ZSet(有序,不重复集合) 类型实例jedis.zadd("test2",1,"java");jedis.zadd("test2",3,"c++");jedis.zadd("test2",2,"php");jedis.zadd("test2",2,"php");Set<String> setCache=jedis.zrange("test2",0,5);for(String setStr: setCache){ System.out.print(setStr);}获取zset缓存数据Java 获取zset缓存数据PHP 获取zset缓存数据C++ -----------------------------------------------redis实现秒杀demo2017年09月09日 18:58:12阅读数:2109代码package com.prosay.redis;
import java.util.List;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;public class SaleRunable implements Runnable{
String productKey="iphone8";//监视的key 当前秒杀商品的数量 Jedis jedis = new Jedis("localhost"); String userName; public SaleRunable(String userName){ this.userName = userName; }@Override
public void run(){ //商品的key , 秒杀有个数量 //watch 监视一个key,当事务执行之前这个key发生了改变,事务会被打断 jedis.watch(productKey); String value = jedis.get(productKey); int num = Integer.valueOf(value); //这次秒杀的商品是100个iphone8 if(num<=100&&num>=1){ //开启事务 Transaction tx = jedis.multi(); //减少一个商品数量 tx.incrBy(productKey, -1); //提交事务,如果商品数量发生了改动 则会返回null List<Object> list = tx.exec(); if(list==null || list.size()==0){ System.out.println(userName+"商品抢购失败!"); }else{ for(Object success : list){ System.out.println(userName+"("+success.toString()+")商品抢购成功,当前抢购成功的人数是:"+(1-(num-100))); } } }else{ System.out.println(userName+"商品已经被抢完了"); } jedis.close(); }}
测试
package com.prosay.redis;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import redis.clients.jedis.Jedis;
public class TestMs {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost"); jedis.set("iphone8","100"); jedis.close(); //玩多线程 ExecutorService executor = Executors.newFixedThreadPool(20);for(int i = 0 ; i < 1000; i++){
executor.execute(new SaleRunable("user"+i)); } executor.shutdown();}
}
-------------------------------------------------------------java session基于redis共享方案2017年03月29日 15:25:37阅读数:5302session基于redis共享有两种基本的方案 1、基于容器自身的扩展,比如tomcat的session-manage,可以参考如下 地址进行配置https://github.com/jcoleman/tomcat-redis-session-manager 这个方案只适用tomcat容器,而且容器需要配置,这里不具体展开,有需要的可以参考上面的地址进行配置。但是这个方案有一个好处,可以适用于struts2和springmvc的场景,而且对springmvc没有版本要求。2、基于spring-session的方案,spring-session的好处不仅仅是session共享,它还可以应用于多终端session共享,websocket,restful api等场景。下面具体说明一下
配置。特别说明spring-session是基于springmvc4.0以后的版本的,所以版本不匹配的就不能使用。mave配置
<dependency>
<groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <version>1.2.2.RELEASE</version> <type>pom</type> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.2.9.RELEASE</version> </dependency>xml配置
spring.xml<bean id="redisHttpSessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" >
<property name="maxInactiveIntervalInSeconds" value="1800" /> </bean><bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="192.168.17.24" /> <property name="port" value="6379" /> </bean>web.xml
<!-- 分布式Session共享Filter -->
<filter> <filter-name>springSessionRepositoryFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSessionRepositoryFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping>----------------------------------------------------------redis session 共享 session的生成方式是,浏览器通过请求向服务器发送数据,在发送的过程中,浏览器会带着它的请求头去请求,在这个请求头中浏览器会携带cookie和其发送的数据包括一些其他浏览器版本,请求来源等信息。而服务器会根据用户的cookie生成相应的sessoin,并在response中携带返回给浏览器。那么如果我们是跨域访问不动服务器,肯定是对不同的服务器有不同的cookie值,这样服务器就会认为这是一个新的用户在访问。以上的方式就是解决session共享的问题但是(坑来了):我们在做交互的时候大都是利用ajax在进行,ajax在请求数据的时候,是不会携带请求的cookie的,这样就算你使用了redis也不能实现session共享,我就必须要给ajax加上一条属性来表示让它携带cookie请求xhrFields: {withCredentials: true} 这样就行了。如果ajax中添加了这条属性,又会影响到后台允许跨域的设置。通常我们的跨域设置是response.setHeader("Access-Control-Allow-Origin", "*"); 在有这条属性的时候,浏览器是不会允许通配符*来允许跨域的,所有我们要修改如下跨域方式。//ori是获取请求头的域名String ori = request.getHeader("origin"); if(ori != null){ //这个是我读取配置文件的util,在这个配置文件中我写了我的所有允许跨域的域名,并且用逗号分开 String agreeDomain = ReadPropertiesUtil.getPorperties("/config.properties", "serviceDomain"); //拆分遍历这些域名,如果有匹配则直接设置这个域名允许跨域,如果没有就return false了。 String[] agreeDomainArr = agreeDomain.split(","); for (String string : agreeDomainArr) { if(ori.equals(string)){ // 接口允许跨域请求 response.setHeader("Access-Control-Allow-Origin", ori); response.setHeader("Access-Control-Allow-Credentials", "true"); } }