//伙计们,请帮助绝对缓存和滑动缓存无法正常工作,我无法找到问题所在
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Web.Configuration;
using System.Web.Caching;
namespace WebApplication154
{
public partial class WebForm1 : System.Web.UI.Page
{
string cs =
WebConfigurationManager.ConnectionStrings["cs"].ConnectionString;
代码以在页面加载时绑定网格视图
protected void Page_Load(object sender, EventArgs e)
{
lblserver.Text = DateTime.Now.ToString();
DataSet ds = getdata();
Cache["products"] = ds;
grid1.DataSource = ds;
grid1.DataBind();
}
我正在将数据从数据库传递到数据集
public DataSet getdata()
{
SqlConnection conn = new SqlConnection(cs);
SqlDataAdapter da = new SqlDataAdapter("spfrag", conn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
即使我提到了以下代码,数据也不会缓存
protected void btnsubmit_Click(object sender, EventArgs e)
{
if (Cache["products"] != null)
{
DataSet ds = (DataSet)Cache["products"];
grid1.DataSource = ds;
grid1.DataBind();
}
else
{
DataSet ds = getdata();
Cache.Add("products", ds, null, Cache.NoAbsoluteExpiration,
TimeSpan.FromSeconds(20), CacheItemPriority.Default, null);
grid1.DataSource = ds;
grid1.DataBind();
}
}
}
答案 0 :(得分:1)
您可能想尝试从import java.util.*;
import java.util.stream.*;
public class IntegerSetProcess {
public static void main(String[] args) {
// Input data
List<IntegerSet> inputList =
Arrays.asList(new IntegerSet(new int [] {11}),
new IntegerSet(new int [] {12, 555}),
new IntegerSet(new int [] {2, 333, 555, 9, 144, 89}),
new IntegerSet(new int [] {12}),
new IntegerSet(new int [] {12, 3, 555, 90, 42, 789, 15000}),
new IntegerSet(new int [] {2, 555, 9, 89, 333, 144}),
new IntegerSet(new int [] {555, 12}),
new IntegerSet(new int [] {222, 12, 41320, 0, 769942}),
new IntegerSet(new int [] {910, 77}));
// Distinct IntegerSets
List<IntegerSet> distinctList =
inputList.stream()
.distinct()
.sorted()
.collect(Collectors.toList());
// Filter subsets to get result
List<IntegerSet> resultList = doSubsetFiltering(distinctList);
// Result data in original form (optional)
resultList.stream()
.forEach(e -> System.out.println(Arrays.toString(e.getOriginal())));
}
/*
* Takes the input List<IntegerSet> and removes all the IntegerSets with
* elements as subset in any other IntegerSet.
*/
private static List<IntegerSet> doSubsetFiltering(List<IntegerSet> listIs) {
List<IntegerSet> removedIs = new ArrayList<>();
OUTER_LOOP: // size-1, the last element is not iterated
for (int i = 0; i < listIs.size()-1; i++) {
IntegerSet thisIs = listIs.get(i);
INNER_LOOP: // i+1, the checking starts from the next IntegerSet
for (int j = i+1; j < listIs.size(); j++) {
IntegerSet nextIs = listIs.get(j);
if (isSubset(thisIs.getData(), nextIs.getData())) {
// To remove thisIs set as it is a subset of isNext
removedIs.add(thisIs);
break INNER_LOOP;
}
} // inner-for-loop
} // outer for-loop
listIs.removeAll(removedIs);
return listIs;
}
// Returns true if the input array thisIs has all its elements in nextIs.
public static boolean isSubset(int[] thisIs, int[] nextIs) {
for(int i : thisIs) {
if (Arrays.binarySearch(nextIs, i) < 0) {
return false;
}
}
return true;
}
}
import java.util.*;
import java.util.stream.*;
public class IntegerSet implements Comparable<IntegerSet> {
private int[] data;
private int[] original;
public IntegerSet(int[] intput) {
original = IntStream.of(intput).toArray();
data = intput;
Arrays.sort(data);
}
public int[] getData() {
return data;
}
public int[] getOriginal() {
return original;
}
@Override
public String toString() {
return Arrays.toString(data);
}
@Override
public boolean equals(Object obj) {
IntegerSet is = (IntegerSet) obj;
if (Arrays.equals(data, is.getData())) {
return true;
}
return false;
}
@Override
public int hashCode() {
return data.length;
}
@Override
public int compareTo(IntegerSet is) {
return Integer.valueOf(data.length).compareTo(is.getData().length);
}
}
中的缓存中拉出,并且仅在其中缓存为空时才从数据库中拉出。查看example
现在这种编码方式只能在第二次getdata()
事件触发时从缓存中提取。您最终也将在每个btnsubmit_Click
上访问数据库,这也会在Page_Load
上触发。