monbgodb简介 主页 http://www.mongodb.org/

oschina.net 介绍页 http://www.oschina.net/p/mongodb

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

面向集合存储,易存储对象类型的数据。
模式自由。
支持动态查询。
支持完全索引,包含内部对象。
支持查询。
支持复制和故障恢复。
使用高效的二进制数据存储,包括大型对象(如视频等)。
自动处理碎片,以支持云计算层次的扩展性
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
文件存储格式为BSON(一种JSON的扩展)
可通过网络访问
所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。
模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。 MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB 在32位模式运行时支持的最大文件尺寸为2GB。 MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。

在linux下先编译安装下吧。下载mongodb源码 http://downloads.mongodb.org/src/mongodb-src-r2.4.4.tar.gz

也可以下载二进制的,有各种平台的。80多MB,挺大的。建议下载二进制,因为源码编译 虽然眼前一亮,学到点新东西,但是编译体积太大了。我来研究下源码编译mongodb吧。

解压mongodb-src-r2.4.4.tar.gz后,进入目录,发现没有configure或者Makefile,一时木了,不知所戳,姑搜索 编译mongodb ,原来是这样啊:

第一步  安装SCons

Scons是一个Python写的自动化构建工具,比传统的GNU make更加简便、可靠以及高效。
到http://sourceforge.net/projects/scons/files/scons/下载源码压缩包,解压之后按照如下步骤进行安装:

python setup.py install

Centos下也可以yum install scons

第二步 编译Mongodb

进入mongodb源码目录

scons all scons –prefix=/usr/local/mongodb install -j 8

如果想要头文件和lib包,执行

scons –prefix=/usr/local/mongodb –full install -j 8

默认编译完毕要花很久的时间,而且编译体积太大了。查看下源码目录

[root@xen1 mongodb-src-r2.4.4]# du -sh * #去掉小于1M的了
15M authTest
252M bsondump
.3G build
.0M buildscripts
16M clientTest
15M firstExample6.2M httpClientTest
.5M jstests
114M mongo
252M mongobridge
254M mongod
253M mongodump
252M mongoexport
253M mongofiles
253M mongoimport
252M mongooplog
252M mongoperf
253M mongorestore
182M mongos
253M mongostat
252M mongotop
253M perftest
15M rsExample
15M secondExample
71M src
361M test
15M tutorial
15M whereExample
xxK ...
[root@xen1 mongodb-src-r2.4.4]# pwd
/root/mongodb-src-r2.4.4
[root@xen1 mongodb-src-r2.4.4]# du -sh .
13G .
[root@xen1 mongodb-src-r2.4.4]#ll
总用量
-rw-rw-r-- root root 6月 : APACHE-2.0.txt
-rwxr-xr-x root root 6月 : authTest
-rwxr-xr-x root root 6月 : bsondemo
-rwxr-xr-x root root 6月 : bsondump
drwxr-xr-x root root 6月 : build
drwxrwxr-x root root 6月 : buildscripts
-rwxr-xr-x root root 6月 : clientTest
-rw-rw-r-- root root 6月 : CONTRIBUTING.rst
drwxrwxr-x root root 6月 : debian
drwxrwxr-x root root 6月 : distsrc
drwxrwxr-x root root 6月 : docs
-rw-rw-r-- root root 6月 : doxygenConfig
-rwxr-xr-x root root 6月 : firstExample
-rw-rw-r-- root root 6月 : GNU-AGPL-3.0.txt
-rwxr-xr-x root root 6月 : httpClientTest
drwxrwxr-x root root 6月 : jstests
-rwxr-xr-x root root 6月 : mongo
-rw-rw-r-- root root 6月 : mongo_astyle
-rwxr-xr-x root root 6月 : mongobridge
-rwxr-xr-x root root 6月 : mongod
-rwxr-xr-x root root 6月 : mongodump
-rwxr-xr-x root root 6月 : mongoexport
-rwxr-xr-x root root 6月 : mongofiles
-rwxr-xr-x root root 6月 : mongoimport
-rwxr-xr-x root root 6月 : mongooplog
-rwxr-xr-x root root 6月 : mongoperf
-rwxr-xr-x root root 6月 : mongorestore
-rwxr-xr-x root root 6月 : mongos
-rwxr-xr-x root root 6月 : mongostat
-rwxr-xr-x root root 6月 : mongotop
-rwxr-xr-x root root 6月 : perftest
-rwxrwxr-x root root 6月 : README
drwxrwxr-x root root 6月 : rpm
-rwxr-xr-x root root 6月 : rsExample
-rw-rw-r-- root root 6月 : SConscript.buildinfo
-rw-rw-r-- root root 6月 : SConscript.smoke
-rw-rw-r-- root root 6月 : SConstruct
-rwxr-xr-x root root 6月 : secondExample
drwxrwxr-x root root 6月 : site_scons
drwxrwxr-x root root 6月 : src
-rwxr-xr-x root root 6月 : test
-rwxr-xr-x root root 6月 : tutorial
-rw-rw-r-- root root 6月 : valgrind.suppressions
-rwxr-xr-x root root 6月 : whereExample
-rw-rw-r-- root root 6月 : win2008plus.props
[root@xen1 mongodb-src-r2.4.4]#

scons后面跟的参数 -j 8 是8线程同时编译,加快编译速度,其他参数未知,从其他地方引用过来的。好像 直接scons -j 8  应该也可以编译。但是编译出来的mongod 文件太大了,肯定有优化的参数,暂时不知道。查看了mongodb的文档,也没看到如何编译,都是二进制安装的。我无语,哪就不研究源码编译了。

mongodb官方的 yum 源,下载到 yum.repos.d/10gen.repo ,以后就可以安装二进制包了。

# /etc/yum.repos.d/10gen.repo

[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
#baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686
gpgcheck=
enabled=
yum install mongo-10gen mongo-10gen-server 就可以安装最新版的 mongodb 了。包括init.d服务启动文件和配置文件。
启动文件mongod复制过来 参考一下。
#!/bin/bash

# mongod - Startup script for mongod

# chkconfig: 35 85 15
# description: Mongo is a scalable, document-oriented database.
# processname: mongod
# config: /etc/mongod.conf
# pidfile: /var/run/mongo/mongod.pid . /etc/rc.d/init.d/functions # things from mongod.conf get there by mongod reading it # NOTE: if you change any OPTIONS here, you get what you pay for:
# this script assumes all options are in the config file.
CONFIGFILE="/etc/mongod.conf"
OPTIONS=" -f $CONFIGFILE"
SYSCONFIG="/etc/sysconfig/mongod" # FIXME: 1.9.x has a --shutdown flag that parses the config file and
# shuts down the correct running pid, but that's unavailable in 1.8
# for now. This can go away when this script stops supporting 1.8.
DBPATH=`awk -F= '/^dbpath=/{print $2}' "$CONFIGFILE"`
PIDFILE=`awk -F= '/^dbpath\s=\s/{print $2}' "$CONFIGFILE"`
mongod=${MONGOD-/usr/bin/mongod} MONGO_USER=mongod
MONGO_GROUP=mongod if [ -f "$SYSCONFIG" ]; then
. "$SYSCONFIG"
fi # Handle NUMA access to CPUs (SERVER-3574)
# This verifies the existence of numactl as well as testing that the command works
NUMACTL_ARGS="--interleave=all"
if which numactl >/dev/null >/dev/null && numactl $NUMACTL_ARGS ls / >/dev/null >/dev/null
then
NUMACTL="numactl $NUMACTL_ARGS"
else
NUMACTL=""
fi start()
{
echo -n $"Starting mongod: "
daemon --user "$MONGO_USER" $NUMACTL $mongod $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq ] && touch /var/lock/subsys/mongod
} stop()
{
echo -n $"Stopping mongod: "
killproc -p "$PIDFILE" -d /usr/bin/mongod
RETVAL=$?
echo
[ $RETVAL -eq ] && rm -f /var/lock/subsys/mongod
} restart () {
stop
start
} ulimit -n
RETVAL= case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload|force-reload)
restart
;;
condrestart)
[ -f /var/lock/subsys/mongod ] && restart || :
;;
status)
status $mongod
RETVAL=$?
;;
*)
echo "Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
RETVAL=
esac exit $RETVAL

还有配置文件/etc/mongod.conf

# mongo.conf

#where to log
logpath=/var/log/mongo/mongod.log logappend=true # fork and run in background
fork = true #port = 27017 dbpath=/var/lib/mongo # location of pidfile
pidfilepath = /var/run/mongodb/mongod.pid # Disables write-ahead journaling
# nojournal = true # Enables periodic logging of CPU utilization and I/O wait
#cpu = true # Turn on/off security. Off is currently the default
#noauth = true
#auth = true # Verbose logging output.
#verbose = true # Inspect all client data for validity on receipt (useful for
# developing drivers)
#objcheck = true # Enable db quota management
#quota = true # Set oplogging level where n is
# 0=off (default)
# 1=W
# 2=R
# 3=both
# 7=W+some reads
#diaglog = 0 # Ignore query hints
#nohints = true # Disable the HTTP interface (Defaults to localhost:27018).
#nohttpinterface = true # Turns off server-side scripting. This will result in greatly limited
# functionality
#noscripting = true # Turns off table scans. Any query that would do a table scan fails.
#notablescan = true # Disable data file preallocation.
#noprealloc = true # Specify .ns file size for new databases.
# nssize = <size> # Accout token for Mongo monitoring server.
#mms-token = <token> # Server name for Mongo monitoring server.
#mms-name = <server-name> # Ping interval for Mongo monitoring server.
#mms-interval = <seconds> # Replication Options # in replicated mongo databases, specify here whether this is a slave or master
#slave = true
#source = master.example.com
# Slave only: specify a single database to replicate
#only = master.example.com
# or
#master = true
#source = slave.example.com

service mongod start

service mongod status

就开启了服务了。

打开浏览器 输入 http://IP:27017 显示:

You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number

按照提示,将端口号增加1000 ,打开 http://IP:28017 将会显示一个mongod服务的概述吧。此功能 或许应该关闭。

测试Insert update delete select 操作

输入mongo 即可打开客户端,连接默认端口 默认本机的mongodb的服务。

输入

db.test.save( { a:  } )
db.test.find()

第二阶段 配置jetty与mongodb之间的连接

按照官方文档,http://wiki.eclipse.org/Jetty/Tutorial/MongoDB_Session_Clustering

我把一些配置 加入到jetty.xml中,重启jetty 报错。大概是 org.eclipse.jetty.nosql.mongodb.* 不知道在哪里,后来我发现:

我发现eclipse的jetty网页 是十分让人恶心的,至少是我。

在 http://download.eclipse.org/jetty/stable-8/apidocs/ 明明有nosql.mongodb 的javadoc http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/nosql/mongodb/MongoSessionManager.html

但是我从 http://download.eclipse.org/jetty/ 下载的stable-8 里面的javadoc中却没有这块内容,为什么神奇的消失了?后来看到老外的一个文章

http://www.jamesward.com/2011/11/30/using-mongodb-for-a-java-web-apps-httpsession

使用maven来下载jetty插件,然后再%HOME%\.m2\repository\org\eclipse\jetty 出现了 jetty-nosql jetty-nosql-8.0.3.v20111011.jar ,终于看到了这个包,里面有nosql\mongodb 了。我就奇怪了,eclipse的jetty网站下载jetty 为什么没有jetty-nosql呢?如果是第三方,哪为什么在apidoc里面还有nosql的javadoc呢?

恶心。恶心eclipse。

好吧,继续配置jetty与mongodb:

jetty-nosql 下载:http://repo1.maven.org/maven2/org/eclipse/jetty/jetty-nosql/8.1.11.v20130520/

还有一个mongodb-java-driver:http://repo1.maven.org/maven2/org/mongodb/mongo-java-driver/2.7.3/

具体 有关mongodb 的java驱动 看: http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/

然后我开始了另一端苦逼的研究,把这俩jar文件放到哪里呢?我放到/root/下,然后设置CLASSPATH,添加了这两个jar的绝对路径【后来证明我的做法不被支持,继续看吧】,修改$JETTY_HOME/start.ini 加入了一个  配置选项:

etc/jetty-nosql.xml

然后 touch etc/jetty-nosql.xml ,里面内容如下:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <Set name="sessionIdManager">
<New id="mongoIdMgr" class="org.eclipse.jetty.nosql.mongodb.MongoSessionIdManager">
<Arg>
<Ref id="Server" />
</Arg>
<Set name="workerName">fred</Set>
<Set name="ScavengePeriod">60</Set> </New>
</Set>
<Call name="setAttribute">
<Arg>mongoIdMgr</Arg>
<Arg>
<Ref id="mongoIdMgr"/>
</Arg>
</Call> <New id="mongodb" class="com.mongodb.Mongo">
<Arg>
<New class="java.util.ArrayList">
<Call name="add">
<Arg>
<New class="com.mongodb.ServerAddress">
<Arg type="java.lang.String">localhost</Arg>
<Arg type="int">27017</Arg>
</New>
</Arg>
</Call>
<!-- Add more Call statements here as desired -->
</New>
</Arg> <Call name="getDB">
<Arg>HttpSessions</Arg>
<Call id="sessionDocument" name="getCollection">
<Arg>sessions</Arg>
</Call>
</Call>
<!-- If you want to configure Jetty to be able to read through the slaves, call the following: -->
<Call name="slaveOk"/>
</New> <Set name="sessionIdManager">
<New id="mongoIdMgr" class="org.eclipse.jetty.nosql.mongodb.MongoSessionIdManager">
<Arg>
<Ref id="Server"/>
</Arg>
<Arg>
<Ref id="sessionDocument"/>
</Arg>
<Set name="workerName">fred</Set>
<Set name="scavengePeriod">60</Set>
</New>
</Set> </Configure>

这个看起来是xml,其实确实是xml,但是里面的内容不是随便搞的,其会映射为一些java代码的。随便写点内容,jetty就会报异常的,我service jetty restart 报错为:

[root@localhost jetty]# service  jetty restart
Stopping Jetty: OK
Starting Jetty: 2013-06-22 11:35:20.287:WARN:oejx.XmlConfiguration:Config error at <Set name="sessionIdManager">|?<New id="mongoIdMgr" class="org.eclipse.jetty.nosql.mongodb.MongoSessionIdManager"><Arg>|???<Ref id="Server"/>|??</Arg><Set name="workerName">fred</Set><Set name="scavengeInterval">60</Set></New>|</Set> java.lang.ClassNotFoundException: org.eclipse.jetty.nosql.mongodb.MongoSessionIdManager
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.eclipse.jetty.start.Main.invokeMain(Main.java:473)
at org.eclipse.jetty.start.Main.start(Main.java:615)
at org.eclipse.jetty.start.Main.main(Main.java:96)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.nosql.mongodb.MongoSessionIdManager
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.eclipse.jetty.util.Loader.loadClass(Loader.java:100)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.nodeClass(XmlConfiguration.java:354)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:754)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.itemValue(XmlConfiguration.java:1126)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.value(XmlConfiguration.java:1029)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.set(XmlConfiguration.java:422)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:384)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:343)
at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:296)
at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1247)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1182)
... 7 more Usage: java -jar start.jar [options] [properties] [configs]
java -jar start.jar --help # for more information FAILED Sat Jun 22 11:35:23 CST 2013
[root@localhost jetty]#

没有找到类,哪就是我设置的jar的classpath居然没用,对于一般的java程序是管用的。然后研究,java -jar start.jar --help 有--list-options和--list-config 其都是在start.jar里面一个start.config的文件里面的配置,查看了下,里面的OPTIONS 其实就是指定的一些jar包,然后配合jetty-XXX.xml,就可以实现这一方面的功能了,比如jetty-ajp-VERSION.jar和jetty-ajp.xml,我在start.ini里面加入OPTIONS ajp,和etc/jetty-ajp.xml 才有了ajp的功能。

那么我的mongodb-java-driver.jar和jetty-nosql.jar放到哪里呢?难道要我修改start.jar里面的配置文件再放入,jetty,java,你有必要这么麻烦么?配置文件,你有必要弄的这样个性化,不具备普及型么?后来才发现,原来 jetty额外的包(jar文件)应该放到jetty目录的/lib/ext目录下,而不是/lib目录下。

你妹的,真方便,把两个jar放入lib/ext 再开启服务,果然OK,找到了这些个jar了,搜索jar本来是jvm干的事情,用classpath就可以做到,你非要逆天而行,自己搜索jar,还不接受jvm搜索jar的classpath路径,好吧,我认输,java有太多的这样的事情了。

测试 session是否存储到mongodb上,以及mongodb的分布式配置

TODO。。。

参考链接:

http://www.blogjava.net/xiaomage234/archive/2012/07/18/383388.html

http://www.scons.org/doc/production/HTML/scons-user/index.html

http://www.scons.org/doc/production/HTML/scons-man.html

http://cn.docs.mongodb.org/manual/

http://docs.mongodb.org/manual/

http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/

http://www.cnblogs.com/lipan/archive/2011/03/08/1966463.html mongodb 系列文章

MongoDB与sql语句对照表

SQL Statement  Mongo Query Language Statement 
CREATE TABLE USERS (a Number, b Number)
implicit; can be done explicitly
INSERT INTO USERS VALUES(1,1)
db.users.insert({a:1,b:1})
SELECT a,b FROM users
db.users.find({}, {a:1,b:1})
SELECT * FROM users
db.users.find()
SELECT * FROM users WHERE age=33
db.users.find({age:33})
SELECT a,b FROM users WHERE age=33
db.users.find({age:33}, {a:1,b:1})
SELECT * FROM users WHERE age=33 ORDER BY name
db.users.find({age:33}).sort({name:1})
SELECT * FROM users WHERE age>33
db.users.find({'age':{$gt:33}})})
SELECT * FROM users WHERE age<33
db.users.find({'age':{$lt:33}})})
SELECT * FROM users WHERE name LIKE "%Joe%"
db.users.find({name:/Joe/})
SELECT * FROM users WHERE name LIKE "Joe%"
db.users.find({name:/^Joe/})
SELECT * FROM users WHERE age>33 AND age<=40
db.users.find({'age':{$gt:33,$lte:40}})})
SELECT * FROM users ORDER BY name DESC
db.users.find().sort({name:-1})
CREATE INDEX idx_name ON users(name)
db.users.ensureIndex({name:1})
CREATE INDEX idx_name ON users(name,ts DESC)
db.users.ensureIndex({name:1,ts:-1})
SELECT * FROM users WHERE a=1 and b='q'
db.users.find({a:1,b:'q'})
SELECT * FROM users LIMIT 10 SKIP 20
db.users.find().limit(10).skip(20)
SELECT * FROM users WHERE a=1 or b=2
db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )
SELECT * FROM users LIMIT 1
db.users.findOne()
EXPLAIN SELECT * FROM users WHERE z=3
db.users.find({z:3}).explain()
SELECT DISTINCT last_name FROM users
db.users.distinct('last_name')
SELECT COUNT(*y) FROM users
db.users.count()
SELECT COUNT(*y) FROM users where AGE > 30
db.users.find({age: {'$gt': 30}}).count()
SELECT COUNT(AGE) from users
db.users.find({age: {'$exists': true}}).count()
UPDATE users SET a=1 WHERE b='q'
db.users.update({b:'q'}, {$set:{a:1}}, false, true)
UPDATE users SET a=a+2 WHERE b='q'
db.users.update({b:'q'}, {$inc:{a:2}}, false, true)
DELETE FROM users WHERE z="abc"
db.users.remove({z:'abc'});

jetty+mongodb 配置session外部数据库存储的更多相关文章

  1. Spring-Boot 多数据源配置+动态数据源切换+多数据源事物配置实现主从数据库存储分离

    一.基础介绍 多数据源字面意思,比如说二个数据库,甚至不同类型的数据库.在用SpringBoot开发项目时,随着业务量的扩大,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源. ...

  2. Jetty集群配置Session存储到MySQL、MongoDB

    在Web开发中,Session表示HTTP服务器与客户端(例如浏览器)的“会话”,每个客户端会有其对应的Session保存在服务器端,通常用来保存和客户端关联的一些信息,例如是否登录.购物车等. Se ...

  3. Jetty容器集群配置Session存储到MySQL、MongoDB

    在Web开发中,Session表示HTTP服务器与客户端(例如浏览器)的"会话",每个客户端会有其对应的Session保存在服务器端,通常用来保存和客户端关联的一些信息,例如是否登 ...

  4. SpringBoot集成Shiro并用MongoDB做Session存储

    之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...

  5. redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题

    先来说下session和cookie的异同 session和cookie不仅仅是一个存放在服务器端,一个存放在客户端那么笼统 session虽然存放在服务器端,但是也需要和客户端相互匹配,试想一个浏览 ...

  6. nginx 负载均衡、用数据库存储Session,来实现多站点共享Session[转]

    多站点共享Session常见的作法有: 1.使用.net自动的状态服务(Asp.net State Service); 2.使用.net的Session数据库: 3.使用Memcached. 4.使用 ...

  7. .net的session详解 存储模式 存到数据库中 使用范围与大小限制 生命周期

    Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息.举个例子来说,我们可以把已登录用户的用户名放在Session中,这样就能通过判断Session中的某个 ...

  8. Kali Linux 下安装配置MongoDB数据库 ubuntu 下安装配置MongoDB源码安装数据库

    Kali Linux 下安装配置MongoDB数据库   1.下载mongodb.tgz 压缩包: 2.解压到:tar -zxvf mongodb.tgz /usr/local/mongodb 3.创 ...

  9. koa2学习笔记03 - 给koa2配置session ——koa2结构分层、配置数据库、接口

    前言 这一章写的很没有底气,因为我完全不懂一个正经的后台应用是怎么结构分层的, 所有只能按照我自己的理解去写,即使这样也仅仅只分离出了controller层, 至于所谓的service层,dao层,完 ...

随机推荐

  1. ARP协议详解之Gratuitous ARP(免费ARP)

    ARP协议详解之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP,无故ARP.Gratuitous ARP不同于一般 ...

  2. leetcode 两数之和 python

      两数之和     给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 1 ...

  3. P4811 C’s problem(c)

    P4811 C’s problem(c)From: admin 时间: 1000ms / 空间: 65536KiB / Java类名: Main 背景 清北NOIP春季系列课程 描述 题目描述 小C是 ...

  4. 懒人的福利?教你用set维护斜率优化凸包

    斜率优化题目大家肯定都做得不少了,有一些题目查询插入点的x坐标和查询斜率都不单调,这样就需要维护动态凸包并二分斜率.(例如bzoj1492) 常规的做法是cdq分治或手写平衡树维护凸包,然而如果我不愿 ...

  5. 【bzoj 1076】【SCOI2008】奖励关

    1076: [SCOI2008]奖励关 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1602  Solved: 891[Submit][Status ...

  6. STM32 通用定时器的几种配置方式

    STM32 通用定时器的几种配置方式 //------------------------------------------------------------------------------ ...

  7. 《Go学习笔记 . 雨痕》反射

    一.类型(Type) 反射(reflect)让我们能在运行期探知对象的类型信息和内存结构,这从一定程度上弥(mi)补了静态语言在动态行为上的不足.同时,反射还是实现元编程的重要手段. 和 C 数据结构 ...

  8. 添加Godaddy二级域名子域名方法

    我们在申请注册了Godaddy域名后,如果需要开通二级域名,方法简单只需要在Godaddy添加二级域名(子域名)只要在域名管理后台添加A记录或CNAME别名(Aliases)即可.但我们如果需要添加二 ...

  9. MySQL 5.6主从Slave_IO_Running:Connecting/error connecting to master *- retry

    刚配置的MySQL主从,在从机上看到 点击(此处)折叠或打开 mysql> SHOW slave STATUS \\G *************************** 1. row ** ...

  10. 自定义一个可以被序列化的泛型Dictionary<TKey,TValue>集合

    Dictionary是一个键值类型的集合.它有点像数组,但Dictionary的键可以是任何类型,内部使用Hash Table存储键和值.本篇自定义一个类型安全的泛型Dictionary<TKe ...